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.

embeded USB hub cannot be enumerated

Part Number: AM6548


Tool/software: Linux

Hi TI experts,

We have a custom board that using a AM6548 soc, and has a embeded usb2.0 hub usb2514b connected to the USBSS0, the hub is self-powered so only D+/D- are connected to the SOC, and during Linux boot, the usb hub cannot be enumerated.

Then we tried another usb2514b board that shares the same hardware disign with the usb part of our custom board, but this time connected it to the EVM usb2.0 port, the problem is still there.

Our hardware design:

1. USBSS0 as USB2.0 mode, only the DM/DP of the USB2.0 phy are pinned out.

2. usb2514b hub's upstream DM/DP are connected to usb2.0 phy of the controller.

3. usb2514b is self-powered, so the VBUS is connected directly to 3.3V, we don't use the DRVVBUS pin to control the VBUS on/off.

4. the ID pin is grounded so the USBSS0 controller works as host.

from the kernel log, it seems after the usb driver probe, it tried to perform a "port reset", but never succeeded:

[ 7.589651] xhci-hcd xhci-hcd.0.auto: xhci_hub_status_data: stopping port polling.
[ 7.641321] hub 1-0:1.0: hub_activation_type 2
[ 7.641411] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
[ 7.641433] usb usb1-port1: [port_event]: connect_change 0001
[ 7.641456] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x6e1
[ 7.641463] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x101
[ 7.641509] usb usb1-port1: [port_event]: portstatus 0101, portchange 0000
[ 7.641516] usb usb1-port1: status 0101, change 0000, 12 Mb/s
[ 7.641621] xhci-hcd xhci-hcd.0.auto: set port reset, actual port 0 status = 0x6f1
[ 7.649276] xhci-hcd xhci-hcd.0.auto: xhci_hub_status_data: stopping port polling.
[ 7.709376] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x200e03
[ 7.709388] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100503
[ 7.709453] xhci-hcd xhci-hcd.0.auto: clear port reset change, actual port 0 status = 0xe03
[ 7.769349] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 7.776138] xhci-hcd xhci-hcd.0.auto: set port reset, actual port 0 status = 0x2602a0
[ 7.841366] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2602a0
[ 7.841380] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x130100
[ 7.841420] usb usb1-port1: not reset yet, waiting 60ms
[ 7.909356] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2602a0
[ 7.909368] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x130100
[ 7.909408] usb usb1-port1: not reset yet, waiting 200ms
[ 8.117368] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2602a0
[ 8.117380] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x130100
[ 8.117445] usb usb1-port1: not reset yet, waiting 200ms
[ 8.325326] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2602a0
[ 8.325338] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x130100
[ 8.325384] usb usb1-port1: not reset yet, waiting 200ms
[ 8.533314] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2602a0
[ 8.533324] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x130100
[ 8.533367] usb usb1-port1: not reset yet, waiting 200ms
[ 8.533381] xhci-hcd xhci-hcd.0.auto: clear port reset change, actual port 0 status = 0x602a0
[ 8.533411] xhci-hcd xhci-hcd.0.auto: disable port, actual port 0 status = 0x602a0
[ 8.533493] xhci-hcd xhci-hcd.0.auto: disable port, actual port 0 status = 0x602a0
[ 8.533536] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
[ 8.533562] usb usb1-port1: [port_event]: connect_change 0000
[ 8.533572] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x602a0
[ 8.533578] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x30100
[ 8.533601] usb usb1-port1: [port_event]: portstatus 0100, portchange 0003
[ 8.533611] xhci-hcd xhci-hcd.0.auto: clear port connect change, actual port 0 status = 0x402a0
[ 8.533636] xhci-hcd xhci-hcd.0.auto: clear port enable/disable change, actual port 0 status = 0x2a0
[ 8.533657] usb usb1-port1: status 0100, change 0003, 12 Mb/s
[ 8.533668] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2a0
[ 8.533674] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100
[ 8.569320] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2a0
[ 8.569329] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100
[ 8.605289] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2a0
[ 8.605295] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100
[ 8.641324] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2a0
[ 8.641338] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100
[ 8.677309] xhci-hcd xhci-hcd.0.auto: get port status, actual port 0 status = 0x2a0
[ 8.677318] xhci-hcd xhci-hcd.0.auto: Get port status returned 0x100
[ 8.677353] usb usb1-port1: debounce total 100ms stable 100ms status 0x100
[ 8.677415] hub 1-0:1.0: hub_suspend
[ 8.677464] xhci-hcd xhci-hcd.0.auto: xhci_hub_status_data: stopping port polling.
[ 8.773274] xhci-hcd xhci-hcd.0.auto: xhci_hub_status_data: stopping port polling.

And other observations:

1. If perform a reset to the hub, then the hub can be enumerated and everything goes well.

2. If perform a reconnection to the usb connector, then the hub can be enumerated and everything goes well.

We checked the usb2514b, it seems after power up, it will wait for the SE0 signal for 3ms, if no SE0 signal then it goes to sleep, but Linux is not able to boot in 3ms, so after the USB driver loaded, the usb hub is in sleep mode.

3. Connect the usb2514b to PC, all seems good.

So it seems a compatible issue between usb2514b and USB3SS0 controller, do you have any thoughts or suggestions?

Also I have checked the "AM65x/DRA80x Schematic Checklist" @ http://www.ti.com/lit/an/spraci9/spraci9.pdf, and it says:

If you are including a USB hub, have you connected the USB signals correctly? USBx_DP and
USBx_DM should be connected directly to the USB hub upstream port. The hub then distributes these
signals to the downstream ports as needed. The connector ID should be grounded to enable host
mode. The USBx_DRVVBUS should be unconnected. The USBx_VBUS should be connected to the
output of the 5-V VBUS power source. It is also connected to the VBUS detect on the hub, which then
allows the hub to selectively enable or disable, typically through a power switch to each downstream
port.

seems everything is satisfied, except the VBUS_DET pin of the usb2514b hub, instead a 5-v power source, we use a 3V3 because the hub's datasheet suggest us to do such. but still I have a question, why "The USBx_DRVVBUS should be unconnected", I observed that if connect this pin to a switch that controlled the VBUS, then only after the usb driver is loaded, this pin close the switch so that downstram devices are powered, so we are considering a workaround solution to use the DRVVBUS to control the hub's VBUS, but get confused by this checkpoint...

BTW, we noticed that the reset value of IF/MUX register of the SERDES0 is 0, which is usb3, but since we don't use usb3 for USB3SS0, and we observed that the serdes phy is disturbing the usb2.0, so we just set that register to 1, which is pcie, to avoid the serdes0 phy disturbing. but here is the question, if we don't use the serdes0 at all, how do we treat this register, set to 3?

  • Hi,

    How have you connected LOCAL_PWR/ in the hub ? What about CFG[0] and CFG[1] of hub ?

    Do you have the "lsusb -v" logs ? Did it enumerate as self powered or bus powered ?
  • LOCAL_PWR is grounded. And we use it as self-powered and CFG_SEL[1:0] = 00, which is self-configuration mode.
  • This is the "lsusb -v" log:

    root@am65xx-evm:~# lsusb -v

    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 3.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 3
    bMaxPacketSize0 9
    idVendor 0x1d6b Linux Foundation
    idProduct 0x0003 3.0 root hub
    bcdDevice 4.14
    iManufacturer 3 Linux 4.14.67-g3c5cccdc-dirty xhci-hcd
    iProduct 2 xHCI Host Controller
    iSerial 1 xhci-hcd.0.auto
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 31
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0004 1x 4 bytes
    bInterval 12
    bMaxBurst 0
    Hub Descriptor:
    bLength 12
    bDescriptorType 42
    nNbrPorts 1
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    bPwrOn2PwrGood 10 * 2 milli seconds
    bHubContrCurrent 0 milli Ampere
    bHubDecLat 0.0 micro seconds
    wHubDelay 0 nano seconds
    DeviceRemovable 0x00
    Hub Port Status:
    Port 1: 0000.02a0 5Gbps power Rx.Detect
    Binary Object Store Descriptor:
    bLength 5
    bDescriptorType 15
    wTotalLength 15
    bNumDeviceCaps 1
    SuperSpeed USB Device Capability:
    bLength 10
    bDescriptorType 16
    bDevCapabilityType 3
    bmAttributes 0x02
    Latency Tolerance Messages (LTM) Supported
    wSpeedsSupported 0x0008
    Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport 3
    Lowest fully-functional device speed is SuperSpeed (5Gbps)
    bU1DevExitLat 0 micro seconds
    bU2DevExitLat 0 micro seconds
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

    Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 3.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 3
    bMaxPacketSize0 9
    idVendor 0x1d6b Linux Foundation
    idProduct 0x0003 3.0 root hub
    bcdDevice 4.14
    iManufacturer 3 Linux 4.14.67-g3c5cccdc-dirty xhci-hcd
    iProduct 2 xHCI Host Controller
    iSerial 1 xhci-hcd.1.auto
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 31
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0004 1x 4 bytes
    bInterval 12
    bMaxBurst 0
    Hub Descriptor:
    bLength 12
    bDescriptorType 42
    nNbrPorts 1
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    bPwrOn2PwrGood 10 * 2 milli seconds
    bHubContrCurrent 0 milli Ampere
    bHubDecLat 0.0 micro seconds
    wHubDelay 0 nano seconds
    DeviceRemovable 0x00
    Hub Port Status:
    Port 1: 0000.0280 5Gbps power SS.disabled
    Binary Object Store Descriptor:
    bLength 5
    bDescriptorType 15
    wTotalLength 15
    bNumDeviceCaps 1
    SuperSpeed USB Device Capability:
    bLength 10
    bDescriptorType 16
    bDevCapabilityType 3
    bmAttributes 0x02
    Latency Tolerance Messages (LTM) Supported
    wSpeedsSupported 0x0008
    Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport 3
    Lowest fully-functional device speed is SuperSpeed (5Gbps)
    bU1DevExitLat 0 micro seconds
    bU2DevExitLat 0 micro seconds
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 1 Single TT
    bMaxPacketSize0 64
    idVendor 0x1d6b Linux Foundation
    idProduct 0x0002 2.0 root hub
    bcdDevice 4.14
    iManufacturer 3 Linux 4.14.67-g3c5cccdc-dirty xhci-hcd
    iProduct 2 xHCI Host Controller
    iSerial 1 xhci-hcd.0.auto
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 25
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0004 1x 4 bytes
    bInterval 12
    Hub Descriptor:
    bLength 9
    bDescriptorType 41
    nNbrPorts 1
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
    bPwrOn2PwrGood 10 * 2 milli seconds
    bHubContrCurrent 0 milli Ampere
    DeviceRemovable 0x00
    PortPwrCtrlMask 0xff
    Hub Port Status:
    Port 1: 0000.0100 power
    can't get device qualifier: Resource temporarily unavailable
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 1 Single TT
    bMaxPacketSize0 64
    idVendor 0x1d6b Linux Foundation
    idProduct 0x0002 2.0 root hub
    bcdDevice 4.14
    iManufacturer 3 Linux 4.14.67-g3c5cccdc-dirty xhci-hcd
    iProduct 2 xHCI Host Controller
    iSerial 1 xhci-hcd.1.auto
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 25
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0004 1x 4 bytes
    bInterval 12
    Hub Descriptor:
    bLength 9
    bDescriptorType 41
    nNbrPorts 1
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
    bPwrOn2PwrGood 10 * 2 milli seconds
    bHubContrCurrent 0 milli Ampere
    DeviceRemovable 0x00
    PortPwrCtrlMask 0xff
    Hub Port Status:
    Port 1: 0000.0100 power
    can't get device qualifier: Resource temporarily unavailable
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

  • And this is the "lsusb -v" log delta after the hub enumrated by resetting the hub:

    root@am65xx-evm:~# lsusb -v

    Bus 001 Device 004: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 2 TT per port
    bMaxPacketSize0 64
    idVendor 0x0424 Standard Microsystems Corp.
    idProduct 0x2514 USB 2.0 Hub
    bcdDevice b.b3
    iManufacturer 0
    iProduct 0
    iSerial 0
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 41
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 2mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 1 Single TT
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0001 1x 1 bytes
    bInterval 12
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 1
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 2 TT per port
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0001 1x 1 bytes
    bInterval 12
    Hub Descriptor:
    bLength 9
    bDescriptorType 41
    nNbrPorts 4
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
    bPwrOn2PwrGood 50 * 2 milli seconds
    bHubContrCurrent 1 milli Ampere
    DeviceRemovable 0x00
    PortPwrCtrlMask 0xff
    Hub Port Status:
    Port 1: 0000.0100 power
    Port 2: 0000.0100 power
    Port 3: 0000.0100 power
    Port 4: 0000.0100 power
    Device Qualifier (for other device speed):
    bLength 10
    bDescriptorType 6
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 0 Full speed (or root) hub
    bMaxPacketSize0 64
    bNumConfigurations 1
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 9 Hub
    bDeviceSubClass 0
    bDeviceProtocol 1 Single TT
    bMaxPacketSize0 64
    idVendor 0x1d6b Linux Foundation
    idProduct 0x0002 2.0 root hub
    bcdDevice 4.14
    iManufacturer 3 Linux 4.14.67-g3c5cccdc-dirty xhci-hcd
    iProduct 2 xHCI Host Controller
    iSerial 1 xhci-hcd.0.auto
    bNumConfigurations 1
    Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 25
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xe0
    Self Powered
    Remote Wakeup
    MaxPower 0mA
    Interface Descriptor:
    bLength 9
    bDescriptorType 4
    bInterfaceNumber 0
    bAlternateSetting 0
    bNumEndpoints 1
    bInterfaceClass 9 Hub
    bInterfaceSubClass 0
    bInterfaceProtocol 0 Full speed (or root) hub
    iInterface 0
    Endpoint Descriptor:
    bLength 7
    bDescriptorType 5
    bEndpointAddress 0x81 EP 1 IN
    bmAttributes 3
    Transfer Type Interrupt
    Synch Type None
    Usage Type Data
    wMaxPacketSize 0x0004 1x 4 bytes
    bInterval 12
    Hub Descriptor:
    bLength 9
    bDescriptorType 41
    nNbrPorts 1
    wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
    bPwrOn2PwrGood 10 * 2 milli seconds
    bHubContrCurrent 0 milli Ampere
    DeviceRemovable 0x00
    PortPwrCtrlMask 0xff
    Hub Port Status:
    Port 1: 0000.0507 highspeed power suspend enable connect
    can't get device qualifier: Resource temporarily unavailable
    can't get debug descriptor: Resource temporarily unavailable
    Device Status: 0x0001
    Self Powered

  • Enumeration looks fine.

    This is my understanding, please evaluate it for its validity:

    I think, VBUS_DET needs to be connected to Upstream USB VBUS, even in self powered removable usecase(I understand from this statement:
    "If perform a reconnection to the usb connector, then the hub can be enumerated and everything goes well.").Please see this link section "Self-Powered Mode: ": ww1.microchip.com/.../Schematic Checklist USB2514B QFN Rev A.pdf

    Still you can have self powered, but use VBUS from Host(enabled through DRVVBUS), for the VBUS_DET pin to be notified and in return for the hub to give connect event in D+ line.

    I assume not all slaves have this VBUS_DET even in self powered use case(may be they dont go to sleep). So it is assumed to keep DRVVBUS unconnected.

    But for self powered detachable usecase(also with hub going for sleep), we can connect DRVVBUS to a VBUS enable circuitry(since anyway USB hub uses it for sensing host connection)
  • I think Dwarakesh is on the right track.

    All USB devices MUST be aware of the state of VBUS. Note from the USB specification that effectively all attach and detach timing is started at the application or removal of VBUS. Even self-powered devices must use some method for VBUS detect.

    On another note, even if the hub does enter suspend after 3ms (as per spec), a USB reset from the Host should wake it up. I see the log reports that the reset is not being completed; it would be interesting to see if the reset is propagating to the bus or not. This could be easily verified with a scope. This might not matter if the VBUS detect issue is corrected.