Message ID | 20191014230016.240912-4-helgaas@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | PCI: PM: Move to D0 before calling pci_legacy_resume_early() | expand |
On Tuesday, October 15, 2019 1:00:12 AM CEST Bjorn Helgaas wrote: > From: Bjorn Helgaas <bhelgaas@google.com> > > Previously, pci_pm_resume_noirq() cleared the PME Status bit in the Root > Status register only if the device had no driver or the driver did not > implement legacy power management. It should clear PME Status regardless > of what sort of power management the driver supports, so do this before > checking for legacy power management. > > This affects Root Ports and Root Complex Event Collectors, for which the > usual driver is the PCIe portdrv, which implements new power management, so > this change is just on principle, not to fix any actual defects. > > Fixes: a39bd851dccf ("PCI/PM: Clear PCIe PME Status bit in core, not PCIe port driver") > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> This is a reasonable change in my view, so Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > drivers/pci/pci-driver.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c > index d4ac8ce8c1f9..0c3086793e4e 100644 > --- a/drivers/pci/pci-driver.c > +++ b/drivers/pci/pci-driver.c > @@ -941,12 +941,11 @@ static int pci_pm_resume_noirq(struct device *dev) > pci_pm_default_resume_early(pci_dev); > > pci_fixup_device(pci_fixup_resume_early, pci_dev); > + pcie_pme_root_status_cleanup(pci_dev); > > if (pci_has_legacy_pm_support(pci_dev)) > return pci_legacy_resume_early(dev); > > - pcie_pme_root_status_cleanup(pci_dev); > - > if (drv && drv->pm && drv->pm->resume_noirq) > error = drv->pm->resume_noirq(dev); > >
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index d4ac8ce8c1f9..0c3086793e4e 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -941,12 +941,11 @@ static int pci_pm_resume_noirq(struct device *dev) pci_pm_default_resume_early(pci_dev); pci_fixup_device(pci_fixup_resume_early, pci_dev); + pcie_pme_root_status_cleanup(pci_dev); if (pci_has_legacy_pm_support(pci_dev)) return pci_legacy_resume_early(dev); - pcie_pme_root_status_cleanup(pci_dev); - if (drv && drv->pm && drv->pm->resume_noirq) error = drv->pm->resume_noirq(dev);