On 19.12.2018 12:18, Richard van der Hoff wrote:
On 13/12/2018 10:29, Richard van der Hoff wrote:
Thanks for looking at it. I've attached a log from a 4.19.8 kernel showing the
problem with the dynamic debug flags you suggested. The first instance of the
problem seems to begin with:
Dec 13 09:32:56 fred kernel: [ 479.158038] xhci_hcd 0000:39:00.0: Port Status
Change Event for port 1
Dec 13 09:32:56 fred kernel: [ 479.158045] xhci_hcd 0000:39:00.0:
handle_port_status: starting port polling.
Dec 13 09:32:56 fred kernel: [ 479.158062] hub 3-0:1.0: state 7 ports 2 chg
0000 evt 0002
Dec 13 09:32:56 fred kernel: [ 479.158070] xhci_hcd 0000:39:00.0: get port
status, actual port 0 status = 0x202a0
Dec 13 09:32:56 fred kernel: [ 479.158071] xhci_hcd 0000:39:00.0: Get port
status returned 0x10100
Dec 13 09:32:56 fred kernel: [ 479.158083] xhci_hcd 0000:39:00.0: clear port
connect change, actual port 0 status = 0x2a0
Dec 13 09:32:56 fred kernel: [ 479.158087] usb usb3-port1: status 0100, change
0001, 12 Mb/s
Dec 13 09:32:56 fred kernel: [ 479.158095] usb 3-1: USB disconnect, device
number 2
Dec 13 09:32:56 fred kernel: [ 479.158097] usb 3-1.1: USB disconnect, device
number 3
Dec 13 09:32:56 fred kernel: [ 479.158098] usb 3-1.1.3: USB disconnect, device
number 8
Dec 13 09:32:56 fred kernel: [ 479.158100] usb 3-1.1.3: unregistering device
Mika, Mathias: sorry to pester. I've been trying to decode this with the help
of the source. Any clues?
My impression is that "get port status, actual port 0 status = 0x202a0" means
that the xhci controller is reporting a zero value for the port status and control
register - ie, that the dock is disconnected. If that's the case, it presumably points
fairly firmly to a hardware issue of some kind.
It would be really helpful to get your thoughts on this.
Sorry about the late reply, you are right, xhci reports that something happened
on that port,
and when reading PORSC register it shows a device was disconnected.
When the last USB device connected to a Alpine Ridge xHC controller the whole
controller is
PCI hotplug removed from the PCI bus.
Details:
* Dec 13 09:32:56 fred kernel: [ 479.158038] xhci_hcd 0000:39:00.0: Port
Status Change Event for port 1
means xhci controller sent an interrupt because it something changes on a port
* Dec 13 09:32:56 fred kernel: [ 479.158070] xhci_hcd 0000:39:00.0: get port
status, actual port 0 status = 0x202a0
Port Status: 0x202a0
Disconnected
Disabled
Link: Rx Detect
Powered
Unknown port speed
Connect Status Change
Connection changed to disconnect, this is what a port status should look like when a SS USB 3 cable is unplugged.
The xHCI controller at 0000:39:00.0 creates two USB buses, a High Speed (HS)
bus named usb3,
and a SuperSpeed (SS) bus named usb4.
A SS hub will have both a HS and SS hub built into it. The internal roothub in
xHCI is shown
as a HS hub at the usb3 bus named named usb3-0, and a SS hub at usb4-0.
The dock device is seen as a HS hub at usb3-1, and SS hub at usb4-1.
All other devices in your dock are behind these hubs.
We see a sudden disconnect of the HS parts of the external hub, most likely the
SS hub part
would disconnect soon, but the Alpine ridge controller is very fast in hotplug
removing the
whole xHCI contoller from PCI bus once no usb devices are connected, so next we
see
PCI code calling the remove callback of the xHC PCI device:
* Dec 13 09:32:56 fred kernel: [ 479.260618] xhci_hcd 0000:39:00.0: remove,
state 1
And later xHC controller is removed from PCI bus:
*Dec 13 09:32:57 fred kernel: [ 479.609866] pci_bus 0000:39: busn_res: [bus
39] is released
Until apparently a connected usb device is discovered afain, xHC controller is
added to pci bus,
xhci driver is loaded and so on.
So main cause here is a sudden disconnect of the dock.
-Mathias