On 22.7.2019 12.44, Kai-Heng Feng wrote:
Hi Mika and Mathias,
I’ve filed a bug [1] which renders docking station unusable.
I am not sure it's a bug in PCI, Thunderbolt or xHCI so raise the issue
to
you both.
[1] https://bugzilla.kernel.org/show_bug.cgi?id=203885
Kai-Heng
I upgraded the system firmware, TBT firmware and docking station firmware
to latest, and used latest mainline kernel.
Now the issue can be reproduced at the very first time I plugged the
docking station.
Request log attached to Bugzilla.
After docking station unplug we see Transfer errors from
devices connected to Titan Ridge xHC, driver tries to recover, fails,
usb devices are disconnected.
After this xhci driver runtime suspends xHC controller as runtime pm is allowed
by default for Titan Ridge xHC controllers.
Interesting parts from log:
Unplug Docking Station <<<
[ 328.102279] xhci_hcd 0000:39:00.0: Transfer error for slot 36 ep 6 on endpoint
[ 328.118279] xhci_hcd 0000:39:00.0: Transfer error for slot 36 ep 6 on endpoint
[ 328.134291] xhci_hcd 0000:39:00.0: Transfer error for slot 36 ep 6 on endpoint
[ 328.150355] xhci_hcd 0000:39:00.0: Transfer error for slot 36 ep 6 on endpoint
[ 328.166342] xhci_hcd 0000:39:00.0: Transfer error for slot 36 ep 6 on endpoint
[ 332.178710] usb usb4-port2: Cannot enable. Maybe the USB cable is bad?
[ 332.178765] usb 4-2: USB disconnect, device number 35
[ 332.178769] usb 4-2.3: USB disconnect, device number 36
[ 332.179973] usb 4-2.4: USB disconnect, device number 37
[ 332.414618] xhci_hcd 0000:39:00.0: set port remote wake mask, actual port 0 status = 0xe0002a0
[ 332.414639] xhci_hcd 0000:39:00.0: set port remote wake mask, actual port 1 status = 0xe0002b0
[ 332.414693] xhci_hcd 0000:39:00.0: xhci_hub_status_data: stopping port polling.
[ 332.414703] xhci_hcd 0000:39:00.0: xhci_suspend: stopping port polling.
[ 332.414719] xhci_hcd 0000:39:00.0: // Setting command ring address to 0x487da9001
Plug Docking Station <<<
[ 346.455568] pci_raw_set_power_state: 25 callbacks suppressed
[ 346.455574] xhci_hcd 0000:39:00.0: Refused to change power state, currently in D3
[ 346.539451] xhci_hcd 0000:39:00.0: enabling device (0000 -> 0002)
[ 346.539482] xhci_hcd 0000:39:00.0: // Setting command ring address to 0x487da903f
[ 346.539487] xhci_hcd 0000:39:00.0: WARN: xHC restore state timeout
[ 346.539489] xhci_hcd 0000:39:00.0: PCI post-resume error -110!
[ 346.539490] xhci_hcd 0000:39:00.0: HC died; cleaning up
We don't have 0000:39:00 anymore <<<
When docking station is plugged back we try to resume Titan Ridge xHC,
PCI log shows that changing power state to D0 failed, xHC is still in D3.
Resume process continues anyway, and xhci driver tries to restore state, but fails.
Usb core will assume HC died if the pci resume callback failed
Does disabling runtime PM for Titan Ridge xHC help?
-Mathias