On Fri, Nov 16, 2012 at 03:51:29AM -0500, cov...@ccs.covici.com wrote:
> Sorry, did not do its job -- here is the log output.

The patch did do what I expected.  When the warm reset failed, it
disabled and re-enabled the port.

The good news is this stopped your endless enumeration issues.  The bad
news is that your device didn't reconnect after the port was disabled
and re-enabled.  It didn't even try to connect as a USB 2.0 device,
which is what it's supposed to do if the SuperSpeed terminations are
turned off (as they are when the port is disabled).  Perhaps you just
have a buggy device or a bad cable?

I have a slightly more complex patch that tries several warm resets
before disabling the ports.  It may help with this device.  I'll send
you the branch later today, after I test it.

Thanks for your patience,
Sarah Sharp


Notes:

> Nov 16 03:36:28 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x340

Port is in Compliance Mode.

> Nov 16 03:36:28 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x341
> Nov 16 03:36:28 ccs kernel: hub 4-0:1.0: warm reset port 2
> Nov 16 03:36:28 ccs kernel: xhci_hcd 0000:04:00.0: Port Status Change Event 
> for port 2
> Nov 16 03:36:28 ccs kernel: usb 2-1: link qh256-0001/ffff88041ab57240 start 1 
> [1/0 us]

We can't trust the device link state until the port is done resetting.

> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x202b1
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x102b1
> Nov 16 03:36:29 ccs kernel: hub 4-0:1.0: port 2 not warm reset yet, waiting 
> 50ms
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x202f1
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x102f1
> Nov 16 03:36:29 ccs kernel: hub 4-0:1.0: port 2 not warm reset yet, waiting 
> 200ms
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x202f1
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x102f1
> Nov 16 03:36:29 ccs kernel: hub 4-0:1.0: port 2 not warm reset yet, waiting 
> 200ms
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x202f1
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x102f1
> Nov 16 03:36:29 ccs kernel: hub 4-0:1.0: port 2 not warm reset yet, waiting 
> 200ms
> Nov 16 03:36:29 ccs kernel: device-mapper: uevent: version 1.0.3
> Nov 16 03:36:29 ccs kernel: device-mapper: ioctl: 4.23.0-ioctl (2012-07-25) 
> initialised: dm-de...@redhat.com
> Nov 16 03:36:29 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2a0340

Device connected, warm reset finishes after 650ms, back in Compliance Mode.

> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x310341
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: clear port reset change, 
> actual port 1 status  = 0xa0340
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: clear port warm(BH) reset 
> change, actual port 1 status  = 0x20340
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: clear port link state 
> change, actual port 1 status  = 0x20340

Connect change bit still set here, we probably want to clear it before
we disable the port.

> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Disable port 1
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x20280
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x10280
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Enable port 1

> Nov 16 03:36:30 ccs kernel: hub 4-0:1.0: state 7 ports 2 chg 0004 evt 0004
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x202a0
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x102a0
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: clear port connect change, 
> actual port 1 status  = 0x2a0

No device connected, link is in the RxDetect state.

> Nov 16 03:36:30 ccs kernel: hub 4-0:1.0: port 2, status 02a0, change 0001, 
> 5.0 Gb/s
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2a0
> Nov 16 03:36:30 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x2a0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2e0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x2e0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2e0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x2e0
> Nov 16 03:36:31 ccs kernel: async_tx: api initialized (async)
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2e0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x2e0

Link is in the Polling state.

> Nov 16 03:36:31 ccs kernel: raid6: sse2x1    9085 MB/s
> Nov 16 03:36:31 ccs kernel: raid6: sse2x2   11273 MB/s
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: get port status, actual 
> port 1 status  = 0x2e0
> Nov 16 03:36:31 ccs kernel: xhci_hcd 0000:04:00.0: Get port status returned 
> 0x2e0

No further port events in the log.
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to