[PATCH 3/4] thunderbolt: improve usb3 adapter link up timeout value

Chunfeng Yun chunfeng.yun at mediatek.com
Fri Oct 30 01:25:38 PDT 2026


when plug into a usb3 device into usb4 hub's DFP to trigger usb4
driver wakeup, encounter usb3 link up timeout issue, then cause
usb3 hub disconnect:

usb4_hi NVDA8100:00: 0:1: failed to reach state TB_PORT_UP. Ignoring port...
usb4_hi NVDA8100:00: 0:1: lost during suspend, disconnecting
usb4_hi NVDA8100:00: 0:4 <-> 1:20 (USB3): deactivating
usb4_hi NVDA8100:00: deactivating USB3 Down path from 0:4 to 1:20
usb4_hi NVDA8100:00: deactivating USB3 Up path from 1:20 to 0:4
...
thunderbolt 0-1: device disconnected
usb 2-1: USB disconnect, device number 10

Completes link training at ~1.48s and transitions to TB_PORT_UP after
change the timeout to 2.5s:

In the USB4 spec, Phase 5 (Link Equalization) alone is allowed up to
1000 ms. When add tPhase3 (100 ms), tPhase4 (100 ms), and retimer
transaction delays (tCmdResponse = 50 ms), the physical link is
allowed by spec to take 1200 ms to 1500 ms+ to complete initialization.

here are two retimers in the link, if more retimers add it, need more
time

Signed-off-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
 drivers/thunderbolt/switch.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index d22d8db8f890..e7ee9639c54c 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -500,8 +500,9 @@ int tb_port_state(struct tb_port *port)
  */
 int tb_wait_for_port(struct tb_port *port, bool wait_if_unplugged)
 {
-	int retries = 10;
+	int retries = 25;
 	int state;
+
 	if (!port->cap_phy) {
 		tb_port_WARN(port, "does not have PHY\n");
 		return -EINVAL;
-- 
2.43.0




More information about the Linux-mediatek mailing list