• Rafael J. Wysocki's avatar
    PCI: PM/ACPI: Refresh all stale power state data in pci_pm_complete() · b51033e0
    Rafael J. Wysocki authored
    In pci_pm_complete() there are checks to decide whether or not to
    resume devices that were left in runtime-suspend during the preceding
    system-wide transition into a sleep state.  They involve checking the
    current power state of the device and comparing it with the power
    state of it set before the preceding system-wide transition, but the
    platform component of the device's power state is not handled
    correctly in there.
    
    Namely, on platforms with ACPI, the device power state information
    needs to be updated with care, so that the reference counters of
    power resources used by the device (if any) are set to ensure that
    the refreshed power state of it will be maintained going forward.
    
    To that end, introduce a new ->refresh_state() platform PM callback
    for PCI devices, for asking the platform to refresh the device power
    state data and ensure that the corresponding power state will be
    maintained going forward, make it invoke acpi_device_update_power()
    (for devices with ACPI PM) on platforms with ACPI and make
    pci_pm_complete() use it, through a new pci_refresh_power_state()
    wrapper function.
    
    Fixes: a0d2a959 (PCI: Avoid unnecessary resume after direct-complete)
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    b51033e0
pci-acpi.c 26.2 KB