On Thu, Jan 16, 2025 at 03:26:05PM +0800, Jun Nie wrote: > Request 4 mixers and 4 DSC for the case that both dual-DSI and DSC are > enabled. Why? What is the issue that you are solving? > 4 pipes are preferred for dual DSI case for it is power optimal > for DSC. > > Signed-off-by: Jun Nie <jun.nie@xxxxxxxxxx> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 6 ++--- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 29 ++++++++++++++++++------ > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 2 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 2 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 2 +- > 6 files changed, 29 insertions(+), 14 deletions(-) > > @@ -664,15 +664,20 @@ 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 > + * 2 LM, 2 INTF ( Split display using 2 interfaces) > + * 4 LM, 2 INTF ( Split display using 2 interfaces) > + * > * 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 > */ > + irrlevant extra line, please drop. > if (intf_count == 2) > topology.num_lm = 2; > else if (!dpu_kms->catalog->caps->has_3d_merge) > @@ -691,10 +696,20 @@ 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 case, we prefer 4 layer mixers. Because > + * the resolution is always high in the case and 4 DSCs are more > + * power optimal. I think this part is thought about in a wrong way. If it was just about power efficiency, we wouldn't have to add quad pipe support. Please correct me if I'm wrong, but I think it is about the maximum width supported by a particular topology being too low for a requested resolution. So, if there is a DSC and mode width is higher than 5120 (8.x+) / 4096 ( <= 7.x), then we have to use quad pipe. Likewise if there is no DSC in play, the limitation should be 2 * max_mixer_width. > */ > - topology.num_dsc = 2; > - topology.num_lm = 2; > - topology.num_intf = 1; > + > + if (intf_count == 2) { > + topology.num_dsc = dpu_kms->catalog->dsc_count >= 4 ? 4 : 2; This assumes that the driver can support 2:2:2. Is it the case? > + topology.num_lm = topology.num_dsc; > + topology.num_intf = 2; > + } else { > + topology.num_dsc = 2; > + topology.num_lm = 2; > + topology.num_intf = 1; > + } > } > > return topology; -- With best wishes Dmitry