Skip to content

Commit a611bf4

Browse files
superm1gregkh
authored andcommitted
xhci-pci: Set runtime PM as default policy on all xHC 1.2 or later devices
For optimal power consumption of USB4 routers the XHCI PCIe endpoint used for tunneling must be in D3. Historically this is accomplished by a long list of PCIe IDs that correspond to these endpoints because the xhci_hcd driver will not default to allowing runtime PM for all devices. As both AMD and Intel have released new products with new XHCI controllers this list continues to grow. In reviewing the XHCI specification v1.2 on page 607 there is already a requirement that the PCI power management states D3hot and D3cold must be supported. In the quirk list, use this to indicate that runtime PM should be allowed on XHCI controllers. The following controllers are known to be xHC 1.2 and dropped explicitly: * AMD Yellow Carp * Intel Alder Lake * Intel Meteor Lake * Intel Raptor Lake [keep PCI ID for Alder Lake PCH for recently added quirk -Mathias] Cc: [email protected] Suggested-by: Mathias Nyman <[email protected]> Link: https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/extensible-host-controler-interface-usb-xhci.pdf Signed-off-by: Mario Limonciello <[email protected]> Reviewed-by: Mika Westerberg <[email protected]> Signed-off-by: Mathias Nyman <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 34cd2db commit a611bf4

File tree

1 file changed

+4
-28
lines changed

1 file changed

+4
-28
lines changed

drivers/usb/host/xhci-pci.c

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,13 @@
5858
#define PCI_DEVICE_ID_INTEL_CML_XHCI 0xa3af
5959
#define PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI 0x9a13
6060
#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138
61-
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI 0x461e
62-
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_XHCI 0x464e
63-
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI 0x51ed
64-
#define PCI_DEVICE_ID_INTEL_RAPTOR_LAKE_XHCI 0xa71e
65-
#define PCI_DEVICE_ID_INTEL_METEOR_LAKE_XHCI 0x7ec0
61+
#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI 0x51ed
6662

6763
#define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639
6864
#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9
6965
#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
7066
#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
7167
#define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc
72-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_1 0x161a
73-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_2 0x161b
74-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 0x161d
75-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 0x161e
76-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 0x15d6
77-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 0x15d7
78-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 0x161c
79-
#define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8 0x161f
8068

8169
#define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042
8270
#define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142
@@ -272,12 +260,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
272260
pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_XHCI ||
273261
pdev->device == PCI_DEVICE_ID_INTEL_ICE_LAKE_XHCI ||
274262
pdev->device == PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI ||
275-
pdev->device == PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI ||
276-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI ||
277-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_XHCI ||
278-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI ||
279-
pdev->device == PCI_DEVICE_ID_INTEL_RAPTOR_LAKE_XHCI ||
280-
pdev->device == PCI_DEVICE_ID_INTEL_METEOR_LAKE_XHCI))
263+
pdev->device == PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI))
281264
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
282265

283266
if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
@@ -346,15 +329,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
346329
pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4))
347330
xhci->quirks |= XHCI_NO_SOFT_RETRY;
348331

349-
if (pdev->vendor == PCI_VENDOR_ID_AMD &&
350-
(pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_1 ||
351-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_2 ||
352-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 ||
353-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 ||
354-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 ||
355-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 ||
356-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 ||
357-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8))
332+
/* xHC spec requires PCI devices to support D3hot and D3cold */
333+
if (xhci->hci_version >= 0x120)
358334
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
359335

360336
if (xhci->quirks & XHCI_RESET_ON_RESUME)

0 commit comments

Comments
 (0)