This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/TUSB8041: USB enumeration issue in U-boot

Part Number: TUSB8041
Other Parts Discussed in Thread: AM5728, , BEAGLEBOARD-X15, PMP

Tool/software: Linux

We are developing a product based on the TI AM5728 EVM.  The product has a TUSB8041 USB HUB on the AM5728 USB host port for additional USB ports.

The hub works without any problems in Linux kernel, but causes uboot to restart when it is probed during usb start.

We are working with the 4.03.00.05 SDK.  We can run usb start in uboot if we leave the TUSB8041 disabled.  Not useful though as we cannot communicate with any of our product ports because they are on the hub.

usb start fails when ever the hub is enabled:

=> usb start
starting USB...
USB0:   Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus 0 for devices... ERROR: Configure Endpoint command returned completion code 8.
Failed to configure xHCI endpoint
failed to set default configuration len 25, status 80000000
BUG: failure at drivers/usb/host/xhci.c:503/_xhci_alloc_device()!
BUG!
resetting ...

We are using the hub with all default settings except PWRCTL polarity is active high and disable the custom battery charging feature.  We configure and enable the hubs via I2C in board.c of uboot, here is an example:

Configure TUSB8041:

palmas_i2c_write_u8(TUSB8041_HUB_1, 0xA, 0x20);

Exit TUSB8041 configuration mode and activate:

palmas_i2c_write_u8(TUSB8041_HUB_1, 0xF8, 0x1);

and uboot resets when usb start is requested.

No issues if the hub is not activated:

=> usb start
starting USB...
USB0: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found

=> usb tree
USB device tree:
1 Hub (5 Gb/s, 0mA)
U-Boot XHCI Host Controller

  • Note we know that u-boot doesn't support USB 3.0, we only need USB 2.0 in u-boot with the TUSB8041. We'll be using it for firmware recovery via USB.
  • Chris,

    We are currently working on your issue and will reply as soon as possible.
  • Any update on the status of this investigation?  Thanks

  • Chris,

    When uboot works and the hub is disabled, what is the usb device that is still connected? Or is the hub enabled later?

    Regards,
    JMMN
  • Not sure what you mean by "when uboot works".  We cannot get usb to start in uboot unless the TUSB8041 hub is disabled.  I assume this is what you mean, however, that isn't "working".

    Leaving the TUSB8041 disabled is useless as all of the USB ports are on the hub and the board cannot communicate with any plugged in devices when the TUSB8041 is disabled.

    Leaving the TUSB8041 disabled was simply a test to isolate what was causing the usb start failure and confirmed that the TUSB8041 causes the problem.

    Normal operation, the hub is enabled in board.c as part of the board initialization.   

    To replicate the failure, there are no devices connected, only the TUSB8041 hub, enabled by the logic previously posted as part of board initialization.   

  • Chris,

    My question is what usb device is connected in this case (below)? Also, how are you enabling / disabling the hub?

    No issues if the hub is not activated:

    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found <<<<<<
    scanning usb for storage devices... 0 Storage Device(s) found

    Regards,
    JMMN
  • Nothing is attached to the port other than the TUSB8041.  In the "working" case, the TUSB8041 is left disabled/not activated.

    Enabling/disabling the hub is as per stated in the original post:

    "We are using the hub with all default settings except PWRCTL polarity is active high and disable the custom battery charging feature.  We configure and enable the hubs via I2C in board.c of uboot, here is an example:

    Configure TUSB8041:

    palmas_i2c_write_u8(TUSB8041_HUB_1, 0xA, 0x20);

    Exit TUSB8041 configuration mode and activate:

    palmas_i2c_write_u8(TUSB8041_HUB_1, 0xF8, 0x1);

    "

    The hub is left disabled by commenting out the code in board.c

  • Hi Chris,

    Thanks for the information, I'm moving this thread over to the Sitara forum since it looks like an interoperability issue with uboot not a hub hardware issue.

    Regards,
    JMMN
  • Ok thanks,

  • This issue isn't resolved.  Why was the state changed to "TI thinks this is resolved"?

    Is there anyone looking into this?

  • Chris,

    Our USB expert is out of the office and will look into this when he returns next week. Sorry for the delay.
  • ok thanks
  • I did a test trying u-boot 2018.07 to see if the newer code addresses the problem and it fails as well.

    2018.07 also fails using "usb start" causing u-boot to reset. Here is the failure:

     

    U-Boot 2018.07-rc1-dirty (Jun 05 2018 - 16:42:50 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    .
    .
    .

    => usb start

    starting USB...
    USB0:   Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... Device not responding to set address.
    
          USB device not accepting new address (error=80000000) WARN halted endpoint, queueing URB anyway.
    Unexpected XHCI event TRB, skipping... (fcf24670 00000000 13000000 02008400) BUG at drivers/usb/host/xhci-ring.c:495/abort_td()!
    BUG!
    resetting ...
    

  • Hi Chris,
    I'll need to ask for your patience with me on this as I'm a Sitara HW guy (not the hub) and coming into this fresh.

    If I understand correctly, you are configuring the hub via I2C to support a reverse polarity power switch for the downstream ports, and also disabling the battery charging functionality of the hub. You are then initiating a hub enable (reset?) via I2C and then running USB START, at which point uBoot crashes.

    If you DON'T configure the hub via I2C, it is enumerated correctly after USB START but you can't access the downstream ports because the hub isn't configured correctly for your board.

    Is this right so far?
  • No troubles, I appreciate you looking into this.

    Yes that is correct.  Missing from my discussion is a 100 ms reset that is done during initialization via GPIO to the hubs prior to configuring the hubs via I2C.

    Only one hub requires the reverse polarity as it was a necessary step in the board layout to bring the signals to the backplane of our product.

    The hubs work fine in Linux, they are just a problem in u-boot.  Problem seems to be in the u-boot code.  There is something different about the TUSB8041  that u-boot doesn't account for.

    We want to access USB storage devices from u-boot to facilitate product recovery in the event of corruption of the main SD card.  u-boot is booted from a QSPI FLASH on our product.

    IMHO this problem needs to be investigated by your u-boot coding person.

  • Hi Chris,
    I agree that uBoot and/or software does appear to be involved, and I'd like to work to further narrow this down by excluding it completely.

    I had a quick meeting with the Hub expert, and we'd like you to see what happens if you mod your board to accomplish the power_polarity reversal rather than use SMBUS. This can be accomplished via pin 41 on the TUSB8041. Battery Charging support is disabled by default, so unless you are pulling-up these (per-port) pins, you shouldn't need to mod for them.
  • Ok I'll chat with the H/W folks and see if I can get a mod done for this. probably be a couple of days to turn it around.
  • Sounds good. Post here with your results and we'll be automatically notified.
  • Working from your suggestion I did a quick test where I only enable a single hub that doesn't require the pair swap and I'm able to do a usb reset. I did a second test enabling two hubs and u-boot resets.

    So the problem doesn't appear to be related to the TUSB8041 or the swapped polarity lines, but due to two hubs being enabled.
  • OK, that seems pretty conclusive. Honestly, I'm not sure multi-hub support in uBoot is something that's supported , but that's a question for our SW guy. He'll be back next week.
  • Ok thanks, I'm going to look to see if there is something we can do with one hub enabled in u-boot and then fully enable the rest in the kernel as a work around if we can't get u-boot to support it.
  • Chris,

    I am the Sitara SW guy and just got back in office, and I am not sure if you still need any support from TI regarding this issue.

    But I want to to understand how you use the two hubs on your board, are they tiered in serial on ONE usb controller or separate independently on the TWO usb controllers?
  • They are independent on the two separate AM5728 controllers.

    It would be nice if we can get it to work, but we can live with just one enabled in u-boot.

    However, it looks at this time like u-boot cannot support two hosts.
  • Chris,

    Thanks for clarifying.

    Yes, due to how the uboot usb stack is implemented, only one usb controller can work in host mode. I am not ware of any plan to add the feature to support multiple host ports in uboot.
  • That doesn't seem to be the case. We are able to have both host controllers active in u-boot and use them. We tested this on the AM5728 EVM the results are in the initial post.

    The issue is having the TUSB8041 hub enabled on both host controllers.

    So are you saying the issue is the hosts as we don't experience that problem, or is it having multiple hubs?
  • Chris,

    I am not sure how you validated to have both controllers in host mode, the uboot code only configures one controller to be the host port, unless you have modified uboot code to support multiple usb hosts, I don't think you can have both controllers in host mode. This is not related to any hub.
  • Device tree for our product has both USB entities enabled as hosts.

    I comment out enabling the TUSB8041 hubs on startup.

    usb start works:

    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
    scanning usb for storage devices... 0 Storage Device(s) found

    the only difference between this and the failing case is the TUSB8041 hubs are enabled. Both AM5728 USB hosts are active always.
  • Chris Welch66 said:
    scanning bus 0 for devices... 1 USB Device(s) found

    The log shows only one controller is in host mode.

  • My point is u-boot is ignoring the other host and doesn't crash.

    Here is our dts entry for the second host, same as the kernel and we see both hosts in the kernel so u-boot just ignores the other apparently:

    &usb2 {
    /*
    * Stand alone usage is peripheral only.
    * However, with some resistor modifications
    * this port can be used via expansion connectors
    * as "host" or "dual-role". If so, provide
    * the necessary dr_mode override in the expansion
    * board's DT.
    */

    /* dr_mode = "peripheral"; cgw configure as second USB host */
    dr_mode = "host";
    };

    It is enabling more than one TUSB8041 hub, not the alternate host controller that causes the crash.
  • I'm not able to get it working any longer even with a single hub enabled.  I simplified the setup so all of the configuration can be managed from u-boot, only one AM5728 host is setup in the device tree.

    All hubs are disabled, usb start works:

    Press SPACE to abort autoboot in 2 seconds
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
    scanning usb for storage devices... 0 Storage Device(s) found

    Enable the TUSB8041 hub on the host port and usb start fails:

    Press SPACE to abort autoboot in 2 seconds
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... ERROR: Configure Endpoint command returned completion code 8.
    Failed to configure xHCI endpoint
    failed to set default configuration len 25, status 80000000
    BUG: failure at drivers/usb/host/xhci.c:503/_xhci_alloc_device()!
    BUG!
    resetting ...

    Perform a usb start first, then enable the hub, then do a usb reset and it works:

    Press SPACE to abort autoboot in 2 seconds
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
    scanning usb for storage devices... 0 Storage Device(s) found
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb reset
    resetting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 2 USB Device(s) found
    scanning usb for storage devices... 0 Storage Device(s) found

    So clearly there is a problem regarding the TUSB8041 with u-boot, it has nothing to do with the AM5728 USB hosts.

  • Chris,

    Earlier -DK- recommended to modify the board to HW strap those options to avoid those i2c commands, did the test give the same failure?

  • The modifications were not to avoid these commands, they were to swap the polarity of one of the hubs. The hub that requires the swapped polarity remains disabled in this test. We didn't make the modification because the failure occurs even with the hub left disabled.
  • I am not a hw guy and not familiar with this hub, but I think -DK- told me there is also a HW strap for the SMBUS mode, that would eliminate the i2c commands.
  • Please have your H/W folks let us know the specific strapping you'd like us to try for the test.
  • I will ask, and meanwhile maybe you can check if the hub datasheet mentions something about it?
  • I'm not a hardware guy and the data sheet is not explicit as to how this is done.

    Documentation for the configuration enable bit implies that putting the HUB in I2C mode (hold pin 39 high) might do it, but it doesn't explicitly indicate this.

    From register F8h section 8.5.23:

    "Configuration active. This bit indicates that configuration of the
    TUSB8041 is currently active. The bit is set by hardware when the
    device enters the I2C or SMBus mode.

    The TUSB8041 shall not connect on the upstream port while this bit is 1.
    When in the SMBus mode, this bit must be cleared by the SMBus host in
    order to exit the configuration mode and allow the upstream port to
    connect.

    The bit is cleared by a writing 1. A write of 0 has no effect."

    Based on this, I'm guessing that if the part is not in SMBus mode, the hub immediately exists configuration mode, but the documentation doesn't specify that so it is only an assumption.

    Unfortunately without clear documentation, I cannot determine the necessary configuration.
  • Set SMBUSz high to keep the hub out of SMBUS mode. In I2C mode, if the hub does not detect an attached EEPROM it will use pin configurations to set up the hub.

    Regards,
    JMMN
  • Thanks, that is a fairly simple mod for our board as we have in line resistors on the pin.

    I'll pass it on to our hardware folks and get back to you once I've been able to test.

    Thanks for your help!
  • usb start still causes u-boot to reset with the TUSB8041 modified to come up without I2C configuration.   We did strapped the chip pulling up pins 41 and 39 to perform the test.

    I removed all TUSB8041 initialization code from u-boot:

    U-Boot 2017.01-00475-g7995743-dirty (Jun 14 2018 - 16:05:16 -0400)

    CPU : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM: 2 GiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment

    Skipping USB hub setupWarning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device

    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI: SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    =>
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... ERROR: Configure Endpoint command returned completion code 8.
    Failed to configure xHCI endpoint
    failed to set default configuration len 25, status 80000000
    BUG: failure at drivers/usb/host/xhci.c:503/_xhci_alloc_device()!
    BUG!
    resetting ...

    U-Boot SPL 2017.01-00475-g7995743-dirty (Jun 14 2018 - 16:05:16)
    DRA752-GP ES2.0
    Trying to boot from SPI
    *** Warning - bad CRC, using default environment

    We are going to leave the hardware as is and continue to use I2C initialization.

    Any further suggestions?

  • Chris,

    Let me dig in something then get back to you.

  • Chris,

    Can you please add the following debug patch in your uboot code and provide the logs for both working and failure cases?

    diff --git a/common/usb.c b/common/usb.c
    index 15e1e4c64e48..85fb964113d7 100644
    --- a/common/usb.c
    +++ b/common/usb.c
    @@ -26,6 +26,7 @@
      *
      * For each transfer (except "Interrupt") we wait for completion.
      */
    +#define DEBUG
     #include <common.h>
     #include <command.h>
     #include <dm.h>
    diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
    index 32011774768f..fb0ac9201857 100644
    --- a/drivers/usb/host/xhci.c
    +++ b/drivers/usb/host/xhci.c
    @@ -20,6 +20,7 @@
      * The quirk devices support hasn't been given yet.
      */
     
    +#define DEBUG
     #include <common.h>
     #include <dm.h>
     #include <asm/byteorder.h>
    
  • Turning on debug allows the hub enumeration to succeed so I can't capture a failure with debugging turned on.

    Capture debug for success case where hub is disabled:

    usbstart_no_hub_debug.txt
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    =>
    => reset
    resetting ...
    
    U-Boot SPL 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:08:46)
    DRA752-GP ES2.0
    Trying to boot from SPI
    *** Warning - bad CRC, using default environment
    
    Loaded am57xx-beagle-x15 device tree
    
    
    U-Boot 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:08:46 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment
    
    Warning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device
    
    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI:  SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => usb start
    starting USB...
    USB0:   // Halt the HC: 48890020
    // Reset the HC
    Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... New Device 0
    set address 1
    usb_control_msg: request: 0x5, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    USB_REQ_SET_ADDRESS
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x12
    USB_DT_DEVICE request
    scrlen = 18
     req->length = 18
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x9
    USB_DT_CONFIG config
    scrlen = 25
     req->length = 9
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x1F
    USB_DT_CONFIG config
    scrlen = 25
     req->length = 31
    get_conf_no 0 Result 25, wLength 31
    if 0, ep 0
    ##EP epmaxpacketin[1] = 8
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    new device strings: Mfr=1, Product=2, SerialNumber=0
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x300 index 0x0 length 0xFF
    USB_DT_STRING config
    scrlen = 4
     req->length = 255
    USB device number 1 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x301 index 0x409 length 0xFF
    USB_DT_STRING config
    scrlen = 14
     req->length = 255
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x302 index 0x409 length 0xFF
    USB_DT_STRING config
    scrlen = 42
     req->length = 255
    Manufacturer U-Boot
    Product      XHCI Host Controller
    SerialNumber
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x4
    USB_DT_HUB config
    scrlen = 8
     req->length = 4
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0xB
    USB_DT_HUB config
    scrlen = 8
     req->length = 11
    usb_control_msg: request: 0x0, requesttype: 0xA0, value 0x0 index 0x0 length 0x4
    scrlen = 2
     req->length = 4
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x1 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x2 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    scrlen = 4
     req->length = 4
    1 USB Device(s) found
    scan end
           scanning usb for storage devices... 0 Storage Device(s) found
    =>
    

    Capture debug for normal fail case where hub is enabled, but succeeds with debugging enabled:

    usbstart_with_hub_debug.txt
    => reset
    resetting ...
    
    U-Boot SPL 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:08:46)
    DRA752-GP ES2.0
    Trying to boot from SPI
    *** Warning - bad CRC, using default environment
    
    Loaded am57xx-beagle-x15 device tree
    
    
    U-Boot 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:08:46 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment
    
    Warning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device
    
    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI:  SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb start
    starting USB...
    USB0:   // Halt the HC: 48890020
    // Reset the HC
    Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... New Device 0
    set address 1
    usb_control_msg: request: 0x5, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    USB_REQ_SET_ADDRESS
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x12
    USB_DT_DEVICE request
    scrlen = 18
     req->length = 18
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x9
    USB_DT_CONFIG config
    scrlen = 25
     req->length = 9
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x1F
    USB_DT_CONFIG config
    scrlen = 25
     req->length = 31
    get_conf_no 0 Result 25, wLength 31
    if 0, ep 0
    ##EP epmaxpacketin[1] = 8
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    new device strings: Mfr=1, Product=2, SerialNumber=0
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x300 index 0x0 length 0xFF
    USB_DT_STRING config
    scrlen = 4
     req->length = 255
    USB device number 1 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x301 index 0x409 length 0xFF
    USB_DT_STRING config
    scrlen = 14
     req->length = 255
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x302 index 0x409 length 0xFF
    USB_DT_STRING config
    scrlen = 42
     req->length = 255
    Manufacturer U-Boot
    Product      XHCI Host Controller
    SerialNumber
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x4
    USB_DT_HUB config
    scrlen = 8
     req->length = 4
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0xB
    USB_DT_HUB config
    scrlen = 8
     req->length = 11
    usb_control_msg: request: 0x0, requesttype: 0xA0, value 0x0 index 0x0 length 0x4
    scrlen = 2
     req->length = 4
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x1 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x2 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    SPEED = SUPERSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    SPEED = SUPERSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x10 index 0x2 length 0x0
    clear port connect change, actual port 2 status  = 0x1203
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x2 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    SPEED = SUPERSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x14 index 0x2 length 0x0
    clear port reset change, actual port 2 status  = 0x1203
    scrlen = 0
     req->length = 0
    Len is 0
    New Device 1
    set address 2
    usb_control_msg: request: 0x5, requesttype: 0x0, value 0x2 index 0x0 length 0x0
    Setting up addressable devices fcf33280
    Successful Address Device command
    xHC internal address is: 1
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x12
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x9
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x1F
    get_conf_no 0 Result 31, wLength 31
    if 0, ep 0
    ##EP epmaxpacketin[1] = 2
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    Successful Configure Endpoint command
    new device strings: Mfr=0, Product=0, SerialNumber=0
    Manufacturer
    Product
    SerialNumber
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x4
    Freeing device node: 1
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x1 index 0x2 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    SPEED = FULLSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    SPEED = FULLSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x10 index 0x1 length 0x0
    clear port connect change, actual port 1 status  = 0x6e1
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x1 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    SPEED = FULLSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x1 length 0x0
    scrlen = 0
     req->length = 0
    Len is 0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    SPEED = HIGHSPEED
    scrlen = 4
     req->length = 4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x14 index 0x1 length 0x0
    clear port reset change, actual port 1 status  = 0xe03
    scrlen = 0
     req->length = 0
    Len is 0
    New Device 1
    set address 2
    usb_control_msg: request: 0x5, requesttype: 0x0, value 0x2 index 0x0 length 0x0
    Setting up addressable devices fcf33280
    Successful Address Device command
    xHC internal address is: 2
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x12
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x9
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x29
    get_conf_no 0 Result 41, wLength 41
    if 0, ep 0
    if 0, ep 1
    ##EP epmaxpacketin[1] = 1
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    Successful Configure Endpoint command
    new device strings: Mfr=0, Product=0, SerialNumber=1
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x300 index 0x0 length 0xFF
    USB device number 2 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x301 index 0x409 length 0xFF
    Manufacturer
    Product
    SerialNumber 8D0108493128
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x4
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x9
    usb_control_msg: request: 0x0, requesttype: 0xA0, value 0x0 index 0x0 length 0x4
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x1 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x2 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x3 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x4 length 0x0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x10 index 0x1 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x4 index 0x1 length 0x0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x1, requesttype: 0x23, value 0x14 index 0x1 length 0x0
    New Device 2
    set address 3
    usb_control_msg: request: 0x5, requesttype: 0x0, value 0x3 index 0x0 length 0x0
    Setting up addressable devices fcf33280
    Successful Address Device command
    xHC internal address is: 3
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x100 index 0x0 length 0x12
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x9
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x200 index 0x0 length 0x29
    get_conf_no 0 Result 41, wLength 41
    if 0, ep 0
    if 0, ep 1
    ##EP epmaxpacketin[1] = 1
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0, value 0x1 index 0x0 length 0x0
    Successful Configure Endpoint command
    new device strings: Mfr=0, Product=0, SerialNumber=1
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x300 index 0x0 length 0xFF
    USB device number 3 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80, value 0x301 index 0x409 length 0xFF
    Manufacturer
    Product
    SerialNumber EA0108693128
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x4
    usb_control_msg: request: 0x6, requesttype: 0xA0, value 0x2900 index 0x0 length 0x9
    usb_control_msg: request: 0x0, requesttype: 0xA0, value 0x0 index 0x0 length 0x4
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x1 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x2 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x3 length 0x0
    usb_control_msg: request: 0x3, requesttype: 0x23, value 0x8 index 0x4 length 0x0
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x1 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x2 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x3 length 0x4
    usb_control_msg: request: 0x0, requesttype: 0xA3, value 0x0 index 0x4 length 0x4
    3 USB Device(s) found
    scan end
           scanning usb for storage devices... 0 Storage Device(s) found
    => usb tree
    USB device tree:
      1  Hub (5 Gb/s, 0mA)
      |  U-Boot XHCI Host Controller
      |
      +-2  Hub (480 Mb/s, 0mA)
        |    8D0108493128
        |
        +-3  Hub (480 Mb/s, 0mA)
               EA0108693128
    
    =>
    

    Capture no debug for success case where hub is disabled:

    usbstart_no_hub_pass_no_debug.txt
    reset
    resetting ...
    
    U-Boot SPL 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:14:33)
    DRA752-GP ES2.0
    Trying to boot from SPI
    *** Warning - bad CRC, using default environment
    
    Loaded am57xx-beagle-x15 device tree
    
    
    U-Boot 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:14:33 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment
    
    Warning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device
    
    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI:  SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => usb start
    starting USB...
    USB0:   Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
           scanning usb for storage devices... 0 Storage Device(s) found
    =>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Capture no debug fail case where hub is enabled:

    usbstart_with_hub_fail_no_debug.txt
    U-Boot 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:14:33 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment
    
    Warning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device
    
    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI:  SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb start
    starting USB...
    USB0:   Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... ERROR: Configure Endpoint command returned completion code 8.
    Failed to configure xHCI endpoint
    failed to set default configuration len 25, status 80000000
    BUG: failure at drivers/usb/host/xhci.c:504/_xhci_alloc_device()!
    BUG!
    resetting ...
    
    U-Boot SPL 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:14:33)
    DRA752-GP ES2.0
    Trying to boot from SPI
    *** Warning - bad CRC, using default environment
    
    Loaded am57xx-beagle-x15 device tree
    
    
    U-Boot 2017.01-00476-ge1e1fbc-dirty (Jun 18 2018 - 15:14:33 -0400)
    
    CPU  : DRA752-GP ES2.0
    Model: TI AM5728 BeagleBoard-X15
    Board: AM572x EVM REV
    DRAM:  2 GiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    *** Warning - bad CRC, using default environment
    
    Warning: fastboot.board_rev: unknown board revision
    Card did not respond to voltage select!
    ERROR: invalid mmc device
    
    at arch/arm/mach-omap2/utils.c:95/omap_mmc_get_part_size()
    SCSI:  SATA link 0 timeout.
    AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
    flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst
    scanning bus for devices...
    Found 0 device(s).
    Net:
    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    =>
    

     

  • Chris,

    Thanks for testing it, it tells the issue seems to be timing related.

    The device attach and electrical enumeration has a timing requirement, please see the USB2.0 Spec section 7.1.7.3 "Connect and Disconnect Signaling". Can you please use a scope to check if the requirement is met in the failure case? You might also want to compare it with the working case to see if there is any difference in the signaling.
  • Certainly seems to be timing for sure.  I'll try to get our H/W folks to have a look.

  • I also think there might be just one debug/print statement in uboot xhci driver which changes the behavior that the issue is disappeared, which might point to if there is a bug in the uboot code.
    So you might want to narrow it down to see which debug/print changes the behavior?
  • Sure I can try divide and conquer on the statements working on the highest quantity first.
  • Quite a tricky problem, debugging in many areas allows the usb start to succeed. The best I was able to come up with for isolation was adding a 10 us delay into xhci_clear_port_change_bit. The exact location of the delay doesn't seem to be overly important, I found enabling/disabling the "clear port" debug at the end of the function gave me a works/fails toggle and so tried using udelay :

    6bd-gc68ed086bd/package$ git diff ../drivers/usb/host/xhci.c
    diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
    index 3201177..8e7f2b9
    --- a/drivers/usb/host/xhci.c
    +++ b/drivers/usb/host/xhci.c
    @@ -20,6 +20,7 @@
    * The quirk devices support hasn't been given yet.
    */

    +//#define DEBUG
    #include <common.h>
    #include <dm.h>
    #include <asm/byteorder.h>
    @@ -628,7 +629,7 @@ static void xhci_clear_port_change_bit(u16 wValue,

    /* Change bits are all write 1 to clear */
    xhci_writel(addr, port_status | status);
    -
    + udelay(10);
    port_status = xhci_readl(addr);
    debug("clear port %s change, actual port %d status = 0x%x\n",
    port_change_bit, wIndex, port_status);
    @@ -862,6 +863,7 @@ static int xhci_submit_root(struct usb_device *udev, unsigned long pipe,
    memcpy(buffer, srcptr, len);
    else
    debug("Len is 0\n");
    + ;

    udev->act_len = len;
    udev->status = 0;

    This isn't a 100% fix, but enough to get it to work. usb start still complains of "Device not responding to set address" with the hub enabled, but none the less is able to proceed:

    Press SPACE to abort autoboot in 2 seconds
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb start
    starting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... Device not responding to set address. <==== NOTE STILL GETTING THIS AND NEXT FAILURE

    USB device not accepting new address (error=80000000)
    5 USB Device(s) found
    scanning usb for storage devices... 0 Storage Device(s) found

    I insert a USB stick:

    > usb reset
    resetting USB...
    USB0: Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... Device not responding to set address.

    USB device not accepting new address (error=80000000)
    6 USB Device(s) found
    scanning usb for storage devices... 1 Storage Device(s) found
    => usb tree
    USB device tree:
    1 Hub (5 Gb/s, 0mA)
    | U-Boot XHCI Host Controller
    |
    +-2 Hub (480 Mb/s, 0mA)
    | 8D0108493128
    |
    +-3 Hub (480 Mb/s, 0mA)
    | EA0108693128
    |
    +-4 Mass Storage (480 Mb/s, 500mA)
    | SMI Corporation USB DISK 9315011395006932
    |
    +-5 Hub (480 Mb/s, 2mA)
    |
    +-6 Vendor specific (480 Mb/s, 500mA)
    DisplayLink MAP-300BKD 00000001
  • Chris,

    It sounds like the xhci driver works too soon at one point. Can you please remove all the debug code changes and apply the following patch? It waits for 200ms instead of 100ms to power on hubs.

    diff --git a/common/usb_hub.c b/common/usb_hub.c
    index ff9cd50eab7c..1f032c9a4d02 100644
    --- a/common/usb_hub.c
    +++ b/common/usb_hub.c
    @@ -144,7 +144,7 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
             * Do a minimum delay of the larger value of 100ms or pgood_delay
             * so that the power can stablize before the devices are queried
             */
    -       hub->query_delay = get_timer(0) + max(100, (int)pgood_delay);
    +       hub->query_delay = get_timer(0) + max(200, (int)pgood_delay);
     
            /*
             * Record the power-on timeout here. The max. delay (timeout)
    
  • The increased delay allows usb start to succeed:

    Warning: ethernet@48484000 using MAC address from ROM
    eth0: ethernet@48484000
    Press SPACE to abort autoboot in 2 seconds
    => i2c dev 2
    Setting bus to 2
    => i2c mw 44 a 20
    => i2c mw 44 f8 1
    => usb start
    starting USB...
    USB0:   Register 2000140 NbrPorts 2
    Starting the controller
    USB XHCI 1.00
    scanning bus 0 for devices... Device not responding to set address.
    
          USB device not accepting new address (error=80000000)
    6 USB Device(s) found
           scanning usb for storage devices... 1 Storage Device(s) found
    => usb tree
    USB device tree:
      1  Hub (5 Gb/s, 0mA)
      |  U-Boot XHCI Host Controller
      |
      +-2  Hub (480 Mb/s, 0mA)
        |    8D0108493128
        |
        +-3  Hub (480 Mb/s, 0mA)
          |    EA0108693128
          |
          +-4  Mass Storage (480 Mb/s, 500mA)
          |    SMI Corporation USB DISK 9315011395006932
          |
          +-5  Hub (480 Mb/s, 2mA)
            |
            +-6  Vendor specific (480 Mb/s, 500mA)
                 DisplayLink MAP-300BKD 00000001

    It is still reporting the device not responding to set address, but is otherwise good.

    Do we need to be concerned about the "Device not responding to set address" message?

    Thanks!