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,