]> git.ipfire.org Git - thirdparty/linux.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>
Wed, 7 Jan 2026 16:07:00 +0000 (17:07 +0100)
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 baf5bc844b6ffadcac6e27e559c7c025c3fe4ca1..2bb1ceb9d621a343febbb6198c87ee5842b2039c 100644 (file)
@@ -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 -ENOMSG;
+       }
+
        bos = kzalloc(sizeof(*bos), GFP_KERNEL);
        if (!bos)
                return -ENOMEM;
index 47f589c4104a3961da5d8df2fc4b28a9ea950575..c4d85089d19b130fa97a19ff9542b13a4088dd53 100644 (file)
@@ -450,6 +450,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 */