Message ID | 20250118-sm8650-v6-13-hmd-deckard-mdss-quad-upstream-33-v5-2-9701a16340da@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | drm/msm/dpu: Support quad pipe with dual-DSI | expand |
On 1/17/2025 8:00 AM, Jun Nie wrote: > Currently, if DSC is enabled, only 2 DSC engines are supported so far. > More usage cases will be added, such as 4 DSC in 4:4:2 topology. So > get the real number of DSCs to decide whether DSC merging is needed. > > Signed-off-by: Jun Nie <jun.nie@linaro.org> > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index eaac172141ede..c734d2c5790d2 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -164,6 +164,7 @@ enum dpu_enc_rc_states { > * clks and resources after IDLE_TIMEOUT time. > * @topology: topology of the display > * @idle_timeout: idle timeout duration in milliseconds > + * @num_dscs: Number of DSCs in use > * @wide_bus_en: wide bus is enabled on this interface > * @dsc: drm_dsc_config pointer, for DSC-enabled encoders > */ > @@ -204,6 +205,7 @@ struct dpu_encoder_virt { > struct msm_display_topology topology; > > u32 idle_timeout; > + u32 num_dscs; > > bool wide_bus_en; > > @@ -622,9 +624,8 @@ bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_enc) > if (dpu_enc->phys_encs[i]) > intf_count++; > > - /* See dpu_encoder_get_topology, we only support 2:2:1 topology */ > if (dpu_enc->dsc) > - num_dsc = 2; > + num_dsc = dpu_enc->num_dscs; > > return (num_dsc > 0) && (num_dsc > intf_count); > } > @@ -1261,6 +1262,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc, > dsc_mask |= BIT(dpu_enc->hw_dsc[i]->idx - DSC_0); > } > > + dpu_enc->num_dscs = num_dsc; > dpu_enc->dsc_mask = dsc_mask; > > if ((dpu_enc->disp_info.intf_type == INTF_WB && conn_state->writeback_job) || > > -- > 2.34.1 >
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index eaac172141ede..c734d2c5790d2 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -164,6 +164,7 @@ enum dpu_enc_rc_states { * clks and resources after IDLE_TIMEOUT time. * @topology: topology of the display * @idle_timeout: idle timeout duration in milliseconds + * @num_dscs: Number of DSCs in use * @wide_bus_en: wide bus is enabled on this interface * @dsc: drm_dsc_config pointer, for DSC-enabled encoders */ @@ -204,6 +205,7 @@ struct dpu_encoder_virt { struct msm_display_topology topology; u32 idle_timeout; + u32 num_dscs; bool wide_bus_en; @@ -622,9 +624,8 @@ bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_enc) if (dpu_enc->phys_encs[i]) intf_count++; - /* See dpu_encoder_get_topology, we only support 2:2:1 topology */ if (dpu_enc->dsc) - num_dsc = 2; + num_dsc = dpu_enc->num_dscs; return (num_dsc > 0) && (num_dsc > intf_count); } @@ -1261,6 +1262,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc, dsc_mask |= BIT(dpu_enc->hw_dsc[i]->idx - DSC_0); } + dpu_enc->num_dscs = num_dsc; dpu_enc->dsc_mask = dsc_mask; if ((dpu_enc->disp_info.intf_type == INTF_WB && conn_state->writeback_job) ||