From 50f3eecbba46843d707e1d63f99b4e2bab55bb1c Mon Sep 17 00:00:00 2001 From: Mao Hongbo Date: Thu, 1 Jun 2023 17:46:46 +0800 Subject: [PATCH] xHCI-Add-XHCI_SLOWDOWN_QUIRK-quirk-for-phytium-xHCI Since current Phytium Px210 xHCI host controller does not support USB Gen2(10Gbps) well, add the XHCI_SLOWDOWN_QUIRK quirk and modify the limited speed to 5Gbps. Signed-off-by: Feng Jun Signed-off-by: Chen Baozi --- drivers/usb/host/xhci-mem.c | 4 ++++ drivers/usb/host/xhci-pci.c | 6 ++++++ drivers/usb/host/xhci.h | 1 + 3 files changed, 11 insertions(+) diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 7f9f302a73cd..63d93e316094 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -2157,6 +2157,10 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports, if (rhub->min_rev < minor_revision) rhub->min_rev = minor_revision; + if (xhci->quirks & XHCI_SLOWDOWN_QUIRK) + if (major_revision == 0x03) + rhub->min_rev = 0; + /* Port offset and count in the third dword, see section 7.2 */ temp = readl(addr + 2); port_offset = XHCI_EXT_PORT_OFF(temp); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 71ef473df585..a5ab8e29facf 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -43,6 +43,7 @@ #define PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI 0x1aa8 #define PCI_DEVICE_ID_INTEL_APL_XHCI 0x5aa8 #define PCI_DEVICE_ID_INTEL_DNV_XHCI 0x19d0 +#define PCI_DEVICE_ID_PHYTIUM_XHCI 0xdc27 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI 0x15b5 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI 0x15b6 #define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI 0x15c1 @@ -250,6 +251,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) if (pdev->vendor == PCI_VENDOR_ID_VIA) xhci->quirks |= XHCI_RESET_ON_RESUME; + if (pdev->vendor == PCI_VENDOR_ID_PHYTIUM || + pdev->device == PCI_DEVICE_ID_PHYTIUM_XHCI) { + xhci->quirks |= XHCI_SLOWDOWN_QUIRK; + } + /* See https://bugzilla.kernel.org/show_bug.cgi?id=79511 */ if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3432) diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 8798ed031786..cbe0cdfcc9d9 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1876,6 +1876,7 @@ struct xhci_hcd { #define XHCI_SKIP_PHY_INIT BIT_ULL(37) #define XHCI_DISABLE_SPARSE BIT_ULL(38) #define XHCI_NO_SOFT_RETRY BIT_ULL(40) +#define XHCI_SLOWDOWN_QUIRK BIT_ULL(41) unsigned int num_active_eps; unsigned int limit_active_eps; -- Gitee