drm/msm/dpu: use single CTL if it is the only CTL returned by RM
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 7 Mar 2025 06:24:52 +0000 (08:24 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Thu, 1 May 2025 20:39:40 +0000 (23:39 +0300)
On DPU >= 5.0 CTL blocks were reworked in order to support using a
single CTL for all outputs. In preparation of reworking the RM code to
return single CTL make sure that dpu_encoder can cope with that.

Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/641582/
Link: https://lore.kernel.org/r/20250307-dpu-active-ctl-v3-4-5d20655f10ca@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c

index 862e9e6bf0a5522d3877cbb4b9dfa385d6ab64e5..f9c46180b8f7ace9122e74015244334c1f13ef2b 100644 (file)
@@ -1246,7 +1246,11 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
                        return;
                }
 
-               phys->hw_ctl = i < num_ctl ? to_dpu_hw_ctl(hw_ctl[i]) : NULL;
+               /* Use first (and only) CTL if active CTLs are supported */
+               if (num_ctl == 1)
+                       phys->hw_ctl = to_dpu_hw_ctl(hw_ctl[0]);
+               else
+                       phys->hw_ctl = i < num_ctl ? to_dpu_hw_ctl(hw_ctl[i]) : NULL;
                if (!phys->hw_ctl) {
                        DPU_ERROR_ENC(dpu_enc,
                                "no ctl block assigned at idx: %d\n", i);