|
@@ -3129,7 +3129,9 @@ static void _sde_plane_update_properties(struct drm_plane *plane,
|
|
|
psde->pipe_hw->ops.setup_sharpening)
|
|
|
_sde_plane_update_sharpening(psde);
|
|
|
|
|
|
- _sde_plane_set_qos_lut(plane, crtc, fb);
|
|
|
+ if (pstate->dirty & (SDE_PLANE_DIRTY_QOS | SDE_PLANE_DIRTY_RECTS |
|
|
|
+ SDE_PLANE_DIRTY_FORMAT))
|
|
|
+ _sde_plane_set_qos_lut(plane, crtc, fb);
|
|
|
|
|
|
if (plane->type != DRM_PLANE_TYPE_CURSOR) {
|
|
|
_sde_plane_set_qos_ctrl(plane, true, SDE_PLANE_QOS_PANIC_CTRL);
|
|
@@ -3138,7 +3140,8 @@ static void _sde_plane_update_properties(struct drm_plane *plane,
|
|
|
_sde_plane_set_ts_prefill(plane, pstate);
|
|
|
}
|
|
|
|
|
|
- _sde_plane_set_qos_remap(plane);
|
|
|
+ if (pstate->dirty & SDE_PLANE_DIRTY_QOS)
|
|
|
+ _sde_plane_set_qos_remap(plane);
|
|
|
|
|
|
/* clear dirty */
|
|
|
pstate->dirty = 0x0;
|
|
@@ -3155,6 +3158,7 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane,
|
|
|
struct drm_framebuffer *fb;
|
|
|
int idx;
|
|
|
int dirty_prop_flag;
|
|
|
+ bool is_rt;
|
|
|
|
|
|
if (!plane) {
|
|
|
SDE_ERROR("invalid plane\n");
|
|
@@ -3231,12 +3235,17 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane,
|
|
|
|
|
|
_sde_plane_set_scanout(plane, pstate, &psde->pipe_cfg, fb);
|
|
|
|
|
|
+ is_rt = sde_crtc_is_rt_client(crtc, crtc->state);
|
|
|
+ if (is_rt != psde->is_rt_pipe) {
|
|
|
+ psde->is_rt_pipe = is_rt;
|
|
|
+ pstate->dirty |= SDE_PLANE_DIRTY_QOS;
|
|
|
+ }
|
|
|
+
|
|
|
/* early out if nothing dirty */
|
|
|
if (!pstate->dirty)
|
|
|
return 0;
|
|
|
pstate->pending = true;
|
|
|
|
|
|
- psde->is_rt_pipe = sde_crtc_is_rt_client(crtc, crtc->state);
|
|
|
_sde_plane_set_qos_ctrl(plane, false, SDE_PLANE_QOS_PANIC_CTRL);
|
|
|
|
|
|
_sde_plane_update_properties(plane, crtc, fb);
|