On Sat, Jun 21, 2014 at 08:46:05PM +0200, Idwer Vollering wrote:
2014-06-21 20:22 GMT+02:00 Kevin O'Connor firstname.lastname@example.org:
On Sat, Jun 21, 2014 at 01:15:25PM -0500, Matt DeVillier wrote:
On 6/21/2014 1:08 PM, Kevin O'Connor wrote:
I'm experiencing similar trouble booting off native XHCI hardware:
SeaBIOS (version rel-1.7.5-20-g67fd42c-dirty-20140617_200600-ubuntu) init usb XHCI init on dev 00:10.0: regs @ 0xf0248000, 4 ports, 32 slots, 32 byte contexts XHCI extcap 0x1 @ f0248500 XHCI protocol USB 3.00, 2 ports (offset 1), def 0 XHCI protocol USB 2.00, 2 ports (offset 3), def 0 configure_xhci: resetting xhci_hub_detect port #1: 0x000002a0, powered, pls 5, speed 0 [ - ] xhci_hub_detect port #2: 0x000002a0, powered, pls 5, speed 0 [ - ] xhci_hub_detect port #3: 0x000002a0, powered, pls 5, speed 0 [ - ] xhci_hub_detect port #4: 0x000202e1, powered, pls 7, speed 0 [ - ] xhci_hub_reset port #4: 0x000202e1, powered, pls 7, speed 0 [ - ] XHCI port #4: 0x00200e03, powered, enabled, pls 0, speed 3 [High] set_address 0x000ef720 xhci_alloc_pipe: usbdev 0xbf0d37f0, ring 0xbf11fb00, slotid 0, epid 1 xhci_cmd_enable_slot: xhci_process_events: status change port #4 xhci_process_events: status change port #2 xhci_process_events: status change port #4 xhci_alloc_pipe: enable slot: got slotid 1 xhci_cmd_address_device: slotid 1 WARNING - Timeout at xhci_event_wait:394!
So, this looks different from Matt's report. What appears to be happening in the above is that the device shows up originally as a high speed device (see "[High]" above). However, when the set_address command is sent to it, it appears that the device effectively disconnects and then reconnects as a super speed device (see "change port #2" and "change port #4" above - port 2==port 4 - see ("offset 1" / "offset 3" above)).
You can try increasing the xchi_event_wait timeout which fixes Matt's issue, but I think we tried this on your hardware before with no luck.
SeaBIOS isn't coded to support new devices being attached dynamically, and this is really the limitation here. It's not so much an XHCI issue as it is a dynamic connection thing (SeaBIOS checks port 2, finds nothing, goes on to check port 4, finds a device there, that device goes away, a new device shows up on port 2, but SeaBIOS has already checked port 2 and wont check it again).
It's possible to make this work in SeaBIOS, but it would require some restructuring of the USB code. Can you check if this happens to all super speed devices on your controller or just this device? Is the device bootable with the factory BIOS? I'm not sure if it's worthwhile to add lots of code if this is just limited to a single quirky device.