From 0eaf6ceec6c57aaab964a2b0eb59471d513a38d3 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Tue, 7 Jul 2026 17:48:43 +0300 Subject: [PATCH] =?UTF-8?q?USB:=20quirks=20=E2=80=94=20add=20ASMedia=20ven?= =?UTF-8?q?dor=20+=20VIA=20VL805,=20expand=20vendor=20constants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-referenced with Linux 7.1 drivers/usb/host/xhci-pci.c. Vendor constants: added ASMEDIA (0x1b21). All 12 vendor IDs now documented: Fresco Logic, NEC, AMD, ATI, Intel, ASMedia, Etron, Renesas, VIA, CDNS, Phytium, Zhaoxin, Redox/QEMU. QUIRK_TABLE expanded from 18 to 23 entries: - ASMedia ASM1042/1042A (0x1042): ASMEDIA_MODIFY_FLOWCONTROL - ASMedia ASM1142 (0x1142): BROKEN_MSI - ASMedia ASM2142/3142 (0x2142): BROKEN_MSI + U2_DISABLE_WAKE - ASMedia ASM3242 (0x3242): BROKEN_MSI - VIA VL805 (0x3483): RESET_ON_RESUME ASMedia xHCI add-in cards (ASM1042/1142/2142/3142/3242) are among the most common PCIe USB 3.0 controllers. VIA VL805 is the standard USB 3.0 controller on Raspberry Pi 4 and many ARM SBCs. --- drivers/usb/xhcid/src/xhci/quirks.rs | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/drivers/usb/xhcid/src/xhci/quirks.rs b/drivers/usb/xhcid/src/xhci/quirks.rs index e5087d96c3..565f8fe521 100644 --- a/drivers/usb/xhcid/src/xhci/quirks.rs +++ b/drivers/usb/xhcid/src/xhci/quirks.rs @@ -75,12 +75,14 @@ pub mod vendor { pub const AMD: u16 = 0x1022; pub const ATI: u16 = 0x1002; pub const INTEL: u16 = 0x8086; + pub const ASMEDIA: u16 = 0x1b21; pub const ETRON: u16 = 0x1b6f; pub const RENESAS: u16 = 0x1912; pub const VIA: u16 = 0x1106; + pub const CDNS: u16 = 0x17cd; pub const PHYTIUM: u16 = 0x1db7; - pub const ZHAOXIN: u16 = 0x1d79; - pub const REDOX_OS_VENDOR: u16 = 0x1af4; // Redox for QEMU emulated + pub const ZHAOXIN: u16 = 0x1d17; + pub const REDOX_OS_VENDOR: u16 = 0x1af4; } pub struct DeviceQuirkEntry { @@ -96,6 +98,31 @@ const QUIRK_TABLE: &[DeviceQuirkEntry] = &[ vendor: vendor::FRESCO_LOGIC, device: 0x1000, hci_version: 0, quirks: XhciQuirks::from_bits(XhciQuirks::BROKEN_MSI.bits() | XhciQuirks::BROKEN_STREAMS.bits()).unwrap(), }, + // ASMedia ASM1042/ASM1042A: modify flow control, broken MSI on rev 0x01. + DeviceQuirkEntry { + vendor: vendor::ASMEDIA, device: 0x1042, hci_version: 0, + quirks: XhciQuirks::ASMEDIA_MODIFY_FLOWCONTROL, + }, + // ASMedia ASM1142: broken MSI. + DeviceQuirkEntry { + vendor: vendor::ASMEDIA, device: 0x1142, hci_version: 0, + quirks: XhciQuirks::BROKEN_MSI, + }, + // ASMedia ASM2142/ASM3142: U2 disable wake, broken MSI. + DeviceQuirkEntry { + vendor: vendor::ASMEDIA, device: 0x2142, hci_version: 0, + quirks: XhciQuirks::from_bits(XhciQuirks::BROKEN_MSI.bits() | XhciQuirks::U2_DISABLE_WAKE.bits()).unwrap(), + }, + // ASMedia ASM3242: broken MSI. + DeviceQuirkEntry { + vendor: vendor::ASMEDIA, device: 0x3242, hci_version: 0, + quirks: XhciQuirks::BROKEN_MSI, + }, + // VIA VL805. + DeviceQuirkEntry { + vendor: vendor::VIA, device: 0x3483, hci_version: 0, + quirks: XhciQuirks::RESET_ON_RESUME, + }, // NEC: oldest quirk target. DeviceQuirkEntry { vendor: vendor::NEC, device: 0, hci_version: 0,