diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 83a7bbef..72853a46 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -5330,6 +5330,23 @@ exit: return ret; } +void sde_crtc_set_qos_dirty(struct drm_crtc *crtc) +{ + struct drm_plane *plane; + struct drm_plane_state *state; + struct sde_plane_state *pstate; + + drm_atomic_crtc_for_each_plane(plane, crtc) { + state = plane->state; + if (!state) + continue; + + pstate = to_sde_plane_state(state); + + pstate->dirty |= SDE_PLANE_DIRTY_QOS; + } +} + /** * sde_crtc_atomic_get_property - retrieve a crtc drm property * @crtc: Pointer to drm crtc structure diff --git a/msm/sde/sde_crtc.h b/msm/sde/sde_crtc.h index 3b5470b4..133446db 100644 --- a/msm/sde/sde_crtc.h +++ b/msm/sde/sde_crtc.h @@ -819,6 +819,13 @@ void sde_crtc_timeline_status(struct drm_crtc *crtc); void sde_crtc_update_cont_splash_settings( struct drm_crtc *crtc); +/** + * sde_crtc_set_qos_dirty - update plane dirty flag to include + * QoS reprogramming which is required during fps switch + * @crtc: Pointer to drm crtc structure + */ +void sde_crtc_set_qos_dirty(struct drm_crtc *crtc); + /** * sde_crtc_misr_setup - to configure and enable/disable MISR * @crtc: Pointer to drm crtc structure diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 7c9ee432..5e255937 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2122,6 +2122,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, } drm_connector_list_iter_end(&conn_iter); + sde_crtc_set_qos_dirty(sde_enc->crtc); + if (!conn) { SDE_ERROR_ENC(sde_enc, "failed to find attached connector\n"); return;