The intermittent detection failure of the second display over MST HUB is caused
by a race condition in MST port status detection during warm boot/G3 resume.

When a port transitions from input to output state during topology reprobe, the
driver was not forcing a re-probe of the link address. This caused ports that
were temporarily incorrectly marked as input ports to never create connectors.

Force a link address reprobe when a port transitions from input (1) to output
(0) state, giving the MST hub another chance to properly report the port status.

Signed-off-by: FNU VISHWANATHA <[email protected]>
---
 drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index be749dcad3b5..cc340e4235cc 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -2377,7 +2377,11 @@ drm_dp_mst_handle_link_address_port(struct 
drm_dp_mst_branch *mstb,
                changed = true;
                created = true;
        } else if (port->input && !port_msg->input_port) {
+               /* Port transitioned from input to output (e.g., during warm 
boot/G3 resume)
+                * We need to force link address reprobe to get proper port info
+                */
                changed = true;
+               mstb->link_address_sent = false;
        } else if (port->connector) {
                /* We're updating a port that's exposed to userspace, so do it
                 * under lock
-- 
2.34.1

Reply via email to