OSDN Git Service

usb: hub: Per-port setting to reduce TRSTRCY to 10 ms
authorNicolas Boichat <drinkcat@chromium.org>
Mon, 28 May 2018 06:32:19 +0000 (14:32 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 31 May 2018 10:48:17 +0000 (12:48 +0200)
Currently, the USB hub core waits for 50 ms after enumerating the
device. This was added to help "some high speed devices" to
enumerate (b789696af8 "[PATCH] USB: relax usbcore reset timings").

On some devices, the time-to-active is important, so we provide
a per-port option to reduce the time to what the USB specification
requires: 10 ms.

Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/ABI/testing/sysfs-bus-usb
drivers/usb/core/hub.c
include/linux/usb.h

index a31a66d..08d456e 100644 (file)
@@ -206,6 +206,10 @@ Description:
                   using /sys/module/usbcore/parameters/old_scheme_first, but
                   it is often not desirable as the new scheme was introduced to
                   increase compatibility with more devices.
+                - Bit 1 reduces TRSTRCY to the 10 ms that are required by the
+                  USB 2.0 specification, instead of the 50 ms that are normally
+                  used to help make enumeration work better on some high speed
+                  devices.
 
 What:          /sys/bus/usb/devices/.../(hub interface)/portX/over_current_count
 Date:          February 2018
index f900f66..26c2438 100644 (file)
@@ -2879,7 +2879,11 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
 done:
        if (status == 0) {
                /* TRSTRCY = 10 ms; plus some extra */
-               msleep(10 + 40);
+               if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM)
+                       usleep_range(10000, 12000);
+               else
+                       msleep(10 + 40);
+
                if (udev) {
                        struct usb_hcd *hcd = bus_to_hcd(udev->bus);
 
index 2ade179..4cdd515 100644 (file)
@@ -496,6 +496,9 @@ enum usb_port_connect_type {
 /* For the given port, prefer the old (faster) enumeration scheme. */
 #define USB_PORT_QUIRK_OLD_SCHEME      BIT(0)
 
+/* Decrease TRSTRCY to 10ms during device enumeration. */
+#define USB_PORT_QUIRK_FAST_ENUM       BIT(1)
+
 /*
  * USB 2.0 Link Power Management (LPM) parameters.
  */