On 04/02/2016 11:21 PM, Hans de Goede wrote: > Hi, Hi!
> On 04/02/2016 12:22 AM, Marek Vasut wrote: >> On 03/15/2016 01:59 PM, Stefan Roese wrote: >>> This patch changes the USB port scanning procedure and timeout >>> handling in the following ways: >>> >>> a) >>> The power-on delay in usb_hub_power_on() is now reduced to a value of >>> max(100ms, "hub->desc.bPwrOn2PwrGood * 2"). The code does not wait >>> using mdelay, instead usb_hub_power_on() will wait before querying >>> the device in the scanning loop later. The total timeout for this >>> hub, which is 1 second + "hub->desc.bPwrOn2PwrGood * 2" is calculated >>> and will be used in the following per-port scanning loop as the timeout >>> to detect active USB devices on this hub. >>> >>> b) >>> Don't delay the minimum delay (for power to stabilize) in >>> usb_hub_power_on(). Instead skip querying these devices in the scannig >>> loop until the delay time is reached. >>> >>> c) >>> The ports are now scanned in a quasi parallel way. The current code did >>> wait for each (unconnected) port to reach its timeout and only then >>> continue with the next port. This patch now changes this to scan all >>> ports of all USB hubs quasi simultaneously. For this, all ports are >>> added >>> to a scanning list. This list is scanned until all ports are ready >>> by either a) reaching the connection timeout (calculated earlier), or >>> by b) detecting a USB device. This results in a faster USB scan time as >>> the recursive scanning of USB hubs connected to the hub that's currently >>> being scanned will start earlier. >>> >>> One small functional change to the original code is, that ports with >>> overcurrent detection will now get rescanned multiple times >>> (PORT_OVERCURRENT_MAX_SCAN_COUNT). >>> >>> Without this patch: >>> starting USB... >>> USB0: USB EHCI 1.00 >>> scanning bus 0 for devices... 9 USB Device(s) found >>> >>> time: 20.163 seconds >>> >>> With this patch: >>> starting USB... >>> USB0: USB EHCI 1.00 >>> scanning bus 0 for devices... 9 USB Device(s) found >>> >>> time: 1.822 seconds >>> >>> So ~18.3 seconds of USB scanning time reduction. >>> >>> Signed-off-by: Stefan Roese <s...@denx.de> >>> Acked-by: Hans de Goede <hdego...@redhat.com> >>> Tested-by: Stephen Warren <swar...@nvidia.com> >> >> This breaks DWC2 on SoCkit, I can no longer detect any USB device. >> USB works without this patch though. Ideas? > > Have you tried simply adding a large sleep before the > initial uart, or doing an "usb reset" after the initial > scan ? Yeah, that doesn't help. But I also sent a few fixes for the DWC2 controller, so let's see. I also finally got Stefan a working board, so he can start poking around :) > The biggest change here is the change in timing ... > > Also try defining debug printf in usb_hub.c and see what > output you get ? I'll be offloading this to Stefan :) > Regards, > > Hans -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot