|
@@ -5548,14 +5548,21 @@ static void __e1000e_disable_aspm(struct pci_dev *pdev, u16 state)
|
|
|
#else
|
|
|
static void __e1000e_disable_aspm(struct pci_dev *pdev, u16 state)
|
|
|
{
|
|
|
+ u16 aspm_ctl = 0;
|
|
|
+
|
|
|
+ if (state & PCIE_LINK_STATE_L0S)
|
|
|
+ aspm_ctl |= PCI_EXP_LNKCTL_ASPM_L0S;
|
|
|
+ if (state & PCIE_LINK_STATE_L1)
|
|
|
+ aspm_ctl |= PCI_EXP_LNKCTL_ASPM_L1;
|
|
|
+
|
|
|
/* Both device and parent should have the same ASPM setting.
|
|
|
* Disable ASPM in downstream component first and then upstream.
|
|
|
*/
|
|
|
- pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL, state);
|
|
|
+ pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL, aspm_ctl);
|
|
|
|
|
|
if (pdev->bus->self)
|
|
|
pcie_capability_clear_word(pdev->bus->self, PCI_EXP_LNKCTL,
|
|
|
- state);
|
|
|
+ aspm_ctl);
|
|
|
}
|
|
|
#endif
|
|
|
static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state)
|