Public bug reported:

[Impact]
On some boots, suspend freezes for 13-17 s on HP systems (CID: 202512-38218) 
with an Intel Panther Lake xHCI controller (8086:e37d). Nothing is plugged into 
the USB ports.

Firmware leaves the SuperSpeed root port usb4-port2 stuck in
SS.Inactive/Polling. After resume, the hub keeps retrying the port. Each
suspend logs:

usb usb4-port2: attempt power cycle
usb usb4-port2: Cannot enable. Maybe the USB cable is bad?
Freezing remaining freezable tasks completed (elapsed 15.632 seconds)

The cable message is wrong here, since no cable is attached.

On bad boots this hits every suspend. On good boots there is no message.
On some boots the message shows once, after the first suspend, with no
stall.

[Fix]
Stop the hub port enumeration retries while the system is freezing. The check 
runs at the top of each retry and before the mid-loop port power cycle. The 
port keeps its change bit set, so the hub checks it again on resume. 
Enumeration outside of system sleep does not change.

The check is only built when usbcore is built-in (CONFIG_USB=y, as in
Ubuntu kernels). When usbcore is a module, the check always returns
false.

This does not fix the stuck link. The root cause is firmware. The patch
only keeps the stuck port from blocking suspend.

This is an Ubuntu SAUCE patch. No upstream commit fixes the stuck port.

[Test Plan]
Reproducer, run on the affected unit with nothing connected to the USB ports:
1. Boot the image.
2. Run suspend cycles: fwts s3 --s3-multiple=10 (or checkbox suspend-30-cycles).
3. After resume, check dmesg for usb4-port2 messages and for the freeze time 
("Freezing remaining freezable tasks completed (elapsed N seconds)").

Without the patch (reproduced on 2026-10-22):
- 7.0.0-1016-oem: 3 runs of 10 suspends. Every suspend logged both usb4-port2 
messages. Freeze stalls of about 7-15 s.
- 7.3.0-1003-oem: 3 runs of 10 suspends. Nearly every suspend logged both 
messages (about 28 of 30 stalled). Freeze stalls of 13-17 s.
- Upstream mainline 7be4bc52fd9e: 30 suspends. 29 of 30 logged both messages. 
27 of 30 stalled for 13-17 s.

With the patch: the test on the affected unit has not been run yet.
Expected result: the freeze completes in well under 2 s. The usb4-port2
messages may still appear after resume, since the port is checked again
then.

[Where problems could occur]
Could break USB device enumeration after system sleep, in 
drivers/usb/core/hub.c. If the check fires for a device plugged in during the 
freeze, that device is only enumerated on resume. If the change bit is not 
handled, a port could stay unprocessed until the next hub event. The symptom 
would be a USB device missing after resume (not shown in lsusb). The check is 
compiled only when usbcore is built-in, so modular usbcore builds see no change.

[Other Info]
Ubuntu SAUCE patch, not sent upstream. Target series: oem-7.0. The stuck link 
needs a firmware fix from the vendor. Upstream hub commits 6df47500b557, 
29480b05e6e2, b84cc80610a8 and 8020c41b39f5 are not part of this patch.

** Affects: hwe-next
     Importance: Undecided
         Status: New

** Affects: linux-oem-7.0 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: jira-stella-4299 oem-priority resolute stella

** Tags added: jira-stella-4299 oem-priority stella

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2171919

Title:
  USB hub retries stall suspend freeze 13-17s on empty root port

To manage notifications about this bug go to:
https://bugs.launchpad.net/hwe-next/+bug/2171919/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to