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
