diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index a9d7b76fb3..35645ea2d2 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -6870,6 +6870,7 @@ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc) struct drm_plane *plane; struct drm_plane_state *state; struct sde_plane_state *pstate; + u32 plane_mask = 0; drm_atomic_crtc_for_each_plane(plane, crtc) { state = plane->state; @@ -6879,7 +6880,10 @@ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc) pstate = to_sde_plane_state(state); pstate->dirty |= SDE_PLANE_DIRTY_QOS; + plane_mask |= drm_plane_mask(plane); } + SDE_EVT32(DRMID(crtc), plane_mask); + sde_crtc_update_line_time(crtc); } diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 5d5bdee228..f9a7d78c4b 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2643,7 +2643,13 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, sde_enc->crtc = drm_enc->crtc; sde_crtc = to_sde_crtc(drm_enc->crtc); - sde_crtc_set_qos_dirty(drm_enc->crtc); + + crtc_state = sde_crtc->base.state; + sde_crtc_state = to_sde_crtc_state(crtc_state); + + if (!((sde_enc->disp_info.intf_type == DRM_MODE_CONNECTOR_VIRTUAL) && + ((sde_crtc_state->cached_cwb_enc_mask & drm_encoder_mask(drm_enc))))) + sde_crtc_set_qos_dirty(drm_enc->crtc); /* get and store the mode_info */ conn = sde_encoder_get_connector(sde_kms->dev, drm_enc); @@ -2672,8 +2678,6 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, if (ret) return; - crtc_state = sde_crtc->base.state; - sde_crtc_state = to_sde_crtc_state(crtc_state); if ((sde_enc->disp_info.intf_type == DRM_MODE_CONNECTOR_VIRTUAL) && ((sde_crtc_state->cached_cwb_enc_mask & drm_encoder_mask(drm_enc)))) { SDE_EVT32(DRMID(drm_enc), sde_crtc_state->cwb_enc_mask,