• Rafael J. Wysocki's avatar
    PCI / PM: Restore PME Enable after config space restoration · 0ce3fcaf
    Rafael J. Wysocki authored
    Commit dc15e71e (PCI / PM: Restore PME Enable if skipping wakeup
    setup) introduced a mechanism by which the PME Enable bit can be
    restored by pci_enable_wake() if dev->wakeup_prepared is set in
    case it has been overwritten by PCI config space restoration.
    
    However, that commit overlooked the fact that on some systems (Dell
    XPS13 9360 in particular) the AML handling wakeup events checks PME
    Status and PME Enable and it won't trigger a Notify() for devices
    where those bits are not set while it is running.
    
    That happens during resume from suspend-to-idle when pci_restore_state()
    invoked by pci_pm_default_resume_early() clears PME Enable before the
    wakeup events are processed by AML, effectively causing those wakeup
    events to be ignored.
    
    Fix this issue by restoring the PME Enable configuration right after
    pci_restore_state() has been called instead of doing that in
    pci_enable_wake().
    
    Fixes: dc15e71e (PCI / PM: Restore PME Enable if skipping wakeup setup)
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    0ce3fcaf
pci-driver.c 36.1 KB