Skip to content

Commit

Permalink
usb: hub: Per-port setting to reduce TRSTRCY to 10 ms
Browse files Browse the repository at this point in the history
Currently, the USB hub core waits for 50 ms after enumerating the
device. This was added to help "some high speed devices" to
enumerate (b789696 "[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>
  • Loading branch information
drinkcat authored and gregkh committed May 31, 2018
1 parent 2524422 commit aa071a9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Documentation/ABI/testing/sysfs-bus-usb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion drivers/usb/core/hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
3 changes: 3 additions & 0 deletions include/linux/usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down

0 comments on commit aa071a9

Please sign in to comment.