public inbox for linux-usb@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
@ 2025-12-07  0:00 Johannes Brüderl
  2025-12-07  0:15 ` Greg KH
  2025-12-07  0:37 ` [PATCH] " Michal Pecio
  0 siblings, 2 replies; 19+ messages in thread
From: Johannes Brüderl @ 2025-12-07  0:00 UTC (permalink / raw)
  To: linux-usb; +Cc: gregkh, Johannes Brüderl

Add USB_QUIRK_NO_BOS quirk flag to skip requesting the BOS descriptor
for devices that cannot handle it.

Add Elgato 4K X (0fd9:009b) to the quirk table. This device hangs when
the BOS descriptor is requested at SuperSpeed Plus (10Gbps).

Link: https://bugzilla.kernel.org/show_bug.cgi?id=220027
Signed-off-by: Johannes Brüderl <johannes.bruederl@gmail.com>
---
Before (device hangs at SuperSpeed Plus, then re-enumerates at lower speed
with different product ID 009c):

[    3.284990] usb 2-2: new SuperSpeed Plus Gen 2x1 USB device number 2 using xhci_hcd
[    8.574542] usb 2-2: unable to get BOS descriptor or descriptor too short
[    8.600018] usb 2-2: unable to read config index 0 descriptor/start: -71
[    8.600027] usb 2-2: can't read configurations, error -71
[    8.998412] usb 2-2: Device not responding to setup address.
[    9.215157] usb 2-2: Device not responding to setup address.
[    9.422737] usb 2-2: device not accepting address 3, error -71
[   10.990897] usb 2-2: new SuperSpeed USB device number 5 using xhci_hcd
[   11.065869] usb 2-2: LPM exit latency is zeroed, disabling LPM.
[   11.152244] usb 2-2: New USB device found, idVendor=0fd9, idProduct=009c

After (device enumerates correctly at SuperSpeed Plus):

[    3.297159] usb 2-2: new SuperSpeed Plus Gen 2x1 USB device number 2 using xhci_hcd
[    3.354248] usb 2-2: skipping BOS descriptor
[    3.432917] usb 2-2: New USB device found, idVendor=0fd9, idProduct=009b
[    3.432927] usb 2-2: Product: Elgato 4K X

 drivers/usb/core/config.c  | 5 +++++
 drivers/usb/core/quirks.c  | 3 +++
 include/linux/usb/quirks.h | 3 +++
 3 files changed, 11 insertions(+)

diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
index baf5bc844b6f..8fa3a486d038 100644
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -1040,6 +1040,11 @@ int usb_get_bos_descriptor(struct usb_device *dev)
 	__u8 cap_type;
 	int ret;

+	if (dev->quirks & USB_QUIRK_NO_BOS) {
+		dev_dbg(ddev, "skipping BOS descriptor\n");
+		return 0;
+	}
+
 	bos = kzalloc(sizeof(*bos), GFP_KERNEL);
 	if (!bos)
 		return -ENOMEM;
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 47f589c4104a..69ec914e5f45 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -581,6 +581,9 @@ static const struct usb_device_id usb_quirk_list[] = {
 	/* INTEL VALUE SSD */
 	{ USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },

+	/* Elgato 4K X - BOS descriptor fetch hangs at SuperSpeed Plus */
+	{ USB_DEVICE(0x0fd9, 0x009b), .driver_info = USB_QUIRK_NO_BOS },
+
 	{ }  /* terminating entry must be last */
 };

diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
index 59409c1fc3de..2f7bd2fdc616 100644
--- a/include/linux/usb/quirks.h
+++ b/include/linux/usb/quirks.h
@@ -75,4 +75,7 @@
 /* short SET_ADDRESS request timeout */
 #define USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT	BIT(16)

+/* skip BOS descriptor request */
+#define USB_QUIRK_NO_BOS			BIT(17)
+
 #endif /* __LINUX_USB_QUIRKS_H */
--
2.52.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2026-01-07 16:06 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-07  0:00 [PATCH] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor Johannes Brüderl
2025-12-07  0:15 ` Greg KH
2025-12-07  1:20   ` [PATCH v2] " Johannes Brüderl
2025-12-07  6:19     ` Lars Melin
2025-12-07  9:02       ` [PATCH v3 1/1] " Johannes Brüderl
2026-01-07 16:06         ` Greg KH
2025-12-07  7:40     ` [PATCH v2] " Michal Pecio
2025-12-07  9:22       ` Johannes Brüderl
2025-12-07  9:45         ` Michal Pecio
2025-12-07 10:47           ` Johannes Brüderl
2025-12-07 11:00             ` Greg KH
2025-12-07 21:12               ` Greg KH
2025-12-07 22:06                 ` Michal Pecio
2025-12-08  8:58                 ` Oliver Neukum
2025-12-08 20:46                   ` Greg KH
2025-12-28 12:54                     ` Johannes Brüderl
2025-12-28 13:18                       ` Greg KH
2025-12-07  0:37 ` [PATCH] " Michal Pecio
2025-12-07  0:59   ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox