Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor

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
Cc: stable <stable@kernel.org>
Signed-off-by: Johannes Brüderl <johannes.bruederl@gmail.com>
Link: https://patch.msgid.link/20251207090220.14807-1-johannes.bruederl@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Johannes Brüderl and committed by
Greg Kroah-Hartman
2740ac33 1d32389d

+11
+5
drivers/usb/core/config.c
··· 1040 1040 __u8 cap_type; 1041 1041 int ret; 1042 1042 1043 + if (dev->quirks & USB_QUIRK_NO_BOS) { 1044 + dev_dbg(ddev, "skipping BOS descriptor\n"); 1045 + return -ENOMSG; 1046 + } 1047 + 1043 1048 bos = kzalloc(sizeof(*bos), GFP_KERNEL); 1044 1049 if (!bos) 1045 1050 return -ENOMEM;
+3
drivers/usb/core/quirks.c
··· 450 450 { USB_DEVICE(0x0c45, 0x7056), .driver_info = 451 451 USB_QUIRK_IGNORE_REMOTE_WAKEUP }, 452 452 453 + /* Elgato 4K X - BOS descriptor fetch hangs at SuperSpeed Plus */ 454 + { USB_DEVICE(0x0fd9, 0x009b), .driver_info = USB_QUIRK_NO_BOS }, 455 + 453 456 /* Sony Xperia XZ1 Compact (lilac) smartphone in fastboot mode */ 454 457 { USB_DEVICE(0x0fce, 0x0dde), .driver_info = USB_QUIRK_NO_LPM }, 455 458
+3
include/linux/usb/quirks.h
··· 75 75 /* short SET_ADDRESS request timeout */ 76 76 #define USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT BIT(16) 77 77 78 + /* skip BOS descriptor request */ 79 + #define USB_QUIRK_NO_BOS BIT(17) 80 + 78 81 #endif /* __LINUX_USB_QUIRKS_H */