Hi All, I was trying to test PCIe USB card (Inateck) connected to AM64 EVM and J7200 EVM. Inateck uses Renesas uPD720201 USB3 host controller. So if I connect USB pendrive and then boot the board (cold plug), I don't see the pendrive getting detected. But if I remove and plug it again, it gets detected. For the cold plug case, I see this message "usb usb1-port3: couldn't allocate usb_device" It actually fails in xhci_alloc_dev()->xhci_queue_slot_control()->queue_command()->XHCI_STATE_HALTED I'm not familiar with xhci but it looks like port event is invoked before the controller is fully initialized (?). I tried the following hack which kind of changes the sequence where xhci_start() and xhci_run_finished() is invoked before port_event() and with that I could see the pendrive enumerate successfully in cold plug case. diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 228e3d4e1a9f..d19f27c46c6f 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1077,7 +1077,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) INIT_DELAYED_WORK(&hub->init_work, hub_init_func2); queue_delayed_work(system_power_efficient_wq, &hub->init_work, - msecs_to_jiffies(delay)); + msecs_to_jiffies(150)); /* Suppress autosuspend until init is done */ usb_autopm_get_interface_no_resume( Irrespective of the delay the port status looks correct and the modified delay only helps to change the flow. Adding other prints and delays also change the sequence and seems to detect the connected pendrive. Can someone provide hints on how to fix this properly? Thanks in advance! Regards Kishon