]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/msm/dpu: move needs_cdm setting to dpu_encoder_get_topology()
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Thu, 23 Jan 2025 12:43:34 +0000 (14:43 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 25 Feb 2025 18:07:44 +0000 (20:07 +0200)
As a preparation for calling dpu_encoder_get_topology() from different
places, move the code setting topology->needs_cdm to that function
(instead of patching topology separately).

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/633395/
Link: https://lore.kernel.org/r/20250123-drm-dirty-modeset-v2-2-bbfd3a6cd1a4@linaro.org
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c

index aeec5a5ab8ffe602cb420645aad716c3f12b2163..de329761cdb6bab37d920c07fb6ef2e195e61aa8 100644 (file)
@@ -652,8 +652,11 @@ static struct msm_display_topology dpu_encoder_get_topology(
                        struct dpu_kms *dpu_kms,
                        struct drm_display_mode *mode,
                        struct drm_crtc_state *crtc_state,
+                       struct drm_connector_state *conn_state,
                        struct drm_dsc_config *dsc)
 {
+       struct msm_drm_private *priv = dpu_enc->base.dev->dev_private;
+       struct msm_display_info *disp_info = &dpu_enc->disp_info;
        struct msm_display_topology topology = {0};
        int i, intf_count = 0;
 
@@ -702,6 +705,23 @@ static struct msm_display_topology dpu_encoder_get_topology(
                topology.num_intf = 1;
        }
 
+       /*
+        * Use CDM only for writeback or DP at the moment as other interfaces cannot handle it.
+        * If writeback itself cannot handle cdm for some reason it will fail in its atomic_check()
+        * earlier.
+        */
+       if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) {
+               struct drm_framebuffer *fb;
+
+               fb = conn_state->writeback_job->fb;
+
+               if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb)))
+                       topology.needs_cdm = true;
+       } else if (disp_info->intf_type == INTF_DP) {
+               if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], mode))
+                       topology.needs_cdm = true;
+       }
+
        return topology;
 }
 
@@ -749,9 +769,7 @@ static int dpu_encoder_virt_atomic_check(
        struct dpu_kms *dpu_kms;
        struct drm_display_mode *adj_mode;
        struct msm_display_topology topology;
-       struct msm_display_info *disp_info;
        struct dpu_global_state *global_state;
-       struct drm_framebuffer *fb;
        struct drm_dsc_config *dsc;
        int ret = 0;
 
@@ -765,7 +783,6 @@ static int dpu_encoder_virt_atomic_check(
        DPU_DEBUG_ENC(dpu_enc, "\n");
 
        priv = drm_enc->dev->dev_private;
-       disp_info = &dpu_enc->disp_info;
        dpu_kms = to_dpu_kms(priv->kms);
        adj_mode = &crtc_state->adjusted_mode;
        global_state = dpu_kms_get_global_state(crtc_state->state);
@@ -776,22 +793,8 @@ static int dpu_encoder_virt_atomic_check(
 
        dsc = dpu_encoder_get_dsc_config(drm_enc);
 
-       topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, dsc);
-
-       /*
-        * Use CDM only for writeback or DP at the moment as other interfaces cannot handle it.
-        * If writeback itself cannot handle cdm for some reason it will fail in its atomic_check()
-        * earlier.
-        */
-       if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) {
-               fb = conn_state->writeback_job->fb;
-
-               if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb)))
-                       topology.needs_cdm = true;
-       } else if (disp_info->intf_type == INTF_DP) {
-               if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], adj_mode))
-                       topology.needs_cdm = true;
-       }
+       topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, conn_state,
+                                           dsc);
 
        if (topology.needs_cdm && !dpu_enc->cur_master->hw_cdm)
                crtc_state->mode_changed = true;