diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index bf45fb85..88731f0b 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2777,6 +2777,7 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, sde_crtc_state->cached_cwb_enc_mask); sde_crtc_state->cwb_enc_mask = sde_crtc_state->cached_cwb_enc_mask; sde_encoder_set_clone_mode(drm_enc, crtc_state); + sde_crtc->cached_encoder_mask |= drm_encoder_mask(drm_enc); } /* reserve dynamic resources now, indicating non test-only */ diff --git a/msm/sde/sde_encoder_phys_wb.c b/msm/sde/sde_encoder_phys_wb.c index 995b1e0b..9e952e86 100644 --- a/msm/sde/sde_encoder_phys_wb.c +++ b/msm/sde/sde_encoder_phys_wb.c @@ -1927,7 +1927,9 @@ static bool _sde_encoder_phys_wb_is_idle(struct sde_encoder_phys *phys_enc) static void _sde_encoder_phys_wb_reset_state(struct sde_encoder_phys *phys_enc) { struct sde_encoder_phys_wb *wb_enc = to_sde_encoder_phys_wb(phys_enc); + struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(phys_enc->parent); struct sde_wb_device *wb_dev = wb_enc->wb_dev; + struct sde_crtc *sde_crtc; phys_enc->enable_state = SDE_ENC_DISABLED; @@ -1939,6 +1941,10 @@ static void _sde_encoder_phys_wb_reset_state(struct sde_encoder_phys *phys_enc) wb_enc->wb_aspace = NULL; } + sde_crtc = to_sde_crtc(sde_enc->crtc); + if (sde_crtc) + sde_crtc->cached_encoder_mask &= ~drm_encoder_mask(phys_enc->parent); + wb_enc->crtc = NULL; phys_enc->hw_cdm = NULL; phys_enc->hw_ctl = NULL;