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.
Indeed, changing 1000 to 5000 or USB_TIME_COMMAND in src/hw/usb-xhci.c:501 didn't matter.
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?
All superspeed hardware I have is this HDD docking station.
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.
It is, but ofcourse one can't tell which BIOS update added that feature.
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
Bus 006 Device 002: ID 357d:7788 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 3.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 9 idVendor 0x357d idProduct 0x7788 bcdDevice 1.08 iManufacturer 1 Sharkoon iProduct 2 Quickport XT USB3 iSerial 5 0123456789AB bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 121 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 4 USB Mass Storage bmAttributes 0xc0 Self Powered MaxPower 2mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 8 Mass Storage bInterfaceSubClass 6 SCSI bInterfaceProtocol 80 Bulk-Only iInterface 6 MSC Bulk-Only Transport Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 15 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 15 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 4 bInterfaceClass 8 Mass Storage bInterfaceSubClass 6 SCSI bInterfaceProtocol 98 iInterface 10 MSC USB Attached SCSI Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 0 Command pipe (0x01) Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 0 MaxStreams 16 Status pipe (0x02) Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 15 MaxStreams 16 Data-in pipe (0x03) Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 0 bMaxBurst 15 MaxStreams 16 Data-out pipe (0x04) Binary Object Store Descriptor: bLength 5 bDescriptorType 15 wTotalLength 22 bNumDeviceCaps 2 USB 2.0 Extension Device Capability: bLength 7 bDescriptorType 16 bDevCapabilityType 2 bmAttributes 0x00000002 Link Power Management (LPM) Supported SuperSpeed USB Device Capability: bLength 10 bDescriptorType 16 bDevCapabilityType 3 bmAttributes 0x00 wSpeedsSupported 0x000e Device can operate at Full Speed (12Mbps) Device can operate at High Speed (480Mbps) Device can operate at SuperSpeed (5Gbps) bFunctionalitySupport 1 Lowest fully-functional device speed is Full Speed (12Mbps) bU1DevExitLat 10 micro seconds bU2DevExitLat 32 micro seconds Device Status: 0x0001 Self Powered