diff options
Diffstat (limited to 'drivers/pci/pci.c')
| -rw-r--r-- | drivers/pci/pci.c | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 1c8592b0e146..2c9ac70254e2 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -839,12 +839,6 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state)  	if (!__pci_complete_power_transition(dev, state))  		error = 0; -	/* -	 * When aspm_policy is "powersave" this call ensures -	 * that ASPM is configured. -	 */ -	if (!error && dev->bus->self) -		pcie_aspm_powersave_config_link(dev->bus->self);  	return error;  } @@ -1195,12 +1189,18 @@ int __weak pcibios_enable_device(struct pci_dev *dev, int bars)  static int do_pci_enable_device(struct pci_dev *dev, int bars)  {  	int err; +	struct pci_dev *bridge;  	u16 cmd;  	u8 pin;  	err = pci_set_power_state(dev, PCI_D0);  	if (err < 0 && err != -EIO)  		return err; + +	bridge = pci_upstream_bridge(dev); +	if (bridge) +		pcie_aspm_powersave_config_link(bridge); +  	err = pcibios_enable_device(dev, bars);  	if (err < 0)  		return err; @@ -3198,7 +3198,7 @@ static int pci_pm_reset(struct pci_dev *dev, int probe)  	return 0;  } -void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) +void pci_reset_secondary_bus(struct pci_dev *dev)  {  	u16 ctrl; @@ -3224,6 +3224,11 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev)  	ssleep(1);  } +void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) +{ +	pci_reset_secondary_bus(dev); +} +  /**   * pci_reset_bridge_secondary_bus - Reset the secondary bus on a PCI bridge.   * @dev: Bridge device  |