* [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
* Re: [PATCH] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 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 0:37 ` [PATCH] " Michal Pecio 1 sibling, 1 reply; 19+ messages in thread From: Greg KH @ 2025-12-07 0:15 UTC (permalink / raw) To: Johannes Brüderl; +Cc: linux-usb On Sun, Dec 07, 2025 at 01:00:07AM +0100, Johannes Brüderl wrote: > 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 This feels like a USB spec violation :( > [ 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; > + } What is the downside of claiming to successfully reading the BOS descriptor, yet not having done that at all? Can we tear down the device properly? Show the information correctly through userspace tools? Shouldn't we return something like -ENOMSG instead? thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 0:15 ` Greg KH @ 2025-12-07 1:20 ` Johannes Brüderl 2025-12-07 6:19 ` Lars Melin 2025-12-07 7:40 ` [PATCH v2] " Michal Pecio 0 siblings, 2 replies; 19+ messages in thread From: Johannes Brüderl @ 2025-12-07 1:20 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> --- v2: Return -ENOMSG instead of 0 to properly indicate no BOS data. Tested unbind/rebind via /sys/bus/usb/drivers/usb/unbind - works correctly. Userspace tools (lsusb) handle missing BOS gracefully (no BOS section shown). 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 lsusb -t output: /: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M |__ Port 002: Dev 003, If 0, Class=Video, Driver=uvcvideo, 10000M 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..2bb1ceb9d621 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 -ENOMSG; + } + 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
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 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 2025-12-07 7:40 ` [PATCH v2] " Michal Pecio 1 sibling, 1 reply; 19+ messages in thread From: Lars Melin @ 2025-12-07 6:19 UTC (permalink / raw) To: Johannes Brüderl, linux-usb; +Cc: gregkh On 2025-12-07 08:20, Johannes Brüderl wrote: > 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). // snip > /* 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 */ Hi Johannes, it looks like the list was sorted in vid:pid ascending order before you added your entry Lars ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v3 1/1] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 6:19 ` Lars Melin @ 2025-12-07 9:02 ` Johannes Brüderl 2026-01-07 16:06 ` Greg KH 0 siblings, 1 reply; 19+ messages in thread From: Johannes Brüderl @ 2025-12-07 9:02 UTC (permalink / raw) To: linux-usb; +Cc: gregkh, larsm17, 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> --- Hi Lars, you are right, good catch! This should be correctly sorted now. v3: Move quirk entry to correct position in sorted VID:PID order. v2: Return -ENOMSG instead of 0 to properly indicate no BOS data. BR, Johannes 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..2bb1ceb9d621 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 -ENOMSG; + } + 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..c4d85089d19b 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -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 }, 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
* Re: [PATCH v3 1/1] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 9:02 ` [PATCH v3 1/1] " Johannes Brüderl @ 2026-01-07 16:06 ` Greg KH 0 siblings, 0 replies; 19+ messages in thread From: Greg KH @ 2026-01-07 16:06 UTC (permalink / raw) To: Johannes Brüderl; +Cc: linux-usb, larsm17 On Sun, Dec 07, 2025 at 10:02:20AM +0100, Johannes Brüderl wrote: > 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> > --- > Hi Lars, > you are right, good catch! This should be correctly sorted now. > > v3: Move quirk entry to correct position in sorted VID:PID order. > v2: Return -ENOMSG instead of 0 to properly indicate no BOS data. Ok, in playing with this some more, I think this is the best thing for now. I'll go queue this up now. thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 1:20 ` [PATCH v2] " Johannes Brüderl 2025-12-07 6:19 ` Lars Melin @ 2025-12-07 7:40 ` Michal Pecio 2025-12-07 9:22 ` Johannes Brüderl 1 sibling, 1 reply; 19+ messages in thread From: Michal Pecio @ 2025-12-07 7:40 UTC (permalink / raw) To: Johannes Brüderl; +Cc: linux-usb, gregkh On Sun, 7 Dec 2025 02:20:59 +0100, Johannes Brüderl wrote: > v2: Return -ENOMSG instead of 0 to properly indicate no BOS data. Probably good idea. > Tested unbind/rebind via /sys/bus/usb/drivers/usb/unbind - works > correctly. Userspace tools (lsusb) handle missing BOS gracefully > (no BOS section shown). I thought that lsusb never shows BOS, unless you run it as root, and then it issues control requests to the device to fetch it directly? And the other user tried it and reported that it worked just fine. Do you see the same behavior on yours? > 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. I wonder if this means that the BOS descriptor returned during SuperSpeed enumeration is bogus? What BOS shows up if you run 'lsusb -v' as root after the device completes enumeratation at SuperSpeed? ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 7:40 ` [PATCH v2] " Michal Pecio @ 2025-12-07 9:22 ` Johannes Brüderl 2025-12-07 9:45 ` Michal Pecio 0 siblings, 1 reply; 19+ messages in thread From: Johannes Brüderl @ 2025-12-07 9:22 UTC (permalink / raw) To: Michal Pecio; +Cc: linux-usb, gregkh On Sun, Dec 7, 2025 at 8:40 AM Michal Pecio <michal.pecio@gmail.com> wrote: > > On Sun, 7 Dec 2025 02:20:59 +0100, Johannes Brüderl wrote: > > v2: Return -ENOMSG instead of 0 to properly indicate no BOS data. > > Probably good idea. > > > Tested unbind/rebind via /sys/bus/usb/drivers/usb/unbind - works > > correctly. Userspace tools (lsusb) handle missing BOS gracefully > > (no BOS section shown). > > I thought that lsusb never shows BOS, unless you run it as root, and > then it issues control requests to the device to fetch it directly? > > And the other user tried it and reported that it worked just fine. > Do you see the same behavior on yours? > > > 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. > > I wonder if this means that the BOS descriptor returned during > SuperSpeed enumeration is bogus? > > What BOS shows up if you run 'lsusb -v' as root after the device > completes enumeratation at SuperSpeed? Hi Michal, thanks, I forgot to use root previously when running lsusb -v. Here's the BOS Descriptor section when running w/ root. This is without this patch, so it "reconnected" with SuperSpeed (5Gbps). Binary Object Store Descriptor: bLength 5 bDescriptorType 15 wTotalLength 0x0016 bNumDeviceCaps 2 USB 2.0 Extension Device Capability: bLength 7 bDescriptorType 16 bDevCapabilityType 2 bmAttributes 0x00000000 (Missing must-be-set LPM bit!) SuperSpeed USB Device Capability: bLength 10 bDescriptorType 16 bDevCapabilityType 3 bmAttributes 0x00 wSpeedsSupported 0x000e Device can operate at Full Speed (12Mbps) Device can operate at High Speed (480Mbps) Device can operate at SuperSpeed (5Gbps) bFunctionalitySupport 3 Lowest fully-functional device speed is SuperSpeed (5Gbps) bU1DevExitLat 0 micro seconds bU2DevExitLat 0 micro seconds (Missing must-be-set LPM bit!) seems to be weird? As it looks like just nulled data. The device seems to generally show problematic behavior when it comes to the BOS, both on SuperSpeed Plus and SuperSpeed. BR, Johannes ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 9:22 ` Johannes Brüderl @ 2025-12-07 9:45 ` Michal Pecio 2025-12-07 10:47 ` Johannes Brüderl 0 siblings, 1 reply; 19+ messages in thread From: Michal Pecio @ 2025-12-07 9:45 UTC (permalink / raw) To: Johannes Brüderl; +Cc: linux-usb, gregkh On Sun, 7 Dec 2025 10:22:41 +0100, Johannes Brüderl wrote: > Here's the BOS Descriptor section when running w/ root. > This is without this patch, so it "reconnected" with SuperSpeed (5Gbps). > > Binary Object Store Descriptor: > bLength 5 > bDescriptorType 15 > wTotalLength 0x0016 > bNumDeviceCaps 2 > USB 2.0 Extension Device Capability: > bLength 7 > bDescriptorType 16 > bDevCapabilityType 2 > bmAttributes 0x00000000 > (Missing must-be-set LPM bit!) > SuperSpeed USB Device Capability: > bLength 10 > bDescriptorType 16 > bDevCapabilityType 3 > bmAttributes 0x00 > wSpeedsSupported 0x000e > Device can operate at Full Speed (12Mbps) > Device can operate at High Speed (480Mbps) > Device can operate at SuperSpeed (5Gbps) > bFunctionalitySupport 3 > Lowest fully-functional device speed is SuperSpeed (5Gbps) > bU1DevExitLat 0 micro seconds > bU2DevExitLat 0 micro seconds > > (Missing must-be-set LPM bit!) seems to be weird? As it looks like > just nulled data. OK, so it's broken during enumeration and after enumeration. But that's the "fallback" case after hanging during SS+ enumeration, which we would like to prevent from happening. What about 5gbps ports, does it work correctly at SS or still report zero LPM? And running at SS+ with the patch applied, does the device produce sensible BOS descriptor? The previous one did. What if you extend the patch to also apply at SS? It won't fix LPM during enumeration, but would it fix the descriptor seen by lsusb? ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 9:45 ` Michal Pecio @ 2025-12-07 10:47 ` Johannes Brüderl 2025-12-07 11:00 ` Greg KH 0 siblings, 1 reply; 19+ messages in thread From: Johannes Brüderl @ 2025-12-07 10:47 UTC (permalink / raw) To: Michal Pecio; +Cc: linux-usb, gregkh On Sun, Dec 7, 2025 at 10:45 AM Michal Pecio <michal.pecio@gmail.com> wrote: > > On Sun, 7 Dec 2025 10:22:41 +0100, Johannes Brüderl wrote: > > Here's the BOS Descriptor section when running w/ root. > > This is without this patch, so it "reconnected" with SuperSpeed (5Gbps). > > > > Binary Object Store Descriptor: > > bLength 5 > > bDescriptorType 15 > > wTotalLength 0x0016 > > bNumDeviceCaps 2 > > USB 2.0 Extension Device Capability: > > bLength 7 > > bDescriptorType 16 > > bDevCapabilityType 2 > > bmAttributes 0x00000000 > > (Missing must-be-set LPM bit!) > > SuperSpeed USB Device Capability: > > bLength 10 > > bDescriptorType 16 > > bDevCapabilityType 3 > > bmAttributes 0x00 > > wSpeedsSupported 0x000e > > Device can operate at Full Speed (12Mbps) > > Device can operate at High Speed (480Mbps) > > Device can operate at SuperSpeed (5Gbps) > > bFunctionalitySupport 3 > > Lowest fully-functional device speed is SuperSpeed (5Gbps) > > bU1DevExitLat 0 micro seconds > > bU2DevExitLat 0 micro seconds > > > > (Missing must-be-set LPM bit!) seems to be weird? As it looks like > > just nulled data. > > OK, so it's broken during enumeration and after enumeration. > > But that's the "fallback" case after hanging during SS+ enumeration, > which we would like to prevent from happening. What about 5gbps ports, > does it work correctly at SS or still report zero LPM? > > And running at SS+ with the patch applied, does the device produce > sensible BOS descriptor? The previous one did. > > What if you extend the patch to also apply at SS? It won't fix LPM > during enumeration, but would it fix the descriptor seen by lsusb? Hello Michal, very good questions.. the result was surprising to me. 1) How does it do on 5GBps port? Without patch: [ 1522.177297] usb 6-1: new SuperSpeed USB device number 4 using xhci_hcd [ 1527.440481] usb 6-1: unable to get BOS descriptor or descriptor too short [ 1527.465514] usb 6-1: unable to read config index 0 descriptor/start: -71 [ 1527.465520] usb 6-1: can't read configurations, error -71 [ 1527.648035] usb 6-1: new SuperSpeed USB device number 5 using xhci_hcd [ 1527.839295] usb 6-1: LPM exit latency is zeroed, disabling LPM. Looks like the BOS descriptor cannot be read either. Any, very interesting: Binary Object Store Descriptor: bLength 5 bDescriptorType 15 wTotalLength 0x0016 bNumDeviceCaps 2 USB 2.0 Extension Device Capability: bLength 7 bDescriptorType 16 bDevCapabilityType 2 bmAttributes 0x00000000 (Missing must-be-set LPM bit!) SuperSpeed USB Device Capability: bLength 10 bDescriptorType 16 bDevCapabilityType 3 bmAttributes 0x00 wSpeedsSupported 0x000e Device can operate at Full Speed (12Mbps) Device can operate at High Speed (480Mbps) Device can operate at SuperSpeed (5Gbps) bFunctionalitySupport 3 Lowest fully-functional device speed is SuperSpeed (5Gbps) bU1DevExitLat 0 micro seconds bU2DevExitLat 0 micro seconds Very interesting - even reading it "manually" via lsusb - seems to fail, even at SS. 2) Does it produce a sensible BOS descriptor post-patch at SS+ ? It looks like it. Binary Object Store Descriptor: bLength 5 bDescriptorType 15 wTotalLength 0x002a bNumDeviceCaps 3 USB 2.0 Extension Device Capability: bLength 7 bDescriptorType 16 bDevCapabilityType 2 bmAttributes 0x0000f41e BESL Link Power Management (LPM) Supported Baseline BESL value 400 us Deep BESL value 10000 us SuperSpeed USB Device Capability: bLength 10 bDescriptorType 16 bDevCapabilityType 3 bmAttributes 0x00 wSpeedsSupported 0x000e Device can operate at Full Speed (12Mbps) Device can operate at High Speed (480Mbps) Device can operate at SuperSpeed (5Gbps) bFunctionalitySupport 1 Lowest fully-functional device speed is Full Speed (12Mbps) bU1DevExitLat 10 micro seconds bU2DevExitLat 2047 micro seconds SuperSpeedPlus USB Device Capability: bLength 20 bDescriptorType 16 bDevCapabilityType 10 bmAttributes 0x00000001 Sublink Speed Attribute count 2 Sublink Speed ID count 1 wFunctionalitySupport 0x1100 Min functional Speed Attribute ID: 0 Min functional RX lanes: 1 Min functional TX lanes: 1 bmSublinkSpeedAttr[0] 0x000a4030 Speed Attribute ID: 0 10Gb/s Symmetric RX SuperSpeedPlus bmSublinkSpeedAttr[1] 0x000a40b0 Speed Attribute ID: 0 10Gb/s Symmetric TX SuperSpeedPlus 3) What if I apply the patch to SS as well? Connect: [ 3.293251] usb 6-1: new SuperSpeed USB device number 2 using xhci_hcd [ 3.349030] usb 6-1: skipping BOS descriptor [ 3.429817] usb 6-1: New USB device found, idVendor=0fd9, idProduct=009c, bcdDevice= 0.02 [ 3.429825] usb 6-1: New USB device strings: Mfr=6, Product=7, SerialNumber=3 [ 3.429828] usb 6-1: Product: Elgato 4K X [ 3.429830] usb 6-1: Manufacturer: Elgato [ 3.429833] usb 6-1: SerialNumber: A7SNB517214G5K [ 9.019651] usb 6-1: 3:2: failed to get current value for ch 0 (-22) [ 9.028103] usb 6-1: Found UVC 1.00 device Elgato 4K X (0fd9:009c) sudo lsusb -v -d 0fd9:009c Binary Object Store Descriptor: bLength 5 bDescriptorType 15 wTotalLength 0x0016 bNumDeviceCaps 2 USB 2.0 Extension Device Capability: bLength 7 bDescriptorType 16 bDevCapabilityType 2 bmAttributes 0x00000000 (Missing must-be-set LPM bit!) SuperSpeed USB Device Capability: bLength 10 bDescriptorType 16 bDevCapabilityType 3 bmAttributes 0x00 wSpeedsSupported 0x000e Device can operate at Full Speed (12Mbps) Device can operate at High Speed (480Mbps) Device can operate at SuperSpeed (5Gbps) bFunctionalitySupport 3 Lowest fully-functional device speed is SuperSpeed (5Gbps) bU1DevExitLat 0 micro seconds bU2DevExitLat 0 micro seconds Again (Missing must-be-set LPM bit!). So.. if i summarize it correctly: on SS, BOS fetch seems to fail immediately when connecting, but also "later" when I use lsusb. But, on SS+, if i skip BOS fetch on connect, it works when done later... For what it's worth: I've recorded a few hours of Gameplay with the patch, and rebooted a couple times, it seems to do the trick. BR, Johannes ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 10:47 ` Johannes Brüderl @ 2025-12-07 11:00 ` Greg KH 2025-12-07 21:12 ` Greg KH 0 siblings, 1 reply; 19+ messages in thread From: Greg KH @ 2025-12-07 11:00 UTC (permalink / raw) To: Johannes Brüderl; +Cc: Michal Pecio, linux-usb On Sun, Dec 07, 2025 at 11:47:34AM +0100, Johannes Brüderl wrote: > On Sun, Dec 7, 2025 at 10:45 AM Michal Pecio <michal.pecio@gmail.com> wrote: > > > > On Sun, 7 Dec 2025 10:22:41 +0100, Johannes Brüderl wrote: > > > Here's the BOS Descriptor section when running w/ root. > > > This is without this patch, so it "reconnected" with SuperSpeed (5Gbps). > > > > > > Binary Object Store Descriptor: > > > bLength 5 > > > bDescriptorType 15 > > > wTotalLength 0x0016 > > > bNumDeviceCaps 2 > > > USB 2.0 Extension Device Capability: > > > bLength 7 > > > bDescriptorType 16 > > > bDevCapabilityType 2 > > > bmAttributes 0x00000000 > > > (Missing must-be-set LPM bit!) > > > SuperSpeed USB Device Capability: > > > bLength 10 > > > bDescriptorType 16 > > > bDevCapabilityType 3 > > > bmAttributes 0x00 > > > wSpeedsSupported 0x000e > > > Device can operate at Full Speed (12Mbps) > > > Device can operate at High Speed (480Mbps) > > > Device can operate at SuperSpeed (5Gbps) > > > bFunctionalitySupport 3 > > > Lowest fully-functional device speed is SuperSpeed (5Gbps) > > > bU1DevExitLat 0 micro seconds > > > bU2DevExitLat 0 micro seconds > > > > > > (Missing must-be-set LPM bit!) seems to be weird? As it looks like > > > just nulled data. > > > > OK, so it's broken during enumeration and after enumeration. > > > > But that's the "fallback" case after hanging during SS+ enumeration, > > which we would like to prevent from happening. What about 5gbps ports, > > does it work correctly at SS or still report zero LPM? > > > > And running at SS+ with the patch applied, does the device produce > > sensible BOS descriptor? The previous one did. > > > > What if you extend the patch to also apply at SS? It won't fix LPM > > during enumeration, but would it fix the descriptor seen by lsusb? > > Hello Michal, > > very good questions.. the result was surprising to me. > > 1) How does it do on 5GBps port? > > Without patch: > > [ 1522.177297] usb 6-1: new SuperSpeed USB device number 4 using xhci_hcd > [ 1527.440481] usb 6-1: unable to get BOS descriptor or descriptor too short > [ 1527.465514] usb 6-1: unable to read config index 0 descriptor/start: -71 > [ 1527.465520] usb 6-1: can't read configurations, error -71 > [ 1527.648035] usb 6-1: new SuperSpeed USB device number 5 using xhci_hcd > [ 1527.839295] usb 6-1: LPM exit latency is zeroed, disabling LPM. > > Looks like the BOS descriptor cannot be read either. > > Any, very interesting: > > Binary Object Store Descriptor: > bLength 5 > bDescriptorType 15 > wTotalLength 0x0016 > bNumDeviceCaps 2 > USB 2.0 Extension Device Capability: > bLength 7 > bDescriptorType 16 > bDevCapabilityType 2 > bmAttributes 0x00000000 > (Missing must-be-set LPM bit!) > SuperSpeed USB Device Capability: > bLength 10 > bDescriptorType 16 > bDevCapabilityType 3 > bmAttributes 0x00 > wSpeedsSupported 0x000e > Device can operate at Full Speed (12Mbps) > Device can operate at High Speed (480Mbps) > Device can operate at SuperSpeed (5Gbps) > bFunctionalitySupport 3 > Lowest fully-functional device speed is SuperSpeed (5Gbps) > bU1DevExitLat 0 micro seconds > bU2DevExitLat 0 micro seconds > > Very interesting - even reading it "manually" via lsusb - seems to > fail, even at SS. > > 2) Does it produce a sensible BOS descriptor post-patch at SS+ ? It > looks like it. > Binary Object Store Descriptor: > bLength 5 > bDescriptorType 15 > wTotalLength 0x002a > bNumDeviceCaps 3 > USB 2.0 Extension Device Capability: > bLength 7 > bDescriptorType 16 > bDevCapabilityType 2 > bmAttributes 0x0000f41e > BESL Link Power Management (LPM) Supported > Baseline BESL value 400 us > Deep BESL value 10000 us > SuperSpeed USB Device Capability: > bLength 10 > bDescriptorType 16 > bDevCapabilityType 3 > bmAttributes 0x00 > wSpeedsSupported 0x000e > Device can operate at Full Speed (12Mbps) > Device can operate at High Speed (480Mbps) > Device can operate at SuperSpeed (5Gbps) > bFunctionalitySupport 1 > Lowest fully-functional device speed is Full Speed (12Mbps) > bU1DevExitLat 10 micro seconds > bU2DevExitLat 2047 micro seconds > SuperSpeedPlus USB Device Capability: > bLength 20 > bDescriptorType 16 > bDevCapabilityType 10 > bmAttributes 0x00000001 > Sublink Speed Attribute count 2 > Sublink Speed ID count 1 > wFunctionalitySupport 0x1100 > Min functional Speed Attribute ID: 0 > Min functional RX lanes: 1 > Min functional TX lanes: 1 > bmSublinkSpeedAttr[0] 0x000a4030 > Speed Attribute ID: 0 10Gb/s Symmetric RX SuperSpeedPlus > bmSublinkSpeedAttr[1] 0x000a40b0 > Speed Attribute ID: 0 10Gb/s Symmetric TX SuperSpeedPlus > > 3) What if I apply the patch to SS as well? > > Connect: > [ 3.293251] usb 6-1: new SuperSpeed USB device number 2 using xhci_hcd > [ 3.349030] usb 6-1: skipping BOS descriptor > [ 3.429817] usb 6-1: New USB device found, idVendor=0fd9, > idProduct=009c, bcdDevice= 0.02 > [ 3.429825] usb 6-1: New USB device strings: Mfr=6, Product=7, SerialNumber=3 > [ 3.429828] usb 6-1: Product: Elgato 4K X > [ 3.429830] usb 6-1: Manufacturer: Elgato > [ 3.429833] usb 6-1: SerialNumber: A7SNB517214G5K > [ 9.019651] usb 6-1: 3:2: failed to get current value for ch 0 (-22) > [ 9.028103] usb 6-1: Found UVC 1.00 device Elgato 4K X (0fd9:009c) > > sudo lsusb -v -d 0fd9:009c > Binary Object Store Descriptor: > bLength 5 > bDescriptorType 15 > wTotalLength 0x0016 > bNumDeviceCaps 2 > USB 2.0 Extension Device Capability: > bLength 7 > bDescriptorType 16 > bDevCapabilityType 2 > bmAttributes 0x00000000 > (Missing must-be-set LPM bit!) > SuperSpeed USB Device Capability: > bLength 10 > bDescriptorType 16 > bDevCapabilityType 3 > bmAttributes 0x00 > wSpeedsSupported 0x000e > Device can operate at Full Speed (12Mbps) > Device can operate at High Speed (480Mbps) > Device can operate at SuperSpeed (5Gbps) > bFunctionalitySupport 3 > Lowest fully-functional device speed is SuperSpeed (5Gbps) > bU1DevExitLat 0 micro seconds > bU2DevExitLat 0 micro seconds > > Again (Missing must-be-set LPM bit!). > > So.. if i summarize it correctly: on SS, BOS fetch seems to fail > immediately when connecting, but also "later" when I use lsusb. > But, on SS+, if i skip BOS fetch on connect, it works when done later... > > For what it's worth: I've recorded a few hours of Gameplay with the > patch, and rebooted a couple times, it seems to do the trick. This is really odd. I just picked one of these devices up and will try this out next week when I get a chance to connect it to a system that isn't just my laptop (I don't think my laptop's usb ports are that fast, but I could be wrong, will try it out later this week...) thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 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 0 siblings, 2 replies; 19+ messages in thread From: Greg KH @ 2025-12-07 21:12 UTC (permalink / raw) To: Johannes Brüderl; +Cc: Michal Pecio, linux-usb On Sun, Dec 07, 2025 at 08:00:53PM +0900, Greg KH wrote: > On Sun, Dec 07, 2025 at 11:47:34AM +0100, Johannes Brüderl wrote: > > On Sun, Dec 7, 2025 at 10:45 AM Michal Pecio <michal.pecio@gmail.com> wrote: > > > > > > On Sun, 7 Dec 2025 10:22:41 +0100, Johannes Brüderl wrote: > > > > Here's the BOS Descriptor section when running w/ root. > > > > This is without this patch, so it "reconnected" with SuperSpeed (5Gbps). > > > > > > > > Binary Object Store Descriptor: > > > > bLength 5 > > > > bDescriptorType 15 > > > > wTotalLength 0x0016 > > > > bNumDeviceCaps 2 > > > > USB 2.0 Extension Device Capability: > > > > bLength 7 > > > > bDescriptorType 16 > > > > bDevCapabilityType 2 > > > > bmAttributes 0x00000000 > > > > (Missing must-be-set LPM bit!) > > > > SuperSpeed USB Device Capability: > > > > bLength 10 > > > > bDescriptorType 16 > > > > bDevCapabilityType 3 > > > > bmAttributes 0x00 > > > > wSpeedsSupported 0x000e > > > > Device can operate at Full Speed (12Mbps) > > > > Device can operate at High Speed (480Mbps) > > > > Device can operate at SuperSpeed (5Gbps) > > > > bFunctionalitySupport 3 > > > > Lowest fully-functional device speed is SuperSpeed (5Gbps) > > > > bU1DevExitLat 0 micro seconds > > > > bU2DevExitLat 0 micro seconds > > > > > > > > (Missing must-be-set LPM bit!) seems to be weird? As it looks like > > > > just nulled data. > > > > > > OK, so it's broken during enumeration and after enumeration. > > > > > > But that's the "fallback" case after hanging during SS+ enumeration, > > > which we would like to prevent from happening. What about 5gbps ports, > > > does it work correctly at SS or still report zero LPM? > > > > > > And running at SS+ with the patch applied, does the device produce > > > sensible BOS descriptor? The previous one did. > > > > > > What if you extend the patch to also apply at SS? It won't fix LPM > > > during enumeration, but would it fix the descriptor seen by lsusb? > > > > Hello Michal, > > > > very good questions.. the result was surprising to me. > > > > 1) How does it do on 5GBps port? > > > > Without patch: > > > > [ 1522.177297] usb 6-1: new SuperSpeed USB device number 4 using xhci_hcd > > [ 1527.440481] usb 6-1: unable to get BOS descriptor or descriptor too short > > [ 1527.465514] usb 6-1: unable to read config index 0 descriptor/start: -71 > > [ 1527.465520] usb 6-1: can't read configurations, error -71 > > [ 1527.648035] usb 6-1: new SuperSpeed USB device number 5 using xhci_hcd > > [ 1527.839295] usb 6-1: LPM exit latency is zeroed, disabling LPM. > > > > Looks like the BOS descriptor cannot be read either. > > > > Any, very interesting: > > > > Binary Object Store Descriptor: > > bLength 5 > > bDescriptorType 15 > > wTotalLength 0x0016 > > bNumDeviceCaps 2 > > USB 2.0 Extension Device Capability: > > bLength 7 > > bDescriptorType 16 > > bDevCapabilityType 2 > > bmAttributes 0x00000000 > > (Missing must-be-set LPM bit!) > > SuperSpeed USB Device Capability: > > bLength 10 > > bDescriptorType 16 > > bDevCapabilityType 3 > > bmAttributes 0x00 > > wSpeedsSupported 0x000e > > Device can operate at Full Speed (12Mbps) > > Device can operate at High Speed (480Mbps) > > Device can operate at SuperSpeed (5Gbps) > > bFunctionalitySupport 3 > > Lowest fully-functional device speed is SuperSpeed (5Gbps) > > bU1DevExitLat 0 micro seconds > > bU2DevExitLat 0 micro seconds > > > > Very interesting - even reading it "manually" via lsusb - seems to > > fail, even at SS. > > > > 2) Does it produce a sensible BOS descriptor post-patch at SS+ ? It > > looks like it. > > Binary Object Store Descriptor: > > bLength 5 > > bDescriptorType 15 > > wTotalLength 0x002a > > bNumDeviceCaps 3 > > USB 2.0 Extension Device Capability: > > bLength 7 > > bDescriptorType 16 > > bDevCapabilityType 2 > > bmAttributes 0x0000f41e > > BESL Link Power Management (LPM) Supported > > Baseline BESL value 400 us > > Deep BESL value 10000 us > > SuperSpeed USB Device Capability: > > bLength 10 > > bDescriptorType 16 > > bDevCapabilityType 3 > > bmAttributes 0x00 > > wSpeedsSupported 0x000e > > Device can operate at Full Speed (12Mbps) > > Device can operate at High Speed (480Mbps) > > Device can operate at SuperSpeed (5Gbps) > > bFunctionalitySupport 1 > > Lowest fully-functional device speed is Full Speed (12Mbps) > > bU1DevExitLat 10 micro seconds > > bU2DevExitLat 2047 micro seconds > > SuperSpeedPlus USB Device Capability: > > bLength 20 > > bDescriptorType 16 > > bDevCapabilityType 10 > > bmAttributes 0x00000001 > > Sublink Speed Attribute count 2 > > Sublink Speed ID count 1 > > wFunctionalitySupport 0x1100 > > Min functional Speed Attribute ID: 0 > > Min functional RX lanes: 1 > > Min functional TX lanes: 1 > > bmSublinkSpeedAttr[0] 0x000a4030 > > Speed Attribute ID: 0 10Gb/s Symmetric RX SuperSpeedPlus > > bmSublinkSpeedAttr[1] 0x000a40b0 > > Speed Attribute ID: 0 10Gb/s Symmetric TX SuperSpeedPlus > > > > 3) What if I apply the patch to SS as well? > > > > Connect: > > [ 3.293251] usb 6-1: new SuperSpeed USB device number 2 using xhci_hcd > > [ 3.349030] usb 6-1: skipping BOS descriptor > > [ 3.429817] usb 6-1: New USB device found, idVendor=0fd9, > > idProduct=009c, bcdDevice= 0.02 > > [ 3.429825] usb 6-1: New USB device strings: Mfr=6, Product=7, SerialNumber=3 > > [ 3.429828] usb 6-1: Product: Elgato 4K X > > [ 3.429830] usb 6-1: Manufacturer: Elgato > > [ 3.429833] usb 6-1: SerialNumber: A7SNB517214G5K > > [ 9.019651] usb 6-1: 3:2: failed to get current value for ch 0 (-22) > > [ 9.028103] usb 6-1: Found UVC 1.00 device Elgato 4K X (0fd9:009c) > > > > sudo lsusb -v -d 0fd9:009c > > Binary Object Store Descriptor: > > bLength 5 > > bDescriptorType 15 > > wTotalLength 0x0016 > > bNumDeviceCaps 2 > > USB 2.0 Extension Device Capability: > > bLength 7 > > bDescriptorType 16 > > bDevCapabilityType 2 > > bmAttributes 0x00000000 > > (Missing must-be-set LPM bit!) > > SuperSpeed USB Device Capability: > > bLength 10 > > bDescriptorType 16 > > bDevCapabilityType 3 > > bmAttributes 0x00 > > wSpeedsSupported 0x000e > > Device can operate at Full Speed (12Mbps) > > Device can operate at High Speed (480Mbps) > > Device can operate at SuperSpeed (5Gbps) > > bFunctionalitySupport 3 > > Lowest fully-functional device speed is SuperSpeed (5Gbps) > > bU1DevExitLat 0 micro seconds > > bU2DevExitLat 0 micro seconds > > > > Again (Missing must-be-set LPM bit!). > > > > So.. if i summarize it correctly: on SS, BOS fetch seems to fail > > immediately when connecting, but also "later" when I use lsusb. > > But, on SS+, if i skip BOS fetch on connect, it works when done later... > > > > For what it's worth: I've recorded a few hours of Gameplay with the > > patch, and rebooted a couple times, it seems to do the trick. > > This is really odd. I just picked one of these devices up and will try > this out next week when I get a chance to connect it to a system that > isn't just my laptop (I don't think my laptop's usb ports are that fast, > but I could be wrong, will try it out later this week...) Ok, I can duplicate this here. Maybe we just don't ask for the BOS descriptor if no one needs/asks for it. I can play with that later and see if that helps as I'm sure this isn't going to be the only device that can't handle the BOS descriptor if Windows isn't querying for it, so we don't want to make a huge quirk table if we don't have to. thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 21:12 ` Greg KH @ 2025-12-07 22:06 ` Michal Pecio 2025-12-08 8:58 ` Oliver Neukum 1 sibling, 0 replies; 19+ messages in thread From: Michal Pecio @ 2025-12-07 22:06 UTC (permalink / raw) To: Greg KH; +Cc: Johannes Brüderl, linux-usb On Mon, 8 Dec 2025 06:12:15 +0900, Greg KH wrote: > I'm sure this isn't going to be the only device that can't handle the > BOS descriptor if Windows isn't querying for it I speculated in bugzilla that maybe Windows isn't asking for it, but I doubt it now because BOS is required for LPM. More likely it was simply WinPCAP failing to capture those queries when I tried. lsusb works, so something "fixes" this device - maybe just waiting long enough, maybe using different wLength, mabye getting config descriptors before BOS or setting configuration first, I don't know. Windows in a VM may show you how to do it ;) Regards, Michal ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 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 1 sibling, 1 reply; 19+ messages in thread From: Oliver Neukum @ 2025-12-08 8:58 UTC (permalink / raw) To: Greg KH, Johannes Brüderl; +Cc: Michal Pecio, linux-usb On 07.12.25 22:12, Greg KH wrote: > Ok, I can duplicate this here. Maybe we just don't ask for the BOS > descriptor if no one needs/asks for it. I can play with that later and > see if that helps as I'm sure this isn't going to be the only device > that can't handle the BOS descriptor if Windows isn't querying for it, > so we don't want to make a huge quirk table if we don't have to. 1. That means we'd let lsusb crash devices. Not a good idea. 2. It is, unfortunately, possible that firmware authors simply script a detection sequence. That means devices would crash if you request a descriptor at a time when Windows would not request it, not just in general. I am afraid I need to point you at the horrible example of HID_ALWAYS_POLL Regards Oliver ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-08 8:58 ` Oliver Neukum @ 2025-12-08 20:46 ` Greg KH 2025-12-28 12:54 ` Johannes Brüderl 0 siblings, 1 reply; 19+ messages in thread From: Greg KH @ 2025-12-08 20:46 UTC (permalink / raw) To: Oliver Neukum; +Cc: Johannes Brüderl, Michal Pecio, linux-usb On Mon, Dec 08, 2025 at 09:58:55AM +0100, Oliver Neukum wrote: > On 07.12.25 22:12, Greg KH wrote: > > Ok, I can duplicate this here. Maybe we just don't ask for the BOS > > descriptor if no one needs/asks for it. I can play with that later and > > see if that helps as I'm sure this isn't going to be the only device > > that can't handle the BOS descriptor if Windows isn't querying for it, > > so we don't want to make a huge quirk table if we don't have to. > > 1. That means we'd let lsusb crash devices. Not a good idea. I don't think that it will crash. hopefully not, as just reading a descriptor after enumerated shouldn't cause that. I'll test it out... > 2. It is, unfortunately, possible that firmware authors simply > script a detection sequence. That means devices would crash > if you request a descriptor at a time when Windows would not > request it, not just in general. > I am afraid I need to point you at the horrible example > of HID_ALWAYS_POLL That is horrible, hopefully we don't have to do that here :( thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-08 20:46 ` Greg KH @ 2025-12-28 12:54 ` Johannes Brüderl 2025-12-28 13:18 ` Greg KH 0 siblings, 1 reply; 19+ messages in thread From: Johannes Brüderl @ 2025-12-28 12:54 UTC (permalink / raw) To: Greg KH; +Cc: Oliver Neukum, Michal Pecio, linux-usb On Mon, Dec 8, 2025 at 9:46 PM Greg KH <gregkh@linuxfoundation.org> wrote: > > On Mon, Dec 08, 2025 at 09:58:55AM +0100, Oliver Neukum wrote: > > On 07.12.25 22:12, Greg KH wrote: > > > Ok, I can duplicate this here. Maybe we just don't ask for the BOS > > > descriptor if no one needs/asks for it. I can play with that later and > > > see if that helps as I'm sure this isn't going to be the only device > > > that can't handle the BOS descriptor if Windows isn't querying for it, > > > so we don't want to make a huge quirk table if we don't have to. > > > > 1. That means we'd let lsusb crash devices. Not a good idea. > > I don't think that it will crash. hopefully not, as just reading a > descriptor after enumerated shouldn't cause that. I'll test it out... > > > 2. It is, unfortunately, possible that firmware authors simply > > script a detection sequence. That means devices would crash > > if you request a descriptor at a time when Windows would not > > request it, not just in general. > > I am afraid I need to point you at the horrible example > > of HID_ALWAYS_POLL > > That is horrible, hopefully we don't have to do that here :( > > thanks, > > greg k-h Hello Greg, I apologize for the "blunt bump" of this topic. Are you (still) open to considering the quirk ? A small number of users have started using the Patch, and it seems to solve a real problem.. (ref: https://www.reddit.com/r/elgato/comments/1lw1e0v/comment/ntrdjpb/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) Given that the options for 4k60fps recording are very limited for Linux these days - I suggest it might be worth it. AFAIK, there's no good other option in terms of hardware as of December 2025. I understand it's a special quirk for just this device, which is not pretty.. (Note: i've submitted a v3 patch that addressed the feedback). Thanks and Best Regards, Johannes ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-28 12:54 ` Johannes Brüderl @ 2025-12-28 13:18 ` Greg KH 0 siblings, 0 replies; 19+ messages in thread From: Greg KH @ 2025-12-28 13:18 UTC (permalink / raw) To: Johannes Brüderl; +Cc: Oliver Neukum, Michal Pecio, linux-usb On Sun, Dec 28, 2025 at 01:54:34PM +0100, Johannes Brüderl wrote: > On Mon, Dec 8, 2025 at 9:46 PM Greg KH <gregkh@linuxfoundation.org> wrote: > > > > On Mon, Dec 08, 2025 at 09:58:55AM +0100, Oliver Neukum wrote: > > > On 07.12.25 22:12, Greg KH wrote: > > > > Ok, I can duplicate this here. Maybe we just don't ask for the BOS > > > > descriptor if no one needs/asks for it. I can play with that later and > > > > see if that helps as I'm sure this isn't going to be the only device > > > > that can't handle the BOS descriptor if Windows isn't querying for it, > > > > so we don't want to make a huge quirk table if we don't have to. > > > > > > 1. That means we'd let lsusb crash devices. Not a good idea. > > > > I don't think that it will crash. hopefully not, as just reading a > > descriptor after enumerated shouldn't cause that. I'll test it out... > > > > > 2. It is, unfortunately, possible that firmware authors simply > > > script a detection sequence. That means devices would crash > > > if you request a descriptor at a time when Windows would not > > > request it, not just in general. > > > I am afraid I need to point you at the horrible example > > > of HID_ALWAYS_POLL > > > > That is horrible, hopefully we don't have to do that here :( > > > > thanks, > > > > greg k-h > > Hello Greg, > I apologize for the "blunt bump" of this topic. > Are you (still) open to considering the quirk ? > > A small number of users have started using the Patch, and it seems to > solve a real problem.. (ref: > https://www.reddit.com/r/elgato/comments/1lw1e0v/comment/ntrdjpb/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) > > Given that the options for 4k60fps recording are very limited for > Linux these days - I suggest it might be worth it. AFAIK, there's no > good other option in terms of hardware as of December 2025. > I understand it's a special quirk for just this device, which is not pretty.. > > (Note: i've submitted a v3 patch that addressed the feedback). Sorry, I haven't had a chance to dig into this due to travel and the holidays. Give me a few days to catch up... thanks, greg k-h ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 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 0:37 ` Michal Pecio 2025-12-07 0:59 ` Greg KH 1 sibling, 1 reply; 19+ messages in thread From: Michal Pecio @ 2025-12-07 0:37 UTC (permalink / raw) To: Johannes Brüderl; +Cc: linux-usb, gregkh On Sun, 7 Dec 2025 01:00:07 +0100, Johannes Brüderl wrote: > 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> IIRC what we found in this bug is that the device will happily respond to BOS descriptor requests issued by lsusb after it's enumerated. So it appears that (only when running at 10G, wtf) the device expects something to happen before it is able to produce this descriptor. And apparently Linux is doing things in different order than certain other operating system supported by the vendor. But the reporter simply applied a patch similar to yours and lost interest in debugging any further. And unfortunately WinPCAP fails to capture most of enumeration process, so I don't know how that other software is doing it. Regards, Michal ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH] usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor 2025-12-07 0:37 ` [PATCH] " Michal Pecio @ 2025-12-07 0:59 ` Greg KH 0 siblings, 0 replies; 19+ messages in thread From: Greg KH @ 2025-12-07 0:59 UTC (permalink / raw) To: Michal Pecio; +Cc: Johannes Brüderl, linux-usb On Sun, Dec 07, 2025 at 01:37:34AM +0100, Michal Pecio wrote: > On Sun, 7 Dec 2025 01:00:07 +0100, Johannes Brüderl wrote: > > 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> > > IIRC what we found in this bug is that the device will happily respond > to BOS descriptor requests issued by lsusb after it's enumerated. That's very odd. > So it appears that (only when running at 10G, wtf) the device expects > something to happen before it is able to produce this descriptor. And > apparently Linux is doing things in different order than certain other > operating system supported by the vendor. Any ideas what "order" is not the same here? Should we just not be reading the BOS descriptor at early enumeration and just wait until someone actually wants it? > But the reporter simply applied a patch similar to yours and lost > interest in debugging any further. Understood, but I'd like to get to the root of this if possible so that we don't end up just adding a bunch of devices to this quirk because we are doing something "odd" that normal USB-IF testing isn't catching. That feels like a bad overall decision to make. > And unfortunately WinPCAP fails to capture most of enumeration process, > so I don't know how that other software is doing it. usbmon with windows in a virtual machine might catch this? thanks, greg k-h ^ permalink raw reply [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