[SeaBIOS] [PATCH 1/4] xhci: Update the times for usb command timeouts.
Idwer Vollering
vidwer at gmail.com
Sun Jun 22 17:54:17 CEST 2014
>> 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
More information about the SeaBIOS
mailing list