OSDN Git Service

PCI/ASPM: Set ASPM_STATE_L1 when driver enables L1.1 or L1.2
authorAjay Agarwal <ajayagarwal@google.com>
Thu, 4 May 2023 11:12:59 +0000 (16:42 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 19 May 2023 15:26:49 +0000 (10:26 -0500)
Previously pci_enable_link_state(PCIE_LINK_STATE_L1_1) enabled only
ASPM_STATE_L1_1 and did not enable ASPM_STATE_L1.  The L1.1 state only
works when L1 is enabled, so enable ASPM_STATE_L1 in addition, and do the
same for L1.2.

The only current caller is vmd_pm_enable_quirk(), which enables *all* ASPM
states, so this should have no functional effect.

[bhelgaas: commit log]
Link: https://lore.kernel.org/r/20230504111301.229358-4-ajayagarwal@google.com
Signed-off-by: Ajay Agarwal <ajayagarwal@google.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/aspm.c

index a341019..338eede 100644 (file)
@@ -1174,14 +1174,15 @@ int pci_enable_link_state(struct pci_dev *pdev, int state)
                link->aspm_default |= ASPM_STATE_L0S;
        if (state & PCIE_LINK_STATE_L1)
                link->aspm_default |= ASPM_STATE_L1;
+       /* L1 PM substates require L1 */
        if (state & PCIE_LINK_STATE_L1_1)
-               link->aspm_default |= ASPM_STATE_L1_1;
+               link->aspm_default |= ASPM_STATE_L1_1 | ASPM_STATE_L1;
        if (state & PCIE_LINK_STATE_L1_2)
-               link->aspm_default |= ASPM_STATE_L1_2;
+               link->aspm_default |= ASPM_STATE_L1_2 | ASPM_STATE_L1;
        if (state & PCIE_LINK_STATE_L1_1_PCIPM)
-               link->aspm_default |= ASPM_STATE_L1_1_PCIPM;
+               link->aspm_default |= ASPM_STATE_L1_1_PCIPM | ASPM_STATE_L1;
        if (state & PCIE_LINK_STATE_L1_2_PCIPM)
-               link->aspm_default |= ASPM_STATE_L1_2_PCIPM;
+               link->aspm_default |= ASPM_STATE_L1_2_PCIPM | ASPM_STATE_L1;
        pcie_config_aspm_link(link, policy_to_aspm_state(link));
 
        link->clkpm_default = (state & PCIE_LINK_STATE_CLKPM) ? 1 : 0;