When MST is active, the SST connector reports disconnected even though the physical DP link is still connected. drm_bridge_connector_detect() forwards this result to the bridge chain as an HPD notification.
On MSM DP, this notification invokes unplug handling and tears down the active link and MST topology while the cable is still plugged in. For DisplayPort connectors with an HPD source, stop notifying the bridge chain from the detect path. Plug, unplug and IRQ_HPD notifications remain handled through the existing HPD event path. Preserve detect-based notifications for other connector types and for DisplayPort connectors without an HPD source. Signed-off-by: Yongxing Mou <[email protected]> --- drivers/gpu/drm/display/drm_bridge_connector.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c index d27ce59ca32b..8221a32d00f2 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -240,7 +240,16 @@ drm_bridge_connector_detect(struct drm_connector *connector, bool force) if (hdmi) drm_atomic_helper_connector_hdmi_hotplug(connector, status); - drm_bridge_connector_hpd_notify(connector, status, DRM_CONNECTOR_NO_EXTRA_STATUS); + /* + * A DP SST connector can report disconnected while MST is active. + * Use the HPD event path to notify its bridges, rather than turning + * that detect result into an unplug event. Preserve detect-based + * notifications for other connector types and DP without HPD. + */ + if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort || + !bridge_connector->bridge_hpd) + drm_bridge_connector_hpd_notify(connector, status, + DRM_CONNECTOR_NO_EXTRA_STATUS); } else { switch (connector->connector_type) { case DRM_MODE_CONNECTOR_DPI: -- 2.43.0
