On Mon, Jun 29, 2026 at 10:14:39PM +0800, Yongxing Mou wrote:
> Simply initialize MST encoders for MST-capable DP controllers, and
> introduce msm_dp_get_mst_max_stream to query MST streams.
> 
> Signed-off-by: Yongxing Mou <[email protected]>
> Reviewed-by: Dmitry Baryshkov <[email protected]>
> ---
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 14 +++++++++++++-
>  drivers/gpu/drm/msm/msm_drv.h           |  7 ++++++-
>  2 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c 
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index da3556eb6ecc..7a00c4094d5c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -655,7 +655,7 @@ static int _dpu_kms_initialize_displayport(struct 
> drm_device *dev,
>       struct msm_display_info info;
>       bool yuv_supported;
>       int rc;
> -     int i;
> +     int i, stream_id, stream_cnt;
>  
>       for (i = 0; i < ARRAY_SIZE(priv->kms->dp); i++) {
>               if (!priv->kms->dp[i])
> @@ -678,6 +678,18 @@ static int _dpu_kms_initialize_displayport(struct 
> drm_device *dev,
>                       DPU_ERROR("modeset_init failed for DP, rc = %d\n", rc);
>                       return rc;
>               }
> +
> +             stream_cnt = msm_dp_get_mst_max_stream(priv->kms->dp[i]);
> +
> +             if (stream_cnt > 1) {
> +                     for (stream_id = 0; stream_id < stream_cnt; 
> stream_id++) {


for (int stream_id = 0;
     stream_cnt > 1 && stream_id < stream_cnt;
     stream_id ++) {
                // foo
        }

> +                             encoder = dpu_encoder_init(dev, 
> DRM_MODE_ENCODER_DPMST, &info);
> +                             if (IS_ERR(encoder)) {
> +                                     DPU_ERROR("encoder init failed for dp 
> mst display\n");
> +                                     return PTR_ERR(encoder);
> +                             }
> +                     }
> +             }
>       }
>  
>       return 0;
> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> index c3fb3205f683..5fee0b291059 100644
> --- a/drivers/gpu/drm/msm/msm_drv.h
> +++ b/drivers/gpu/drm/msm/msm_drv.h
> @@ -355,7 +355,7 @@ bool msm_dp_is_yuv_420_enabled(const struct msm_dp 
> *dp_display,
>  bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display,
>                              const struct drm_display_mode *mode);
>  bool msm_dp_wide_bus_available(const struct msm_dp *dp_display);
> -
> +int msm_dp_get_mst_max_stream(struct msm_dp *dp_display);

This should be a part of the patch, introducing the function.

>  #else
>  static inline int __init msm_dp_register(void)
>  {
> @@ -372,6 +372,11 @@ static inline int msm_dp_modeset_init(struct msm_dp 
> *dp_display,
>       return -EINVAL;
>  }
>  
> +static inline int msm_dp_get_mst_max_stream(struct msm_dp *dp_display)

And this one too.

> +{
> +     return -EINVAL;
> +}
> +
>  static inline void msm_dp_snapshot(struct msm_disp_state *disp_state, struct 
> msm_dp *dp_display)
>  {
>  }
> 
> -- 
> 2.43.0
> 

-- 
With best wishes
Dmitry

Reply via email to