disp: msm: sde: avoid setting plane qos_dirty during cwb modeset
The encoder modeset updates all the plane's qos_dirty flag attached to the crtc to make sure the qos params are updated during seamless mode-switch cases like fps or resolution switch. But this is not required for cwb encoder modeset as it does not have any effect on the planes attached to the main display. Add check to avoid this reprogramming. Change-Id: I1ab7a71971b7200a50e6643407327734b1c9cbc5 Signed-off-by: Veera Sundaram Sankaran <quic_veeras@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
83cb3d44af
commit
1b1618ed36
@@ -6870,6 +6870,7 @@ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc)
|
|||||||
struct drm_plane *plane;
|
struct drm_plane *plane;
|
||||||
struct drm_plane_state *state;
|
struct drm_plane_state *state;
|
||||||
struct sde_plane_state *pstate;
|
struct sde_plane_state *pstate;
|
||||||
|
u32 plane_mask = 0;
|
||||||
|
|
||||||
drm_atomic_crtc_for_each_plane(plane, crtc) {
|
drm_atomic_crtc_for_each_plane(plane, crtc) {
|
||||||
state = plane->state;
|
state = plane->state;
|
||||||
@@ -6879,7 +6880,10 @@ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc)
|
|||||||
pstate = to_sde_plane_state(state);
|
pstate = to_sde_plane_state(state);
|
||||||
|
|
||||||
pstate->dirty |= SDE_PLANE_DIRTY_QOS;
|
pstate->dirty |= SDE_PLANE_DIRTY_QOS;
|
||||||
|
plane_mask |= drm_plane_mask(plane);
|
||||||
}
|
}
|
||||||
|
SDE_EVT32(DRMID(crtc), plane_mask);
|
||||||
|
|
||||||
sde_crtc_update_line_time(crtc);
|
sde_crtc_update_line_time(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2643,6 +2643,12 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
|
|||||||
|
|
||||||
sde_enc->crtc = drm_enc->crtc;
|
sde_enc->crtc = drm_enc->crtc;
|
||||||
sde_crtc = to_sde_crtc(drm_enc->crtc);
|
sde_crtc = to_sde_crtc(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);
|
sde_crtc_set_qos_dirty(drm_enc->crtc);
|
||||||
|
|
||||||
/* get and store the mode_info */
|
/* get and store the mode_info */
|
||||||
@@ -2672,8 +2678,6 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return;
|
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) &&
|
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_state->cached_cwb_enc_mask & drm_encoder_mask(drm_enc)))) {
|
||||||
SDE_EVT32(DRMID(drm_enc), sde_crtc_state->cwb_enc_mask,
|
SDE_EVT32(DRMID(drm_enc), sde_crtc_state->cwb_enc_mask,
|
||||||
|
Reference in New Issue
Block a user