From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Thu, 10 Mar 2016 20:13:25 +0100 Subject: [U-Boot] [PATCH 5/6] usb: Don't reset the USB hub a 2nd time In-Reply-To: <1457625012-1268-6-git-send-email-sr@denx.de> References: <1457625012-1268-1-git-send-email-sr@denx.de> <1457625012-1268-6-git-send-email-sr@denx.de> Message-ID: <56E1C755.70405@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 10-03-16 16:50, Stefan Roese wrote: > 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. I see no reason to make the removal conditional, I believe that this is some relic workaround for likely long fixed bugs and we should just remove it completely (for v2016.07). Regards, Hans > > Signed-off-by: Stefan Roese > Cc: Simon Glass > Cc: Hans de Goede > Cc: Stephen Warren > Cc: Marek Vasut > --- > > 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); > } >