twx-linux/include/linux/usb
Hardik Gajjar 3adcbec4dc usb: new quirk to reduce the SET_ADDRESS request timeout
[ Upstream commit 5a1ccf0c72cf917ff3ccc131d1bb8d19338ffe52 ]

This patch introduces a new USB quirk,
USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT, which modifies the timeout value
for the SET_ADDRESS request. The standard timeout for USB request/command
is 5000 ms, as recommended in the USB 3.2 specification (section 9.2.6.1).

However, certain scenarios, such as connecting devices through an APTIV
hub, can lead to timeout errors when the device enumerates as full speed
initially and later switches to high speed during chirp negotiation.

In such cases, USB analyzer logs reveal that the bus suspends for
5 seconds due to incorrect chirp parsing and resumes only after two
consecutive timeout errors trigger a hub driver reset.

Packet(54) Dir(?) Full Speed J(997.100 us) Idle(  2.850 us)
_______| Time Stamp(28 . 105 910 682)
_______|_____________________________________________________________Ch0
Packet(55) Dir(?) Full Speed J(997.118 us) Idle(  2.850 us)
_______| Time Stamp(28 . 106 910 632)
_______|_____________________________________________________________Ch0
Packet(56) Dir(?) Full Speed J(399.650 us) Idle(222.582 us)
_______| Time Stamp(28 . 107 910 600)
_______|_____________________________________________________________Ch0
Packet(57) Dir Chirp J( 23.955 ms) Idle(115.169 ms)
_______| Time Stamp(28 . 108 532 832)
_______|_____________________________________________________________Ch0
Packet(58) Dir(?) Full Speed J (Suspend)( 5.347 sec) Idle(  5.366 us)
_______| Time Stamp(28 . 247 657 600)
_______|_____________________________________________________________Ch0

This 5-second delay in device enumeration is undesirable, particularly
in automotive applications where quick enumeration is crucial
(ideally within 3 seconds).

The newly introduced quirks provide the flexibility to align with a
3-second time limit, as required in specific contexts like automotive
applications.

By reducing the SET_ADDRESS request timeout to 500 ms, the
system can respond more swiftly to errors, initiate rapid recovery, and
ensure efficient device enumeration. This change is vital for scenarios
where rapid smartphone enumeration and screen projection are essential.

To use the quirk, please write "vendor_id:product_id:p" to
/sys/bus/usb/drivers/hub/module/parameter/quirks

For example,
echo "0x2c48:0x0132:p" > /sys/bus/usb/drivers/hub/module/parameters/quirks"

Signed-off-by: Hardik Gajjar <hgajjar@de.adit-jv.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20231027152029.104363-2-hgajjar@de.adit-jv.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-27 17:11:36 +02:00
..
audio-v2.h
audio-v3.h
audio.h
c67x00.h
ccid.h
cdc_ncm.h
cdc-wdm.h
cdc.h
ch9.h USB: Remove remnants of Wireless USB and UWB 2023-08-09 14:17:06 +02:00
chipidea.h usb: chipidea: add workaround for chipidea PEC bug 2023-08-09 14:16:06 +02:00
composite.h USB: Remove remnants of Wireless USB and UWB 2023-08-09 14:17:06 +02:00
ehci_def.h
ehci_pdriver.h
ehci-dbgp.h
ezusb.h
functionfs.h
g_hid.h
gadget_configfs.h
gadget.h usb: gadget: Add function wakeup support 2023-03-29 10:27:01 +02:00
hcd.h usb: xhci: Add timeout argument in address_device USB HCD callback 2024-04-27 17:11:36 +02:00
input.h
iowarrior.h
irda.h
isp116x.h
isp1301.h
isp1362.h
m66592.h
midi-v2.h ALSA: usb-audio: Use __le16 for 16bit USB descriptor fields 2023-06-05 16:48:54 +02:00
musb-ux500.h
musb.h ARM/musb: omap2: Remove global GPIO numbers from TUSB6010 2023-05-24 15:01:59 +02:00
net2280.h
of.h
ohci_pdriver.h
onboard_hub.h
otg-fsm.h
otg.h
pd_ado.h
pd_bdo.h
pd_ext_sdb.h
pd_vdo.h
pd.h
phy_companion.h
phy.h Revert "usb: phy: add usb phy notify port status API" 2023-12-03 07:33:08 +01:00
quirks.h usb: new quirk to reduce the SET_ADDRESS request timeout 2024-04-27 17:11:36 +02:00
r8a66597.h
r8152.h r8152: add vendor/device ID pair for ASUS USB-C2500 2023-12-20 17:01:42 +01:00
renesas_usbhs.h
rndis_host.h
role.h Revert "usb: common: usb-conn-gpio: Set last role to unknown before initial detection" 2023-06-15 11:30:35 +02:00
rzv2m_usb3drd.h usb: gadget: Add support for RZ/V2M USB3DRD driver 2023-01-25 15:48:16 +01:00
serial.h USB: serial: return errors from break handling 2023-06-07 17:00:23 +02:00
sl811.h
storage.h
tcpci.h usb: typec: tcpci: clear the fault status bit 2023-08-22 14:44:52 +02:00
tcpm.h usb: typec: tcpm: Add callbacks to mitigate wakeups due to contaminant 2023-01-17 17:29:23 +01:00
tegra_usb_phy.h
typec_altmode.h usb: typec: bus: verify partner exists in typec_altmode_attention 2023-08-22 14:44:28 +02:00
typec_dp.h
typec_mux.h usb: typec: mux: fix static inline syntax error 2023-06-01 07:09:45 +01:00
typec_retimer.h
typec_tbt.h
typec.h
uas.h
ulpi.h
usb338x.h
usb_phy_generic.h
usbnet.h
uvc.h usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name 2023-01-31 09:40:43 +01:00
webusb.h usb: gadget: Use correct APIs and data types for UUID handling 2023-01-31 10:37:29 +01:00
xhci-dbgp.h