Re: [PATCH 3/5] drm/msm/dp: suppress bridge hotplug events during MST operation
Dmitry Baryshkov <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel,org.infradead.lists.linux-amlogic,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <r2xv3lsvku2wlccf44dlesqgrjqbvjrvike3jfx7casembecrd@3mw3olil5toz> |
On Mon, Aug 17, 2026 at 04:01:36PM +0800, Yongxing Mou wrote: > > > On 7/12/2026 6:44 PM, Dmitry Baryshkov wrote: > > On Mon, Jun 29, 2026 at 10:48:05PM +0800, Yongxing Mou wrote: > > > The DP MST framework already generates the required hotplug events for > > > MST topology changes. > > > > > > Suppress connector hotplug event generation from the bridge connector > > > path while MST is active, and continue propagating HPD notifications to > > > the DP driver. > > > > > > Signed-off-by: Yongxing Mou <[email protected]> > > > --- > > > drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++-- > > > drivers/gpu/drm/msm/dp/dp_display.c | 9 ++++++++- > > > > No, it can't go as this. The drm_bridge_connector part should have been > > a part of the first patch. > > > Got it. > > > 2 files changed, 12 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c > > > index 7334d6677604..82ed0dc450ab 100644 > > > --- a/drivers/gpu/drm/display/drm_bridge_connector.c > > > +++ b/drivers/gpu/drm/display/drm_bridge_connector.c > > > @@ -162,6 +162,7 @@ static void drm_bridge_connector_handle_hpd(struct drm_bridge_connector *drm_bri > > > { > > > struct drm_connector *connector = &drm_bridge_connector->base; > > > struct drm_device *dev = connector->dev; > > > + bool send_hotplug = true; > > > /* > > > * IRQ-only notification: extra_status carries the event but > > > @@ -179,9 +180,10 @@ static void drm_bridge_connector_handle_hpd(struct drm_bridge_connector *drm_bri > > > connector->status = status; > > > mutex_unlock(&dev->mode_config.mutex); > > > - drm_bridge_connector_hpd_notify(connector, status, extra_status, NULL); > > > + drm_bridge_connector_hpd_notify(connector, status, extra_status, &send_hotplug); > > > - drm_kms_helper_connector_hotplug_event(connector); > > > + if (send_hotplug) > > > + drm_kms_helper_connector_hotplug_event(connector); > > > > But now I can also see that the idea seems to be incorrect. You are > > preventing the kernel from sending the events, but it doesn't really > > matter. If connection status oscillates, then other components might > > notice it even without the event being sent. > > > Here our original intent behind suppressing the hotplug was > that, under MST, hotplugs should be sent independently by the MST > framework, rather than being emitted along the IRQ handling path. > > Following the extra_status approach you introduced, would it make sense > to let the bridge_connector layer distinguish between long pulses (HPD) > and short pulses (IRQ_HPD) -- a short pulse would not update > connector->status and would not emit a hotplug, only forwarding the > event to the bridge driver. Does this direction sound reasonable to > you? IRQ_HPD is not limited to the MST usecase. > > > > > } > > > static void drm_bridge_connector_hpd_cb(void *cb_data, > > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > > > index 6835c68fe510..bc93b566fbca 100644 > > > --- a/drivers/gpu/drm/msm/dp/dp_display.c > > > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > > > @@ -1790,10 +1790,17 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge, > > > msm_dp_hpd_plug_handle(dp); > > > } else { > > > msm_dp_hpd_plug_handle(dp); > > > + /* mst_active is set in plug_handle; suppress SST hotplug */ > > > + if (send_hotplug && msm_dp_display->mst_active) > > > + *send_hotplug = false; > > > } > > > } else { > > > - if (hpd_link_status == ISR_DISCONNECTED) > > > + if (!msm_dp_display->mst_active) { > > > msm_dp_hpd_unplug_handle(dp); > > > + } else if (send_hotplug) { > > > + msm_dp_hpd_unplug_handle(dp); > > > + *send_hotplug = false; > > > > Why? Disconnected events definitely should be reported further. > > > In MST case, MST DRM framework will send the discconnected hotplug by > msm_dp_mst_display_set_mgr_state(&dp->msm_dp_display, false);. msm_dp_mst_display_set_mgr_state() is not a part of MST DRM framework. But, while we are at it. The MST framwork needs to be updated to send connector-specific HPD events. > > > + } > > > } > > > pm_runtime_put_sync(&msm_dp_display->pdev->dev); > > > > > > -- > > > 2.43.0 > > > > > > -- With best wishes Dmitry