diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 90969209a7..14aea2ca24 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -1662,7 +1662,7 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms, struct drm_crtc *crtc) { struct sde_kms *sde_kms; - struct drm_encoder *encoder; + struct drm_encoder *encoder, *cwb_enc = NULL; struct drm_device *dev; int ret; bool cwb_disabling; @@ -1694,9 +1694,10 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms, list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { cwb_disabling = false; if (encoder->crtc != crtc) { - cwb_disabling = sde_encoder_is_cwb_disabling(encoder, - crtc); - if (!cwb_disabling) + cwb_disabling = sde_encoder_is_cwb_disabling(encoder, crtc); + if (cwb_disabling) + cwb_enc = encoder; + else continue; } @@ -1714,21 +1715,17 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms, SDE_EVT32(DRMID(crtc), DRMID(encoder), cwb_disabling, ret, SDE_EVTLOG_ERROR); sde_crtc_request_frame_reset(crtc, encoder); - - /* call ensure virt_reset for cwb encoder before exiting the loop */ - if (cwb_disabling) - sde_encoder_virt_reset(encoder); break; } sde_encoder_hw_fence_error_handle(encoder); sde_crtc_complete_flip(crtc, NULL); - - if (cwb_disabling) - sde_encoder_virt_reset(encoder); } + if (cwb_disabling && cwb_enc) + sde_encoder_virt_reset(cwb_enc); + /* avoid system cache update to set rd-noalloc bit when NSE feature is enabled */ if (!test_bit(SDE_FEATURE_SYS_CACHE_NSE, sde_kms->catalog->features)) sde_crtc_static_cache_read_kickoff(crtc);