Skip to content

Commit b725098

Browse files
committed
xhci-pci: Set runtime PM as default policy on all xHC 1.2 or later devices
Bugzilla: http://bugzilla.redhat.com/2130063 Bugzilla: http://bugzilla.redhat.com/2139486 Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=50484649 Tested: HP ZBook 15 G5/80D5 Laptop ThinkPad P1 Gen5 TB4 HP zBook Fury commit a611bf4 Author: Mario Limonciello <mario.limonciello@amd.com> Date: Mon Oct 24 17:27:19 2022 +0300 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: stable@vger.kernel.org Suggested-by: Mathias Nyman <mathias.nyman@linux.intel.com> 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 <mario.limonciello@amd.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20221024142720.4122053-4-mathias.nyman@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Torez Smith <torez@redhat.com>
1 parent 413f671 commit b725098

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
@@ -268,12 +256,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
268256
pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_XHCI ||
269257
pdev->device == PCI_DEVICE_ID_INTEL_ICE_LAKE_XHCI ||
270258
pdev->device == PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI ||
271-
pdev->device == PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI ||
272-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI ||
273-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_XHCI ||
274-
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI ||
275-
pdev->device == PCI_DEVICE_ID_INTEL_RAPTOR_LAKE_XHCI ||
276-
pdev->device == PCI_DEVICE_ID_INTEL_METEOR_LAKE_XHCI))
259+
pdev->device == PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI))
277260
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
278261

279262
if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
@@ -336,15 +319,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
336319
pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4))
337320
xhci->quirks |= XHCI_NO_SOFT_RETRY;
338321

339-
if (pdev->vendor == PCI_VENDOR_ID_AMD &&
340-
(pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_1 ||
341-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_2 ||
342-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 ||
343-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 ||
344-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 ||
345-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 ||
346-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 ||
347-
pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8))
322+
/* xHC spec requires PCI devices to support D3hot and D3cold */
323+
if (xhci->hci_version >= 0x120)
348324
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;
349325

350326
if (xhci->quirks & XHCI_RESET_ON_RESUME)

0 commit comments

Comments
 (0)