[PATCH 2/2] xhci: drop 120ms U3 LFPS wake retry wait from runtime resume

From: Lovekesh Solanki

Date: Mon Aug 31 2026 - 18:02:28 EST


On auto resume (is_auto_resume), xhci_resume() used to msleep(120)
when there were suspended USB3 devices and no pending port event,
to give USB3 devices time to resend their U3 LFPS wake (at 100ms
intervals) if the first wake signalling failed.

The hub driver now holds the SS root hub awake for
USB_SS_ROOT_HUB_U0_WAKE_TIME (120ms) after a resume, which covers that
same window and lets the pending port event be picked up through the
normal hub event path. Therefore, this legacy wait in xhci_resume()
is redundant and can be removed.

Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Lovekesh Solanki <lovekeshsolanki00@xxxxxxxxx>
---
drivers/usb/host/xhci.c | 11 -----------
1 file changed, 11 deletions(-)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index a9e47e178c28..b0caba8ebf18 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -1083,7 +1083,6 @@ int xhci_resume(struct xhci_hcd *xhci, bool power_lost, bool is_auto_resume)
struct xhci_segment *seg;
int retval = 0;
bool pending_portevent = false;
- bool suspended_usb3_devs = false;
bool reset_registers = false;

if (!hcd->state)
@@ -1245,18 +1244,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool power_lost, bool is_auto_resume)

/*
* Resume roothubs only if there are pending events.
- * USB 3 devices resend U3 LFPS wake after a 100ms delay if
- * the first wake signalling failed, give it that chance if
- * there are suspended USB 3 devices.
*/
- if (xhci->usb3_rhub.bus_state.suspended_ports || xhci->usb3_rhub.bus_state.bus_suspended)
- suspended_usb3_devs = true;
-
pending_portevent = xhci_pending_portevent(xhci);
- if (suspended_usb3_devs && !pending_portevent && is_auto_resume) {
- msleep(120);
- pending_portevent = xhci_pending_portevent(xhci);
- }

if (pending_portevent) {
if (xhci->shared_hcd)
--
2.55.0