aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-09-17 21:08:40 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-09-24 20:48:44 -0400
commita8360062ccfb4b891d3013d0e55826c8bcb02bfb (patch)
treebc1dca9dd20f6e325ec828854d5f189a0586a564 /Documentation
parent1f93e4a96c9109378204c147b3eec0d0e8100fde (diff)
PCI / PM: Update runtime PM documentation for PCI devices
Section 3.2 "Device Runtime Power Management" of pci.txt has become outdated, so update it to correctly reflect the current code flow. Also update the comment in local_pci_probe() to document the fact that pm_runtime_put_noidle() is not the only runtime PM helper function that can be used to decrement the device's runtime PM usage counter in .probe(). Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Alan Stern <stern@rowland.harvard.edu>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/power/pci.txt51
1 files changed, 38 insertions, 13 deletions
diff --git a/Documentation/power/pci.txt b/Documentation/power/pci.txt
index 62328d76b55b..b0e911e0e8f5 100644
--- a/Documentation/power/pci.txt
+++ b/Documentation/power/pci.txt
@@ -979,20 +979,45 @@ every time right after the runtime_resume() callback has returned
979(alternatively, the runtime_suspend() callback will have to check if the 979(alternatively, the runtime_suspend() callback will have to check if the
980device should really be suspended and return -EAGAIN if that is not the case). 980device should really be suspended and return -EAGAIN if that is not the case).
981 981
982The runtime PM of PCI devices is disabled by default. It is also blocked by 982The runtime PM of PCI devices is enabled by default by the PCI core. PCI
983pci_pm_init() that runs the pm_runtime_forbid() helper function. If a PCI 983device drivers do not need to enable it and should not attempt to do so.
984driver implements the runtime PM callbacks and intends to use the runtime PM 984However, it is blocked by pci_pm_init() that runs the pm_runtime_forbid()
985framework provided by the PM core and the PCI subsystem, it should enable this 985helper function. In addition to that, the runtime PM usage counter of
986feature by executing the pm_runtime_enable() helper function. However, the 986each PCI device is incremented by local_pci_probe() before executing the
987driver should not call the pm_runtime_allow() helper function unblocking 987probe callback provided by the device's driver.
988the runtime PM of the device. Instead, it should allow user space or some 988
989platform-specific code to do that (user space can do it via sysfs), although 989If a PCI driver implements the runtime PM callbacks and intends to use the
990once it has called pm_runtime_enable(), it must be prepared to handle the 990runtime PM framework provided by the PM core and the PCI subsystem, it needs
991to decrement the device's runtime PM usage counter in its probe callback
992function. If it doesn't do that, the counter will always be different from
993zero for the device and it will never be runtime-suspended. The simplest
994way to do that is by calling pm_runtime_put_noidle(), but if the driver
995wants to schedule an autosuspend right away, for example, it may call
996pm_runtime_put_autosuspend() instead for this purpose. Generally, it
997just needs to call a function that decrements the devices usage counter
998from its probe routine to make runtime PM work for the device.
999
1000It is important to remember that the driver's runtime_suspend() callback
1001may be executed right after the usage counter has been decremented, because
1002user space may already have cuased the pm_runtime_allow() helper function
1003unblocking the runtime PM of the device to run via sysfs, so the driver must
1004be prepared to cope with that.
1005
1006The driver itself should not call pm_runtime_allow(), though. Instead, it
1007should let user space or some platform-specific code do that (user space can
1008do it via sysfs as stated above), but it must be prepared to handle the
991runtime PM of the device correctly as soon as pm_runtime_allow() is called 1009runtime PM of the device correctly as soon as pm_runtime_allow() is called
992(which may happen at any time). [It also is possible that user space causes 1010(which may happen at any time, even before the driver is loaded).
993pm_runtime_allow() to be called via sysfs before the driver is loaded, so in 1011
994fact the driver has to be prepared to handle the runtime PM of the device as 1012When the driver's remove callback runs, it has to balance the decrementation
995soon as it calls pm_runtime_enable().] 1013of the device's runtime PM usage counter at the probe time. For this reason,
1014if it has decremented the counter in its probe callback, it must run
1015pm_runtime_get_noresume() in its remove callback. [Since the core carries
1016out a runtime resume of the device and bumps up the device's usage counter
1017before running the driver's remove callback, the runtime PM of the device
1018is effectively disabled for the duration of the remove execution and all
1019runtime PM helper functions incrementing the device's usage counter are
1020then effectively equivalent to pm_runtime_get_noresume().]
996 1021
997The runtime PM framework works by processing requests to suspend or resume 1022The runtime PM framework works by processing requests to suspend or resume
998devices, or to check if they are idle (in which cases it is reasonable to 1023devices, or to check if they are idle (in which cases it is reasonable to