Resending with proper threading, the first send had no In-Reply-To headers. There are no code changes.
On a MTL laptop with a ThinkPad Thunderbolt 4 dock (Synaptics VMM6212) and a TV behind it, powering the TV on makes the dock drop the upstream HPD for about 1.76 s. The MST topology is torn down and rebuilt, and the display stays black for about 5 s. The drm.debug log of the report shows two "Failed to get ACT after 3000 ms, last status: 04" errors, and in both cases the driver waits for an ACT it never triggered (timestamps from that log): - 24262.495: intel_dp_retrain_link() forces a modeset on the pipe still bound to the old, unregistered MST connector, while the topology is being rediscovered. drm_dp_add_payload_part1() fails with "VCPI 1 for port ... not in topology", but the enable goes on and waits 3 s for an ACT, with no write to DPCD 0x1c0-0x1c2 in between. - 24267.035: userspace disables the same pipe afterwards. drm_dp_remove_payload_part1() prints "not in topology, not sending remove", and the disable waits another 3 s for an ACT. The new connector is only registered after the first wait is over. Patch 1 makes drm_dp_remove_payload_part1() tell whether it removed the payload from the branch device. The existing callers ignore the return value. Patch 2 stops retraining the link for disconnected MST streams and uses the return value to skip the ACT and its wait on the i915 disable path. I haven't tested this on the reporter's setup yet, the analysis is based on the log attached to the issue. Patch 1 touches the drm core and will also be sent to dri-devel for drm-misc-next, it is included here for patch 2 to build. Issue: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/17741 Xiao Lu (2): drm/dp_mst: Return whether drm_dp_remove_payload_part1() removed the payload drm/i915/dp_mst: Skip link retrain and ACT for disconnected MST streams drivers/gpu/drm/display/drm_dp_mst_topology.c | 10 ++- .../drm/i915/display/intel_dp_link_training.c | 3 + drivers/gpu/drm/i915/display/intel_dp_mst.c | 68 +++++++++++++++---- drivers/gpu/drm/i915/display/intel_dp_mst.h | 1 + include/drm/display/drm_dp_mst_helper.h | 2 +- 5 files changed, 68 insertions(+), 16 deletions(-) -- 2.43.0
