On my ThinkPad E585, with a Ryzen 5 2500U, my XHCI driver crashes when plugging 
in a device after switching power states, or during switching itself.

Steps to Reproduce: 

- Unplug the AC power, or start the computer with AC unplugged. If the computer 
has AC power at boot, it will work properly, but plugging it in after running 
unplugged will not.

The xhci_hcd and xhci_pci modules remain loaded after the error. Reloading them 
appears to reset it, and the scenarios above still apply as if the computer was 
just started.

These tests were performed with laptop_mode disabled; enabling it alters the 
behavior. I will test that more later.

Results:

The USB device fails to register, and `lsusb` remains unchanged. No other 
errors will appear after the first one occurs.
One of two error messages will appear in kernel logs:

[   51.276650] xhci_hcd 0000:05:00.4: Refused to change power state, currently 
in D3
[   51.276658] xhci_hcd 0000:05:00.3: Refused to change power state, currently 
in D3
[   51.277051] xhci_hcd 0000:05:00.3: enabling device (0000 -> 0002)
[   51.277074] xhci_hcd 0000:05:00.3: WARN: xHC restore state timeout
[   51.277077] xhci_hcd 0000:05:00.3: PCI post-resume error -110!
[   51.279316] xhci_hcd 0000:05:00.3: HC died; cleaning up
[   51.288669] xhci_hcd 0000:05:00.4: enabling device (0000 -> 0002)

[ 5258.438021] xhci_hcd 0000:05:00.3: Refused to change power state, currently 
in D3
[ 5258.438328] xhci_hcd 0000:05:00.4: Refused to change power state, currently 
in D3
[ 5258.450026] xhci_hcd 0000:05:00.3: enabling device (0000 -> 0002)
[ 5258.450511] xhci_hcd 0000:05:00.4: enabling device (0000 -> 0002)
[ 5266.112941] xhci_hcd 0000:05:00.3: Error while assigning device slot ID
[ 5266.112952] xhci_hcd 0000:05:00.3: Max number of devices this xHCI host 
supports is 64.
[ 5266.112963] usb usb1-port2: couldn't allocate usb_device
[ 5280.960968] xhci_hcd 0000:05:00.3: Error while assigning device slot ID
[ 5280.960979] xhci_hcd 0000:05:00.3: Max number of devices this xHCI host 
supports is 64.
[ 5280.960993] usb usb1-port2: couldn't allocate usb_device

Expected results: 

Device connects, powers on, and registers properly, showing up in `lsusb`.

Build: 

Linux 4.19.44_1 #1 SMP PREEMPT Wed Mar 27 20:41:38 UTC 2019 x86_64 GNU/Linux, 
with firmware 20181218

Has been an issue since 4.19.28 and possibly earlier.

-- 
  Adam Gausmann
  agausm...@fastmail.com

Reply via email to