Message ID | 20250209-drm-msm-initial-dualpipe-dsc-fixes-v2-3-9a60184fdc36@somainline.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/msm: Initial fixes for DUALPIPE (+DSC) topology | expand |
On Sun, Feb 09, 2025 at 10:42:54PM +0100, Marijn Suijten wrote: > When DSC is enabled the number of interfaces is forced to be 1, and > documented that it is a "power-optimal" layout to use two DSC encoders > together with two Layer Mixers. However, the same layout (two DSC > hard-slice encoders with two LMs) is also used when the display is > fed with data over two instead of one interface (common on 4k@120Hz > smartphone panels with Dual-DSI). Solve this by simply removing the > num_intf = 1 assignment as the count is already calculated by computing > the number of physical encoders within the virtual encoder. > > Fixes: 7e9cc175b159 ("drm/msm/disp/dpu1: Add support for DSC in topology") > Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
On 2/9/2025 1:42 PM, Marijn Suijten wrote: > When DSC is enabled the number of interfaces is forced to be 1, and > documented that it is a "power-optimal" layout to use two DSC encoders > together with two Layer Mixers. However, the same layout (two DSC > hard-slice encoders with two LMs) is also used when the display is > fed with data over two instead of one interface (common on 4k@120Hz > smartphone panels with Dual-DSI). Solve this by simply removing the > num_intf = 1 assignment as the count is already calculated by computing > the number of physical encoders within the virtual encoder. > > Fixes: 7e9cc175b159 ("drm/msm/disp/dpu1: Add support for DSC in topology") > Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org> Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index b585cd17462345f94bcc2ddd57902cc7c312ae63..b0870318471bd7cceda70fd15ea7bcc8658af604 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -686,20 +686,21 @@ static struct msm_display_topology dpu_encoder_get_topology( > > if (dsc) { > /* > - * Use 2 DSC encoders and 2 layer mixers per single interface > + * Use 2 DSC encoders, 2 layer mixers and 1 or 2 interfaces > * when Display Stream Compression (DSC) is enabled, > * and when enough DSC blocks are available. > * This is power-optimal and can drive up to (including) 4k > * screens. > */ > - if (dpu_kms->catalog->dsc_count >= 2) { > + WARN(topology.num_intf > 2, > + "DSC topology cannot support more than 2 interfaces\n"); > + if (intf_count >= 2 || dpu_kms->catalog->dsc_count >= 2) { > topology.num_dsc = 2; > topology.num_lm = 2; > } else { > topology.num_dsc = 1; > topology.num_lm = 1; > } > - topology.num_intf = 1; > } > > return topology; > > -- > 2.48.1 >
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index b585cd17462345f94bcc2ddd57902cc7c312ae63..b0870318471bd7cceda70fd15ea7bcc8658af604 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -686,20 +686,21 @@ static struct msm_display_topology dpu_encoder_get_topology( if (dsc) { /* - * Use 2 DSC encoders and 2 layer mixers per single interface + * Use 2 DSC encoders, 2 layer mixers and 1 or 2 interfaces * when Display Stream Compression (DSC) is enabled, * and when enough DSC blocks are available. * This is power-optimal and can drive up to (including) 4k * screens. */ - if (dpu_kms->catalog->dsc_count >= 2) { + WARN(topology.num_intf > 2, + "DSC topology cannot support more than 2 interfaces\n"); + if (intf_count >= 2 || dpu_kms->catalog->dsc_count >= 2) { topology.num_dsc = 2; topology.num_lm = 2; } else { topology.num_dsc = 1; topology.num_lm = 1; } - topology.num_intf = 1; } return topology;
When DSC is enabled the number of interfaces is forced to be 1, and documented that it is a "power-optimal" layout to use two DSC encoders together with two Layer Mixers. However, the same layout (two DSC hard-slice encoders with two LMs) is also used when the display is fed with data over two instead of one interface (common on 4k@120Hz smartphone panels with Dual-DSI). Solve this by simply removing the num_intf = 1 assignment as the count is already calculated by computing the number of physical encoders within the virtual encoder. Fixes: 7e9cc175b159 ("drm/msm/disp/dpu1: Add support for DSC in topology") Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)