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

Reply via email to