public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] PCI: Don't assume root ports from > 2015 are power manageable
@ 2023-05-24 15:21 Mario Limonciello
  2023-05-24 15:44 ` Lukas Wunner
  0 siblings, 1 reply; 4+ messages in thread
From: Mario Limonciello @ 2023-05-24 15:21 UTC (permalink / raw)
  To: Bjorn Helgaas, Mika Westerberg, Rafael J . Wysocki
  Cc: linux-pci, linux-kernel, S-k Shyam-sundar, Natikar Basavaraj,
	Deucher Alexander, linux-pm, Lukas Wunner, Mario Limonciello,
	Iain Lane

Using a USB keyboard or mouse to wakeup the system from s2idle fails when
that XHCI device is connected to a USB-C port for an AMD USB4 router.

Due to commit 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
all PCIe ports go into D3 during s2idle.

When specific root ports are put into D3 over s2idle on some AMD platforms
it is not possible for the platform to properly identify wakeup sources.
This happens whether the root port goes into D3hot or D3cold.

Comparing registers between Linux and Windows 11 this behavior to put
these specific root ports into D3 at suspend is unique to Linux. On an
affected system Windows does not put those specific root ports into D3
over Modern Standby.

Windows doesn't put the root ports into D3 because root ports are not
power manageable.

Linux shouldn't assume root ports support D3 just because they're on a
machine newer than 2015, the ports should also be deemed power manageable.
Add an extra check explicitly for root ports to ensure D3 isn't selected
for these ports.

Fixes: 9d26d3a8f1b0 ("PCI: Put PCIe ports into D3 during suspend")
Reported-by: Iain Lane <iain@orangesquash.org.uk>
Closes: https://forums.lenovo.com/t5/Ubuntu/Z13-can-t-resume-from-suspend-with-external-USB-keyboard/m-p/5217121
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v2->v3:
 * Only apply to root ports
 * Update commit message
---
 drivers/pci/pci.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 5ede93222bc1..51126891a2db 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2976,6 +2976,9 @@ bool pci_bridge_d3_possible(struct pci_dev *bridge)
 
 	switch (pci_pcie_type(bridge)) {
 	case PCI_EXP_TYPE_ROOT_PORT:
+		if (!platform_pci_power_manageable(bridge))
+			return false;
+		fallthrough;
 	case PCI_EXP_TYPE_UPSTREAM:
 	case PCI_EXP_TYPE_DOWNSTREAM:
 		if (pci_bridge_d3_disable)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-05-24 17:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-24 15:21 [PATCH v3] PCI: Don't assume root ports from > 2015 are power manageable Mario Limonciello
2023-05-24 15:44 ` Lukas Wunner
2023-05-24 16:16   ` Limonciello, Mario
2023-05-24 17:29     ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox