linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PCI/ASPM: Enable ASPM for links under VMD domain
@ 2020-08-21 12:32 Kai-Heng Feng
  2020-08-24 13:04 ` Mika Westerberg
                   ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Kai-Heng Feng @ 2020-08-21 12:32 UTC (permalink / raw)
  To: bhelgaas
  Cc: jonathan.derrick, Mario.Limonciello, Kai-Heng Feng,
	Heiner Kallweit, Mika Westerberg, Rafael J. Wysocki,
	Xiongfeng Wang, Krzysztof Wilczynski, open list:PCI SUBSYSTEM,
	open list

New Intel laptops with VMD cannot reach deeper power saving state,
renders very short battery time.

As BIOS may not be able to program the config space for devices under
VMD domain, ASPM needs to be programmed manually by software. This is
also the case under Windows.

The VMD controller itself is a root complex integrated endpoint that
doesn't have ASPM capability, so we can't propagate the ASPM settings to
devices under it. Hence, simply apply ASPM_STATE_ALL to the links under
VMD domain, unsupported states will be cleared out anyway.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 drivers/pci/pcie/aspm.c |  3 ++-
 drivers/pci/quirks.c    | 11 +++++++++++
 include/linux/pci.h     |  2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 253c30cc1967..dcc002dbca19 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -624,7 +624,8 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
 		aspm_calc_l1ss_info(link, &upreg, &dwreg);
 
 	/* Save default state */
-	link->aspm_default = link->aspm_enabled;
+	link->aspm_default = parent->dev_flags & PCI_DEV_FLAGS_ENABLE_ASPM ?
+			     ASPM_STATE_ALL : link->aspm_enabled;
 
 	/* Setup initial capable state. Will be updated later */
 	link->aspm_capable = link->aspm_support;
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index bdf9b52567e0..2e2f525bd892 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -5632,3 +5632,14 @@ static void apex_pci_fixup_class(struct pci_dev *pdev)
 }
 DECLARE_PCI_FIXUP_CLASS_HEADER(0x1ac1, 0x089a,
 			       PCI_CLASS_NOT_DEFINED, 8, apex_pci_fixup_class);
+
+/*
+ * Device [8086:9a09]
+ * BIOS may not be able to access config space of devices under VMD domain, so
+ * it relies on software to enable ASPM for links under VMD.
+ */
+static void pci_fixup_enable_aspm(struct pci_dev *pdev)
+{
+	pdev->dev_flags |= PCI_DEV_FLAGS_ENABLE_ASPM;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a09, pci_fixup_enable_aspm);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 835530605c0d..66a45916c7c6 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -227,6 +227,8 @@ enum pci_dev_flags {
 	PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
 	/* Don't use Relaxed Ordering for TLPs directed at this device */
 	PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
+	/* Enable ASPM regardless of how LnkCtl is programmed */
+	PCI_DEV_FLAGS_ENABLE_ASPM = (__force pci_dev_flags_t) (1 << 12),
 };
 
 enum pci_irq_reroute_variant {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread
[parent not found: <0f902d555deb423ef1c79835b23c917be2633162.camel@intel.com>]

end of thread, other threads:[~2020-09-23 14:30 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-21 12:32 [PATCH] PCI/ASPM: Enable ASPM for links under VMD domain Kai-Heng Feng
2020-08-24 13:04 ` Mika Westerberg
2020-08-25  6:23 ` Christoph Hellwig
2020-08-25  6:39   ` Kai Heng Feng
2020-08-25  6:56     ` Christoph Hellwig
2020-08-26  5:53       ` Kai-Heng Feng
2020-09-02 19:48       ` David Fugate
2020-09-02 22:54         ` Keith Busch
2020-08-26 21:43   ` Derrick, Jonathan
2020-08-27  6:34     ` hch
2020-08-27 16:13       ` Derrick, Jonathan
2020-08-27 16:23         ` hch
2020-08-27 16:45           ` Derrick, Jonathan
2020-08-27 16:50             ` hch
2020-08-27 21:33             ` Dan Williams
2020-08-29  7:23               ` hch
2020-08-27 17:49           ` Limonciello, Mario
2020-08-29  7:24             ` hch
2020-09-10  1:55 ` Bjorn Helgaas
2020-09-10 16:33   ` Derrick, Jonathan
2020-09-10 17:38     ` Bjorn Helgaas
     [not found] <0f902d555deb423ef1c79835b23c917be2633162.camel@intel.com>
2020-09-10 19:17 ` Bjorn Helgaas
2020-09-10 19:51   ` Derrick, Jonathan
2020-09-17 17:20     ` Bjorn Helgaas
2020-09-23 14:29       ` Kai-Heng Feng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).