]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
authorJohannes Brüderl <johannes.bruederl@gmail.com>
Sun, 7 Dec 2025 09:02:20 +0000 (10:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Jan 2026 10:18:44 +0000 (11:18 +0100)
commit 2740ac33c87b3d0dfa022efd6ba04c6261b1abbd upstream.

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>
drivers/usb/core/config.c
drivers/usb/core/quirks.c
include/linux/usb/quirks.h

index 9565d14d7c071d896c6ff8bf2075d62b48909991..bbc3cb1ba7b5c609572f81285b0c85751808c53b 100644 (file)
@@ -1004,6 +1004,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 -ENOMSG;
+       }
+
        bos = kzalloc(sizeof(*bos), GFP_KERNEL);
        if (!bos)
                return -ENOMEM;
index c322d0c1d965a82adc05c5b7de8e892c7f2d5173..323a949bbb050dbb7824430ed4685f3c99390a2f 100644 (file)
@@ -447,6 +447,9 @@ static const struct usb_device_id usb_quirk_list[] = {
        { USB_DEVICE(0x0c45, 0x7056), .driver_info =
                        USB_QUIRK_IGNORE_REMOTE_WAKEUP },
 
+       /* Elgato 4K X - BOS descriptor fetch hangs at SuperSpeed Plus */
+       { USB_DEVICE(0x0fd9, 0x009b), .driver_info = USB_QUIRK_NO_BOS },
+
        /* Sony Xperia XZ1 Compact (lilac) smartphone in fastboot mode */
        { USB_DEVICE(0x0fce, 0x0dde), .driver_info = USB_QUIRK_NO_LPM },
 
index 59409c1fc3dee7b20112867615f9a7a92b65fa17..2f7bd2fdc6164b7d0ff3fd56b4f1ba7b5f496e05 100644 (file)
@@ -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 */