On Mon, Aug 25, 2025 at 10:16:18PM +0800, Yongxing Mou wrote: > Introduce APIs to update the MST state change to MST framework when > device is plugged/unplugged. > > Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> > Signed-off-by: Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/msm/dp/dp_display.c | 10 +++++++++- > drivers/gpu/drm/msm/dp/dp_mst_drm.c | 15 +++++++++++++++ > drivers/gpu/drm/msm/dp/dp_mst_drm.h | 1 + > 3 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 59720e1ad4b1193e33a4fc6aad0c401eaf9cbec8..909c84a5c97f56138d0d62c5d856d2fd18d36b8c 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -28,6 +28,7 @@ > #include "dp_drm.h" > #include "dp_audio.h" > #include "dp_debug.h" > +#include "dp_mst_drm.h" > > static bool psr_enabled = false; > module_param(psr_enabled, bool, 0); > @@ -269,7 +270,6 @@ static int msm_dp_display_send_hpd_notification(struct msm_dp_display_private *d > dp->panel->video_test = false; > } > > - Unrelated > drm_dbg_dp(dp->drm_dev, "type=%d hpd=%d\n", > dp->msm_dp_display.connector_type, hpd); > > @@ -386,6 +386,9 @@ static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *dp) > > msm_dp_link_reset_phy_params_vx_px(dp->link); > > + if (dp->msm_dp_display.mst_active) > + msm_dp_mst_display_set_mgr_state(&dp->msm_dp_display, true); I'd say, this should be a part of the previous patch. > + > if (!dp->msm_dp_display.internal_hpd) > msm_dp_display_send_hpd_notification(dp, true); > > @@ -608,6 +611,11 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp, u32 data) > if (!dp->msm_dp_display.internal_hpd) > msm_dp_display_send_hpd_notification(dp, false); > > + if (dp->msm_dp_display.mst_active) { > + msm_dp_mst_display_set_mgr_state(&dp->msm_dp_display, false); > + dp->msm_dp_display.mst_active = false; > + } > + > /* signal the disconnect event early to ensure proper teardown */ > msm_dp_display_handle_plugged_change(&dp->msm_dp_display, false); > > diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.c b/drivers/gpu/drm/msm/dp/dp_mst_drm.c > index 331d08854049d9c74d49aa231f3507539986099e..ca654b1963467c8220dd7ee073f25216455d0490 100644 > --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.c > +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.c > @@ -924,6 +924,21 @@ msm_dp_mst_add_connector(struct drm_dp_mst_topology_mgr *mgr, > return connector; > } > > +int msm_dp_mst_display_set_mgr_state(struct msm_dp *dp_display, bool state) > +{ > + int rc; > + struct msm_dp_mst *mst = dp_display->msm_dp_mst; Reverse X-mas > + > + rc = drm_dp_mst_topology_mgr_set_mst(&mst->mst_mgr, state); > + if (rc < 0) { > + DRM_ERROR("failed to set topology mgr state to %d. rc %d\n", > + state, rc); > + } > + > + drm_dbg_dp(dp_display->drm_dev, "dp_mst_display_set_mgr_state state:%d\n", state); > + return rc; > +} > + > static const struct drm_dp_mst_topology_cbs msm_dp_mst_drm_cbs = { > .add_connector = msm_dp_mst_add_connector, > }; > diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.h b/drivers/gpu/drm/msm/dp/dp_mst_drm.h > index 5e1b4db8aea4506b0e1cc1cc68980dd617d3f72a..8fe6cbbe741da4abb232256b3a15ba6b16ca4f3e 100644 > --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.h > +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.h > @@ -87,5 +87,6 @@ int msm_dp_mst_drm_bridge_init(struct msm_dp *dp, struct drm_encoder *encoder); > int msm_dp_mst_init(struct msm_dp *dp_display, u32 max_streams, struct drm_dp_aux *drm_aux); > > void msm_dp_mst_display_hpd_irq(struct msm_dp *dp_display); > +int msm_dp_mst_display_set_mgr_state(struct msm_dp *dp_display, bool state); > > #endif /* _DP_MST_DRM_H_ */ > > -- > 2.34.1 > -- With best wishes Dmitry