mirror of https://gitee.com/openkylin/linux.git
UBUNTU: SAUCE: PCI/ASPM: Enable ASPM for links under VMD domain
Mainline: NA Category: Bugfix CVE: NA BugLink: https://bugs.launchpad.net/bugs/1889384 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> Acked-by: Stefan Bader <stefan.bader@canonical.com> Signed-off-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: chen zhang <chenzhang@kylinos.cn> Change-Id: I69f07ea36159964af655d3edff891e890522f318 Reviewed-on: http://gerrit.kylin.com/c/kfocal/+/33260
This commit is contained in:
parent
1af9a4d773
commit
d7da3d780b
|
@ -653,7 +653,8 @@ static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist)
|
|||
aspm_calc_l1ss_info(link, parent_l1ss_cap, child_l1ss_cap);
|
||||
|
||||
/* 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;
|
||||
|
|
|
@ -5800,6 +5800,18 @@ 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);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0xa0b0, pci_fixup_enable_aspm);
|
||||
|
||||
static void nvidia_ion_ahci_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
|
||||
|
|
|
@ -235,6 +235,8 @@ enum pci_dev_flags {
|
|||
PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
|
||||
/* Device does honor MSI masking despite saying otherwise */
|
||||
PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
|
||||
/* Enable ASPM regardless of how LnkCtl is programmed */
|
||||
PCI_DEV_FLAGS_ENABLE_ASPM = (__force pci_dev_flags_t) (1 << 13),
|
||||
};
|
||||
|
||||
enum pci_irq_reroute_variant {
|
||||
|
|
Loading…
Reference in New Issue