From 74796543cff18f26d2f4288553ab3098f5285a2e Mon Sep 17 00:00:00 2001 From: Prabhanjan Kandula Date: Mon, 17 Jul 2023 23:57:01 -0700 Subject: [PATCH] disp: msm: sde: reset cwb encoder after commit done complete Postpone virtual encoder reset until commit done complete on all the encoders of the crtc to ensure cwb encoder resources are held until it's primary encoder commit with cwb resources disable is picked by HW. Change-Id: I820317d13c00b44f6edd69acff83dc3b494b6282 Signed-off-by: Prabhanjan Kandula --- msm/sde/sde_kms.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) 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);