On Thu, 29 Aug 2024 at 13:20, Jun Nie <jun.nie@xxxxxxxxxx> wrote: > > request more mixer for the case that hdisplay exceeding 4096 > and DSC enabled. This doesn't seem to match the code. And it misses the _reason_ to do it. > > Signed-off-by: Jun Nie <jun.nie@xxxxxxxxxx> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 24 ++++++++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index 05b203be2a9bc..33cfd94badaba 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -59,6 +59,7 @@ > #define IDLE_SHORT_TIMEOUT 1 > > #define MAX_HDISPLAY_SPLIT 1080 > +#define MAX_HDISPLAY_DSC_SPLIT 2560 > > /* timeout in frames waiting for frame done */ > #define DPU_ENCODER_FRAME_DONE_TIMEOUT_FRAMES 5 > @@ -588,15 +589,19 @@ static struct msm_display_topology dpu_encoder_get_topology( > > /* Datapath topology selection > * > - * Dual display > + * Dual display without DSC > * 2 LM, 2 INTF ( Split display using 2 interfaces) > * > + * Dual display with DSC > + * 4 LM, 2 INTF ( Split display using 2 interfaces) This doesn't match the code > + * > * Single display > * 1 LM, 1 INTF > * 2 LM, 1 INTF (stream merge to support high resolution interfaces) > * > * Add dspps to the reservation requirements if ctm is requested > */ > + > if (intf_count == 2) > topology.num_lm = 2; > else if (!dpu_kms->catalog->caps->has_3d_merge) > @@ -615,10 +620,21 @@ static struct msm_display_topology dpu_encoder_get_topology( > * 2 DSC encoders, 2 layer mixers and 1 interface > * this is power optimal and can drive up to (including) 4k > * screens > + * But for dual display with hdisplay exceeding 4096, we need > + * 4 layer mixer. Because DSC has a max width of 2048 and > + * a single plane can only be used by one mixer pair > */ > - topology.num_dsc = 2; > - topology.num_lm = 2; > - topology.num_intf = 1; > + > + if (intf_count == 2 && > + mode->hdisplay > MAX_HDISPLAY_DSC_SPLIT) { > + topology.num_dsc = 4; > + topology.num_lm = 4; > + topology.num_intf = 2; > + } else { > + topology.num_dsc = 2; > + topology.num_lm = 2; > + topology.num_intf = 1; > + } > } > > return topology; > > -- > 2.34.1 > -- With best wishes Dmitry