[PATCH v7 0/2] media: uvcvideo: Add quirks to prevent Razer Kiyo Pro xHCI cascade failure

JP Hein
2026-04-10T00:28:57Z

The Razer Kiyo Pro (1532:0e05) is a USB 3.0 webcam whose firmware has a
well-documented failure mode that cascades into complete xHCI host
controller death, disconnecting every USB device on the bus -- including
keyboards and mice, requiring a hard reboot.

The device has two crash triggers:

1. LPM/autosuspend resume: Device enters LPM or autosuspend, fails to
reinitialize on resume, producing EPIPE (-32) on UVC SET_CUR. The
stalled endpoint triggers an xHCI stop-endpoint timeout, and the
kernel declares the host controller dead.

2. Rapid control transfers: sustained rapid UVC control operations
(hundreds over several seconds) overwhelm the firmware.

Patch 1 of the original 3-patch series (USB_QUIRK_NO_LPM for 1532:0e05)
has been merged by Greg Kroah-Hartman and backported to stable kernels
6.1, 6.6, 6.12, 6.18, and 6.19.

This v7 series covers the remaining two UVC patches:

Patch 1/2: UVC driver -- introduce UVC_QUIRK_CTRL_THROTTLE to rate-limit
all USB control transfers (50ms minimum interval) in __uvc_query_ctrl().

Patch 2/2: UVC driver -- add Razer Kiyo Pro device table entry with
UVC_QUIRK_CTRL_THROTTLE, UVC_QUIRK_DISABLE_AUTOSUSPEND, and
UVC_QUIRK_NO_RESET_RESUME.

Changes since v6:
- Dropped the error-code query skip after EPIPE -- no longer needed
since the throttle in __uvc_query_ctrl() already rate-limits the
error-code query path (Ricardo Ribalda)
- Included full lsusb -vv output in patch 2/2 commit message
(Ricardo Ribalda)

Changes since v5:
- Moved throttle from uvc_query_ctrl() to __uvc_query_ctrl() so
all callers are covered, including uvc_set_video_ctrl() which
bypasses the higher-level function (Ricardo Ribalda)
- Throttle now applies to all query types, not just SET_CUR
(Ricardo Ribalda)

Changes since v4:
- Dropped stable CC (new quirks, not regression fixes)
- Updated cover letter with 6.17 test results

Changes since v3:
- Regenerated patches against media-committers next branch to fix
context mismatch (v3 was based on Ubuntu 6.8 source)

Tested on:
- Kernel: 6.17.0-20-generic (Ubuntu 24.04 HWE) and 6.8.0-106-generic
- Hardware: Intel Cannon Lake PCH xHCI (8086:a36d)
- Device: Two Razer Kiyo Pro units (1532:0e05), firmware 1.5.0.1

Stress test, crash evidence, and debug logs:
https://github.com/jphein/kiyo-xhci-fix

JP Hein (2):
media: uvcvideo: add UVC_QUIRK_CTRL_THROTTLE for fragile USB firmware
media: uvcvideo: add Razer Kiyo Pro to device info table

drivers/media/usb/uvc/uvc_driver.c | 16 ++++++++++++++++
drivers/media/usb/uvc/uvc_video.c | 20 ++++++++++++++++++++
drivers/media/usb/uvc/uvcvideo.h | 3 +++
3 files changed, 39 insertions(+)

--
2.43.0