PCI/PM: Set current_state to D3cold if the device is not accessible
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 5 May 2022 18:04:07 +0000 (20:04 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 5 May 2022 19:19:48 +0000 (14:19 -0500)
Make pci_power_up() and pci_set_low_power_state() change current_state
to PCI_D3cold when the device is not accessible along the lines of
pci_update_current_state().

Link: https://lore.kernel.org/r/10104376.nUPlyArG6x@kreacher
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c

index f1bd87c5aa14ea484a7115d79e747dda2ae9d6bb..056e8284b5fd54934f95ba669342c1736f0eb37d 100644 (file)
@@ -1207,6 +1207,7 @@ int pci_power_up(struct pci_dev *dev)
        if (PCI_POSSIBLE_ERROR(pmcsr)) {
                pci_err(dev, "Unable to change power state from %s to D0, device inaccessible\n",
                        pci_power_name(dev->current_state));
+               dev->current_state = PCI_D3cold;
                return -EIO;
        }
 
@@ -1335,6 +1336,7 @@ static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state)
                pci_err(dev, "Unable to change power state from %s to %s, device inaccessible\n",
                        pci_power_name(dev->current_state),
                        pci_power_name(state));
+               dev->current_state = PCI_D3cold;
                return -EIO;
        }