[U-Boot] [PATCH 5/6] usb: Don't reset the USB hub a 2nd time

Stefan Roese
2016-03-10T15:50:11Z

Debugging has shown, that all USB hubs are being resetted twice while
USB scanning. This introduces additional delays and makes USB scanning
even more slow. Testing has shown that this 2nd USB hub reset doesn't
seem to be necessary.

This patch now removes this 2nd USB hub reset if CONFIG_USB_FAST_SCAN
is defined. Resulting in faster USB scan time. Here the current
number:

Without this patch:
=> time usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found

time: 6.319 seconds

With this patch:
=> time usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found

time: 3.777 seconds

So ~2.5 seconds of USB scanning time reduction.

Again, this 2nd reset 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 2nd reset completely.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Stephen Warren <swarren@nvidia.com>
Cc: Marek Vasut <marex@denx.de>
---

common/usb.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/common/usb.c b/common/usb.c
index c7b8b0e..b96a2f6 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -920,6 +920,11 @@ __weak int usb_alloc_device(struct usb_device *udev)
static int usb_hub_port_reset(struct usb_device *dev, struct usb_device *hub)
{
if (hub) {
+#if !defined(CONFIG_USB_FAST_SCAN)
+ /*
+ * Is this 2nd hub port reset necessary? The port has already
+ * been reset in usb_hub_port_connect_change() before.
+ */
unsigned short portstatus;
int err;

@@ -929,6 +934,7 @@ static int usb_hub_port_reset(struct usb_device *dev, struct usb_device *hub)
printf("\n Couldn't reset port %i\n", dev->portnr);
return err;
}
+#endif
} else {
usb_reset_root_port(dev);
}
--
2.7.2