drm/msm/dpu: set pdpu->is_rt_pipe early in dpu_plane_sspp_atomic_update()
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Thu, 29 Dec 2022 19:18:30 +0000 (21:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:39:26 +0000 (09:39 +0100)
[ Upstream commit 1d233b1cb149ec78c20fac58331b27bb460f9558 ]

The function dpu_plane_sspp_atomic_update() updates pdpu->is_rt_pipe
flag, but after the commit 854f6f1c653b ("drm/msm/dpu: update the qos
remap only if the client type changes") it sets the flag late, after all
the qos functions have updated QoS programming. Move the flag update
back to the place where it happened before the mentioned commit to let
the pipe be programmed according to its current RT/non-RT state.

Fixes: 854f6f1c653b ("drm/msm/dpu: update the qos remap only if the client type changes")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/516239/
Link: https://lore.kernel.org/r/20221229191856.3508092-2-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c

index e32fe89c203cd535a7b6caa21821ba706b723873..59390dc3d1b8c047dd127f39f9ea046b4b0c251d 100644 (file)
@@ -1089,7 +1089,7 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane)
        struct dpu_plane_state *pstate = to_dpu_plane_state(state);
        struct drm_crtc *crtc = state->crtc;
        struct drm_framebuffer *fb = state->fb;
-       bool is_rt_pipe, update_qos_remap;
+       bool is_rt_pipe;
        const struct dpu_format *fmt =
                to_dpu_format(msm_framebuffer_format(fb));
 
@@ -1100,6 +1100,9 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane)
        pstate->pending = true;
 
        is_rt_pipe = (dpu_crtc_get_client_type(crtc) != NRT_CLIENT);
+       pstate->needs_qos_remap |= (is_rt_pipe != pdpu->is_rt_pipe);
+       pdpu->is_rt_pipe = is_rt_pipe;
+
        _dpu_plane_set_qos_ctrl(plane, false, DPU_PLANE_QOS_PANIC_CTRL);
 
        DPU_DEBUG_PLANE(pdpu, "FB[%u] " DRM_RECT_FP_FMT "->crtc%u " DRM_RECT_FMT
@@ -1205,14 +1208,8 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane)
                _dpu_plane_set_ot_limit(plane, crtc);
        }
 
-       update_qos_remap = (is_rt_pipe != pdpu->is_rt_pipe) ||
-                       pstate->needs_qos_remap;
-
-       if (update_qos_remap) {
-               if (is_rt_pipe != pdpu->is_rt_pipe)
-                       pdpu->is_rt_pipe = is_rt_pipe;
-               else if (pstate->needs_qos_remap)
-                       pstate->needs_qos_remap = false;
+       if (pstate->needs_qos_remap) {
+               pstate->needs_qos_remap = false;
                _dpu_plane_set_qos_remap(plane);
        }