On complex USB infrastructures, with many hubs and therefore many (perhaps unconnected) ports, current U-Boot has a very long USB scanning time. On my current custom x86 board, this time is over 20 seconds!!! One of the biggest problems here is a 1 second delay (timeout) in usb_hub_configure() to check, if a USB device is connected to a port. As this is done for each port, this timeout sums up over all unconnected ports.
This patch removes this 1 seconds per port timeout from usb_hub_configure(). All my USB devices are still detected correctly on my platform. And I'm using 4 different USB keys right now. Including a problematic "Intenso Alu Line" key. Here the numbers for my current board: Without this patch: starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 9 USB Device(s) found time: 24.811 seconds With this patch: starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 9 USB Device(s) found time: 10.822 seconds So ~14 seconds of USB scanning time reduction. Again, this timeout is only removed if CONFIG_USB_FAST_SCAN is defined. Once more tests are done on multiple other platforms we can decide to remove this timeout completely. Signed-off-by: Stefan Roese <s...@denx.de> Cc: Simon Glass <s...@chromium.org> Cc: Hans de Goede <hdego...@redhat.com> Cc: Stephen Warren <swar...@nvidia.com> Cc: Marek Vasut <ma...@denx.de> --- common/usb_hub.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/usb_hub.c b/common/usb_hub.c index 660f4f4..780291f 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -478,7 +478,11 @@ static int usb_hub_configure(struct usb_device *dev) unsigned short portstatus, portchange; int ret; ulong start = get_timer(0); +#if defined(CONFIG_USB_FAST_SCAN) + uint delay = 0; +#else uint delay = CONFIG_SYS_HZ; +#endif #ifdef CONFIG_SANDBOX if (state_get_skip_delays()) -- 2.7.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot