The assumption made in commit 41cd766b065970ff6f6c89dd1cf55fa706c84a3d(PCI: Don't enable aspm before drivers have had a chance to veto it) thatpci_enable_device() will result in re-configuring ASPM when aspm_policy isPOWERSAVE is no longer valid. This is due to commit97c145f7c87453cec90e91238fba5fe2c1561b32 (PCI: read current power stateat enable time) which resets dev->current_state to D0. Due to this thecall to pcie_aspm_pm_state_change() is never made. Note the equality check(below) that returns early:./drivers/pci/pci.c: pci_raw_set_pci_power_state()546 /* Check if we're already there */547 if (dev->current_state == state)548 return 0;Therefore OSPM never configures the PCIe links for ASPM to turn them "on".

Fix it by configuring ASPM from the pci_enable_device() code path. This also allows a driver such as the e1000e networking driver a chance to disable ASPM (L0s, L1), if need be, prior to enabling the device. A driver may perform this action if the device is known to mis-behave wrt ASPM.