summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlan Kwong <akwong@codeaurora.org>2016-11-03 00:56:56 -0400
committerAlan Kwong <akwong@codeaurora.org>2016-12-14 10:00:00 -0500
commitf94d0f347a9df0ad387b3793d2a69e7dfe3bbcc7 (patch)
treee7fb2a8cff37b28438a51fe4c1b8a250ba04af17 /drivers/gpu
parent85708a843e8a86fcdc67cd8ab6d0beff1238b3f3 (diff)
drm/msm/sde: bypass crtc atomic begin/flush if disabled
Current crtc exeuctes atomic begin and flush even if crtc is not enabled. This causes unnecessary updates to crtc. Hence, modify crtc to bypass atomic begin and flush if not enabled. Change-Id: I1de9c0965e552126ed7be59f7ee5400e3605a17f Signed-off-by: Alan Kwong <akwong@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_crtc.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_crtc.c b/drivers/gpu/drm/msm/sde/sde_crtc.c
index 535a033435d2..be83ca095de4 100644
--- a/drivers/gpu/drm/msm/sde/sde_crtc.c
+++ b/drivers/gpu/drm/msm/sde/sde_crtc.c
@@ -550,13 +550,19 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
unsigned long flags;
u32 i;
- SDE_DEBUG("\n");
-
if (!crtc) {
SDE_ERROR("invalid crtc\n");
return;
}
+ if (!crtc->state->enable) {
+ SDE_DEBUG("crtc%d -> enable %d, skip atomic_begin\n",
+ crtc->base.id, crtc->state->enable);
+ return;
+ }
+
+ SDE_DEBUG("crtc%d\n", crtc->base.id);
+
sde_crtc = to_sde_crtc(crtc);
dev = crtc->dev;
@@ -612,7 +618,13 @@ static void sde_crtc_atomic_flush(struct drm_crtc *crtc,
return;
}
- SDE_DEBUG("\n");
+ if (!crtc->state->enable) {
+ SDE_DEBUG("crtc%d -> enable %d, skip atomic_flush\n",
+ crtc->base.id, crtc->state->enable);
+ return;
+ }
+
+ SDE_DEBUG("crtc%d\n", crtc->base.id);
sde_crtc = to_sde_crtc(crtc);
@@ -667,7 +679,7 @@ static void sde_crtc_destroy_state(struct drm_crtc *crtc,
sde_crtc = to_sde_crtc(crtc);
cstate = to_sde_crtc_state(state);
- SDE_DEBUG("\n");
+ SDE_DEBUG("crtc%d\n", crtc->base.id);
__drm_atomic_helper_crtc_destroy_state(crtc, state);
@@ -783,7 +795,7 @@ static void sde_crtc_disable(struct drm_crtc *crtc)
}
sde_crtc = to_sde_crtc(crtc);
- SDE_DEBUG("\n");
+ SDE_DEBUG("crtc%d\n", crtc->base.id);
mutex_lock(&sde_crtc->crtc_lock);
if (atomic_read(&sde_crtc->vblank_refcount)) {
@@ -818,7 +830,7 @@ static void sde_crtc_enable(struct drm_crtc *crtc)
return;
}
- SDE_DEBUG("\n");
+ SDE_DEBUG("crtc%d\n", crtc->base.id);
sde_crtc = to_sde_crtc(crtc);
mixer = sde_crtc->mixers;
@@ -1017,7 +1029,7 @@ void sde_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file)
{
struct sde_crtc *sde_crtc = to_sde_crtc(crtc);
- SDE_DEBUG("%s: cancel: %p", sde_crtc->name, file);
+ SDE_DEBUG("%s: cancel: %p\n", sde_crtc->name, file);
_sde_crtc_complete_flip(crtc, file);
}