summaryrefslogtreecommitdiffstats
path: root/Documentation/power
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-10-25 08:12:29 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-11-06 07:55:30 -0500
commit08810a4119aaebf6318f209ec5dd9828e969cba4 (patch)
tree9ee6db2759e7005c5a2bdc3e1b1c33cf11d9dd12 /Documentation/power
parent69a10ca747c2d2d7c0354a883335e097c067ed35 (diff)
PM / core: Add NEVER_SKIP and SMART_PREPARE driver flags
The motivation for this change is to provide a way to work around a problem with the direct-complete mechanism used for avoiding system suspend/resume handling for devices in runtime suspend. The problem is that some middle layer code (the PCI bus type and the ACPI PM domain in particular) returns positive values from its system suspend ->prepare callbacks regardless of whether the driver's ->prepare returns a positive value or 0, which effectively prevents drivers from being able to control the direct-complete feature. Some drivers need that control, however, and the PCI bus type has grown its own flag to deal with this issue, but since it is not limited to PCI, it is better to address it by adding driver flags at the core level. To that end, add a driver_flags field to struct dev_pm_info for flags that can be set by device drivers at the probe time to inform the PM core and/or bus types, PM domains and so on on the capabilities and/or preferences of device drivers. Also add two static inline helpers for setting that field and testing it against a given set of flags and make the driver core clear it automatically on driver remove and probe failures. Define and document two PM driver flags related to the direct- complete feature: NEVER_SKIP and SMART_PREPARE that can be used, respectively, to indicate to the PM core that the direct-complete mechanism should never be used for the device and to inform the middle layer code (bus types, PM domains etc) that it can only request the PM core to use the direct-complete mechanism for the device (by returning a positive value from its ->prepare callback) if it also has been requested by the driver. While at it, make the core check pm_runtime_suspended() when setting power.direct_complete so that it doesn't need to be checked by ->prepare callbacks. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'Documentation/power')
-rw-r--r--Documentation/power/pci.txt19
1 files changed, 19 insertions, 0 deletions
diff --git a/Documentation/power/pci.txt b/Documentation/power/pci.txt
index a1b7f7158930..ab4e7d0540c1 100644
--- a/Documentation/power/pci.txt
+++ b/Documentation/power/pci.txt
@@ -961,6 +961,25 @@ dev_pm_ops to indicate that one suspend routine is to be pointed to by the
961.suspend(), .freeze(), and .poweroff() members and one resume routine is to 961.suspend(), .freeze(), and .poweroff() members and one resume routine is to
962be pointed to by the .resume(), .thaw(), and .restore() members. 962be pointed to by the .resume(), .thaw(), and .restore() members.
963 963
9643.1.19. Driver Flags for Power Management
965
966The PM core allows device drivers to set flags that influence the handling of
967power management for the devices by the core itself and by middle layer code
968including the PCI bus type. The flags should be set once at the driver probe
969time with the help of the dev_pm_set_driver_flags() function and they should not
970be updated directly afterwards.
971
972The DPM_FLAG_NEVER_SKIP flag prevents the PM core from using the direct-complete
973mechanism allowing device suspend/resume callbacks to be skipped if the device
974is in runtime suspend when the system suspend starts. That also affects all of
975the ancestors of the device, so this flag should only be used if absolutely
976necessary.
977
978The DPM_FLAG_SMART_PREPARE flag instructs the PCI bus type to only return a
979positive value from pci_pm_prepare() if the ->prepare callback provided by the
980driver of the device returns a positive value. That allows the driver to opt
981out from using the direct-complete mechanism dynamically.
982
9643.2. Device Runtime Power Management 9833.2. Device Runtime Power Management
965------------------------------------ 984------------------------------------
966In addition to providing device power management callbacks PCI device drivers 985In addition to providing device power management callbacks PCI device drivers