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