]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/msm/disp/dpu1: Add support for DSC in topology
authorVinod Koul <vkoul@kernel.org>
Wed, 6 Apr 2022 09:40:27 +0000 (15:10 +0530)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 25 Apr 2022 21:56:22 +0000 (00:56 +0300)
For DSC to work we typically need a 2,2,1 configuration. This should
suffice for resolutions up to 4k. For more resolutions like 8k this won't
work.

Also, it is better to use 2 LMs and DSC instances as half width results
in lesser power consumption as compared to single LM, DSC at full width.

The panel has been tested only with 2,2,1 configuration, so for
now we blindly create 2,2,1 topology when DSC is enabled

Co-developed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Patchwork: https://patchwork.freedesktop.org/patch/480925/
Link: https://lore.kernel.org/r/20220406094031.1027376-11-vkoul@kernel.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
drivers/gpu/drm/msm/msm_drv.h

index 41bb77f6d1e31b995b726d92ba4dd7a7b820b7f1..dcca7afd58de5c25578e3fa4b8a37b80bdd6ea27 100644 (file)
@@ -577,8 +577,21 @@ static struct msm_display_topology dpu_encoder_get_topology(
        topology.num_enc = 0;
        topology.num_intf = intf_count;
 
+       if (dpu_enc->dsc) {
+               /* In case of Display Stream Compression (DSC), we would use
+                * 2 encoders, 2 layer mixers and 1 interface
+                * this is power optimal and can drive up to (including) 4k
+                * screens
+                */
+               topology.num_enc = 2;
+               topology.num_dsc = 2;
+               topology.num_intf = 1;
+               topology.num_lm = 2;
+       }
+
        return topology;
 }
+
 static int dpu_encoder_virt_atomic_check(
                struct drm_encoder *drm_enc,
                struct drm_crtc_state *crtc_state,
index 3db3f1e06306977e79826ea7f06d39c63cf73caf..0eb6890aa156f5de21f2f8a9c9a2f7b1e2835c3e 100644 (file)
@@ -93,12 +93,14 @@ enum msm_event_wait {
  * @num_enc:      number of compression encoder blocks used
  * @num_intf:     number of interfaces the panel is mounted on
  * @num_dspp:     number of dspp blocks used
+ * @num_dsc:      number of Display Stream Compression (DSC) blocks used
  */
 struct msm_display_topology {
        u32 num_lm;
        u32 num_enc;
        u32 num_intf;
        u32 num_dspp;
+       u32 num_dsc;
 };
 
 /* Commit/Event thread specific structure */