diff options
| author | Alan Kwong <akwong@codeaurora.org> | 2016-11-03 00:56:56 -0400 |
|---|---|---|
| committer | Alan Kwong <akwong@codeaurora.org> | 2016-12-14 10:00:00 -0500 |
| commit | f94d0f347a9df0ad387b3793d2a69e7dfe3bbcc7 (patch) | |
| tree | e7fb2a8cff37b28438a51fe4c1b8a250ba04af17 /drivers/gpu | |
| parent | 85708a843e8a86fcdc67cd8ab6d0beff1238b3f3 (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.c | 26 |
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); } |
