[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