[SeaBIOS] [PATCH 1/4] xhci: Update the times for usb command timeouts.

Kevin O'Connor kevin at koconnor.net
Sun Jun 22 00:29:34 CEST 2014


On Sat, Jun 21, 2014 at 08:46:05PM +0200, Idwer Vollering wrote:
> 2014-06-21 20:22 GMT+02:00 Kevin O'Connor <kevin at koconnor.net>:
> > On Sat, Jun 21, 2014 at 01:15:25PM -0500, Matt DeVillier wrote:
> >> On 6/21/2014 1:08 PM, Kevin O'Connor wrote:
> (cut)
> 
> 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.

-Kevin



More information about the SeaBIOS mailing list