mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
Merge branch 'pci/pm'
- Only read PCI_PM_CTRL register when available, to avoid reading the wrong register and corrupting dev->current_state (Feiyang Chen) * pci/pm: PCI/PM: Only read PCI_PM_CTRL register when available
This commit is contained in:
commit
95cddeae54
|
|
@ -1226,6 +1226,10 @@ static int pci_dev_wait(struct pci_dev *dev, char *reset_type, int timeout)
|
|||
*
|
||||
* On success, return 0 or 1, depending on whether or not it is necessary to
|
||||
* restore the device's BARs subsequently (1 is returned in that case).
|
||||
*
|
||||
* On failure, return a negative error code. Always return failure if @dev
|
||||
* lacks a Power Management Capability, even if the platform was able to
|
||||
* put the device in D0 via non-PCI means.
|
||||
*/
|
||||
int pci_power_up(struct pci_dev *dev)
|
||||
{
|
||||
|
|
@ -1242,9 +1246,6 @@ int pci_power_up(struct pci_dev *dev)
|
|||
else
|
||||
dev->current_state = state;
|
||||
|
||||
if (state == PCI_D0)
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
|
@ -1302,8 +1303,12 @@ static int pci_set_full_power_state(struct pci_dev *dev)
|
|||
int ret;
|
||||
|
||||
ret = pci_power_up(dev);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
if (dev->current_state == PCI_D0)
|
||||
return 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
|
||||
dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user