xref: /linux/Documentation/power/runtime_pm.rst (revision 5b193d6a8973655f19de87a7873ce31dee2d5fe6)
1==================================================
2Runtime Power Management Framework for I/O Devices
3==================================================
4
5(C) 2009-2011 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
6
7(C) 2010 Alan Stern <stern@rowland.harvard.edu>
8
9(C) 2014 Intel Corp., Rafael J. Wysocki <rafael.j.wysocki@intel.com>
10
11.. _Section 1:
12
131. Introduction
14===============
15
16Runtime power management (or runtime PM, sometimes also referred to as RPM)
17allows individual I/O devices that are not in active use to be put into
18low-power states, in which they may not be operational or even accessible, and
19go back to the fully operational state as needed.  Power can be reduced this
20way without waiting for a transition into a system-wide sleep state.
21
22Core Concepts
23-------------
24
25Runtime PM operates around a few device-level concepts — whether a device is
26**active** or **suspended**; whether runtime PM is **enabled** or **disabled**;
27whether runtime PM is **allowed** or **forbidden**; and whether a device is
28**in use**.
29
30* **Active**: Runtime PM tracks whether or not devices are in active use, which
31  generally means that they are accessible and operational, and may be depended
32  on by something (for example, other devices or user space).  This is
33  represented by the **active** meta-state.  By contrast, the **suspended**
34  meta-state represents a promise that the given device will not be accessed.
35  This covers devices in low-power states, but it also may include devices that
36  are not fully operational.  There are also two transient meta-states,
37  **suspending** and **resuming**, representing transitions between **active**
38  and **suspended** often referred to as *runtime suspend* and *runtime
39  resume*, or just *suspend* and *resume*, respectively.  Every device handled
40  by runtime PM is in one of these four meta-states at any time, and its
41  meta-state is expected to reflect its actual physical configuration (that is,
42  for instance, if the device is not accessible, it must not be **active**).
43  The term "runtime PM status" used in what follows refers to the meta-states
44  described above.
45
46* **Enabled**: In order to track the runtime PM status and carry out
47  transitions between **active** and **suspended**, runtime PM needs to be
48  **enabled** for the given device.  If it is **disabled**, runtime PM
49  generally leaves the device alone.  This means in particular that the runtime
50  PM status of a device and its actual physical configuration may get out of
51  sync after disabling runtime PM for it.  Additionally, the runtime PM status
52  of a device may need to be explicitly adjusted to reflect its current
53  physical configuration before enabling runtime PM for it (e.g., during device
54  probe).  Once runtime PM is **enabled**, it begins managing PM status —
55  performing *runtime suspend* and *runtime resume* transitions based on its
56  understanding of whether a device is in use.
57
58  As a rule, all devices are initialized with runtime PM **disabled**, though
59  some bus types (such as PCI) manage some RPM initialization automatically,
60  and therefore probe devices in an **enabled** state.  For other devices,
61  drivers must enable runtime PM on their own to opt in.
62
63* **Allowed**: Runtime PM may be **forbidden** even though it has been enabled.
64  Doing so causes the given device to transition into the **active** meta-state
65  and prevents it from being suspended.  In other words, a device with
66  forbidden runtime PM remains **active** at least until runtime PM is
67  **allowed** for it again.  This mechanism can be managed by in-kernel APIs,
68  but more importantly, it is also available to user space via the
69  ``/sys/devices/.../power/control`` sysfs attribute of the given device.
70  Namely, writing ``on`` to that attribute forbids runtime PM, and writing
71  ``auto`` allows it.  User space may modify that attribute at any time, so the
72  ability to transition a device into the **suspended** meta-state via runtime
73  PM must not be relied on for correctness.
74
75* **In use**: Runtime PM determines whether a device should be transitioned to
76  an **active** state by its understanding of whether a device is in use.  The
77  first way a device is considered **in use** is by its own usage count — a
78  reference counter driven by a variety of get()/put() APIs.  Additionally, a
79  device may be considered **in use** by having active dependents — either
80  child devices, or device-linked consumers.  When a device is no longer in
81  use, runtime PM may choose to transition it to the **suspended** state.
82
83  Thus, when a device moves from **suspended** to **active**, it may also cause
84  its dependencies to resume, unless they are **active** already.  Conversely,
85  suspending a device may also cause its otherwise-unused dependencies to
86  suspend.
87
88* **Autosuspend**: Runtime PM also supports a feature called "autosuspend."
89  This is different than the ``control`` notion of "auto" (i.e., **allowed**).
90  Autosuspend is covered in `Section 9`_.
91
92Implementation Structure
93------------------------
94
95Support for runtime power management is provided at the power management core
96(PM core) level by means of:
97
98* Three device runtime PM callbacks in 'struct dev_pm_ops' (defined in
99  include/linux/pm.h). See `Section 2`_.
100
101* A number of runtime PM fields in the 'power' member of 'struct device' that
102  can be used for synchronizing runtime PM operations with one another. These
103  are covered in `Section 3`_.
104
105* A set of helper functions defined in drivers/base/power/runtime.c that can be
106  used for carrying out runtime PM operations in such a way that the
107  synchronization between them is taken care of by the PM core. Bus types and
108  device drivers are encouraged to use these functions. They are covered in
109  `Section 4`_.
110
111* The power management workqueue pm_wq in which bus types and device drivers can
112  put their PM-related work items. It is strongly recommended that pm_wq be
113  used for queuing all work items related to runtime PM, because this allows
114  them to be synchronized with system-wide power transitions (suspend to RAM,
115  hibernation and resume from system sleep states). pm_wq is declared in
116  include/linux/pm_runtime.h and defined in kernel/power/main.c.
117
118.. _Section 2:
119
1202. Device Runtime PM Callbacks
121==============================
122
123There are three device runtime PM callbacks defined in 'struct dev_pm_ops'::
124
125  struct dev_pm_ops {
126	...
127	int (*runtime_suspend)(struct device *dev);
128	int (*runtime_resume)(struct device *dev);
129	int (*runtime_idle)(struct device *dev);
130	...
131  };
132
133Most device drivers only need to implement ->runtime_suspend() and
134->runtime_resume(). The ->runtime_idle() callback is optional and rarely
135implemented by peripheral device drivers, as the PM core automatically handles
136suspension and autosuspend when ->runtime_idle() is omitted (or returns 0).
137
138Subsystem and Driver Callbacks
139------------------------------
140
141The ->runtime_suspend(), ->runtime_resume() and ->runtime_idle() callbacks
142are executed by the PM core for the device's subsystem that may be either of
143the following:
144
145  1. PM domain of the device, if the device's PM domain object, dev->pm_domain,
146     is present.
147
148  2. Device type of the device, if both dev->type and dev->type->pm are present.
149
150  3. Device class of the device, if both dev->class and dev->class->pm are
151     present.
152
153  4. Bus type of the device, if both dev->bus and dev->bus->pm are present.
154
155If the subsystem chosen by applying the above rules doesn't provide the relevant
156callback, the PM core will invoke the corresponding driver callback stored in
157dev->driver->pm directly (if present).
158
159The PM core always checks which callback to use in the order given above, so the
160priority order of callbacks from high to low is: PM domain, device type, class
161and bus type.  Moreover, the high-priority one will always take precedence over
162a low-priority one.  The PM domain, bus type, device type and class callbacks
163are referred to as subsystem-level callbacks in what follows.
164
165By default, the callbacks are always invoked in process context with interrupts
166enabled.  However, the pm_runtime_irq_safe() helper function can be used to tell
167the PM core that it is safe to run the ->runtime_suspend(), ->runtime_resume()
168and ->runtime_idle() callbacks for the given device in atomic context with
169interrupts disabled.  This implies that the callback routines in question must
170not block or sleep, but it also means that the synchronous helper functions
171listed at the end of `Section 4`_ may be used for that device within an
172interrupt handler or generally in an atomic context.
173
174Callback Semantics
175------------------
176
177The subsystem-level suspend callback, if present, is _entirely_ _responsible_
178for handling the suspend of the device as appropriate, which may, but need not
179include executing the device driver's own ->runtime_suspend() callback (from the
180PM core's point of view it is not necessary to implement a ->runtime_suspend()
181callback in a device driver as long as the subsystem-level suspend callback
182knows what to do to handle the device).
183
184  * Once the subsystem-level suspend callback (or the driver suspend callback,
185    if invoked directly) has completed successfully for the given device, the PM
186    core regards the device as suspended, which need not mean that it has been
187    put into a low power state.  It is supposed to mean, however, that the
188    device will not process data and will not communicate with the CPU(s) and
189    RAM until the appropriate resume callback is executed for it.  The runtime
190    PM status of a device after successful execution of the suspend callback is
191    'suspended'.
192
193  * If the suspend callback returns -EBUSY or -EAGAIN, the device's runtime PM
194    status remains 'active', which means that the device _must_ be fully
195    operational afterwards.
196
197  * If the suspend callback returns an error code different from -EBUSY and
198    -EAGAIN, the PM core regards this as a fatal error and will refuse to run
199    the helper functions described in `Section 4`_ for the device until its
200    status is directly set to  either 'active', or 'suspended' (the PM core
201    provides special helper functions for this purpose).
202
203In particular, if the driver requires remote wakeup capability (i.e. hardware
204mechanism allowing the device to request a change of its power state, such as
205PCI PME) for proper functioning and device_can_wakeup() returns 'false' for the
206device, then ->runtime_suspend() should return -EBUSY.  On the other hand, if
207device_can_wakeup() returns 'true' for the device and the device is put into a
208low-power state during the execution of the suspend callback, it is expected
209that remote wakeup will be enabled for the device.  Generally, remote wakeup
210should be enabled for all input devices put into low-power states at run time.
211
212The subsystem-level resume callback, if present, is **entirely responsible** for
213handling the resume of the device as appropriate, which may, but need not
214include executing the device driver's own ->runtime_resume() callback (from the
215PM core's point of view it is not necessary to implement a ->runtime_resume()
216callback in a device driver as long as the subsystem-level resume callback knows
217what to do to handle the device).
218
219  * Once the subsystem-level resume callback (or the driver resume callback, if
220    invoked directly) has completed successfully, the PM core regards the device
221    as fully operational, which means that the device _must_ be able to complete
222    I/O operations as needed.  The runtime PM status of the device is then
223    'active'.
224
225  * If the resume callback returns an error code, the PM core regards this as a
226    fatal error and will refuse to run the helper functions described in
227    `Section 4`_ for the device, until its status is directly set to either
228    'active', or 'suspended' (by means of special helper functions provided by
229    the PM core for this purpose).
230
231The idle callback (a subsystem-level one, if present, or the driver one) is
232executed by the PM core whenever the device appears to be idle, which is
233indicated to the PM core by two counters, the device's usage counter and the
234counter of 'active' children of the device.
235
236  * If any of these counters is decreased using a helper function provided by
237    the PM core and it turns out to be equal to zero, the other counter is
238    checked.  If that counter also is equal to zero, the PM core executes the
239    idle callback with the device as its argument.
240
241The action performed by the idle callback is totally dependent on the subsystem
242(or driver) in question, but the expected and recommended action is to check
243if the device can be suspended (i.e. if all of the conditions necessary for
244suspending the device are satisfied) and to queue up a suspend request for the
245device in that case.  If there is no idle callback, or if the callback returns
2460, then the PM core will attempt to carry out a runtime suspend of the device,
247also respecting devices configured for autosuspend.  In essence this means a
248call to pm_runtime_autosuspend().
249
250To prevent this suspension (for example, if the callback routine has scheduled
251a delayed suspend or determined the device cannot be idle), the routine must
252return a non-zero value (typically -EBUSY or -EAGAIN).  Unlike
253->runtime_suspend() and ->runtime_resume(), the PM core does not treat negative
254return codes from ->runtime_idle() as a fatal device error; any non-zero value
255simply stops the PM core from suspending the device.
256
257Core Guarantees and Synchronization Rules
258-----------------------------------------
259
260The helper functions provided by the PM core, described in `Section 4`_,
261guarantee that the following constraints are met with respect to runtime PM
262callbacks for one device:
263
264(1) The callbacks are mutually exclusive (e.g. it is forbidden to execute
265    ->runtime_suspend() in parallel with ->runtime_resume() or with another
266    instance of ->runtime_suspend() for the same device) with the exception that
267    ->runtime_suspend() or ->runtime_resume() can be executed in parallel with
268    ->runtime_idle() (although ->runtime_idle() will not be started while any
269    of the other callbacks is being executed for the same device).
270
271(2) ->runtime_idle() and ->runtime_suspend() can only be executed for 'active'
272    devices (i.e. the PM core will only execute ->runtime_idle() or
273    ->runtime_suspend() for the devices the runtime PM status of which is
274    'active').
275
276(3) ->runtime_idle() and ->runtime_suspend() can only be executed for a device
277    the usage counter of which is equal to zero _and_ either the counter of
278    'active' children of which is equal to zero, or the 'power.ignore_children'
279    flag of which is set.
280
281(4) ->runtime_resume() can only be executed for 'suspended' devices  (i.e. the
282    PM core will only execute ->runtime_resume() for the devices the runtime
283    PM status of which is 'suspended').
284
285Additionally, the helper functions provided by the PM core obey the following
286rules:
287
288  * If ->runtime_suspend() is about to be executed or there's a pending request
289    to execute it, ->runtime_idle() will not be executed for the same device.
290
291  * A request to execute or to schedule the execution of ->runtime_suspend()
292    will cancel any pending requests to execute ->runtime_idle() for the same
293    device.
294
295  * If ->runtime_resume() is about to be executed or there's a pending request
296    to execute it, the other callbacks will not be executed for the same device.
297
298  * A request to execute ->runtime_resume() will cancel any pending or
299    scheduled requests to execute the other callbacks for the same device,
300    except for scheduled autosuspends.
301
302.. _Section 3:
303
3043. Runtime PM Device Fields
305===========================
306
307Device PM fields are found in 'struct dev_pm_info', as defined in
308include/linux/pm.h. Many of those fields track runtime PM configuration and
309state.
310
311.. kernel-doc:: include/linux/pm.h
312   :identifiers: dev_pm_info
313
314.. _Section 4:
315
3164. Runtime PM Device Helper Functions
317=====================================
318
319The following runtime PM helper functions are defined in
320drivers/base/power/runtime.c and include/linux/pm_runtime.h:
321
322.. kernel-doc:: drivers/base/power/runtime.c
323   :export:
324
325.. kernel-doc:: include/linux/pm_runtime.h
326
327It is safe to execute the following helper functions from interrupt context:
328
329- pm_request_idle()
330- pm_request_autosuspend()
331- pm_schedule_suspend()
332- pm_request_resume()
333- pm_runtime_get_noresume()
334- pm_runtime_get()
335- pm_runtime_get_if_active()
336- pm_runtime_get_if_in_use()
337- pm_runtime_put_noidle()
338- pm_runtime_put()
339- pm_runtime_put_autosuspend()
340- __pm_runtime_put_autosuspend()
341- pm_runtime_enable()
342- pm_suspend_ignore_children()
343- pm_runtime_set_active()
344- pm_runtime_set_suspended()
345- pm_runtime_suspended()
346- pm_runtime_active()
347- pm_runtime_status_suspended()
348- pm_runtime_enabled()
349- pm_runtime_mark_last_busy()
350- pm_runtime_autosuspend_expiration()
351
352If pm_runtime_irq_safe() has been called for a device then the following helper
353functions may also be used in interrupt context:
354
355- pm_runtime_idle()
356- pm_runtime_suspend()
357- pm_runtime_autosuspend()
358- pm_runtime_resume()
359- pm_runtime_get_sync()
360- pm_runtime_resume_and_get()
361- pm_runtime_put_sync()
362- pm_runtime_put_sync_suspend()
363- pm_runtime_put_sync_autosuspend()
364
365.. _Section 5:
366
3675. Runtime PM Initialization, Device Probing and Removal
368========================================================
369
370Initially, the runtime PM is disabled for all devices, which means that the
371majority of the runtime PM helper functions described in `Section 4`_ will
372return -EACCES until pm_runtime_enable() is called for the device.
373
374In addition to that, the initial runtime PM status of all devices is
375'suspended', but it need not reflect the actual physical state of the device.
376Thus, if the device is initially active (i.e. it is able to process I/O), its
377runtime PM status must be changed to 'active', with the help of
378pm_runtime_set_active(), before pm_runtime_enable() is called for the device.
379
380However, if the device has a parent and the parent's runtime PM is enabled,
381calling pm_runtime_set_active() for the device will affect the parent, unless
382the parent's 'power.ignore_children' flag is set.  Namely, in that case the
383parent won't be able to suspend at run time, using the PM core's helper
384functions, as long as the child's status is 'active', even if the child's
385runtime PM is still disabled (i.e. pm_runtime_enable() hasn't been called for
386the child yet or pm_runtime_disable() has been called for it).  For this reason,
387once pm_runtime_set_active() has been called for the device, pm_runtime_enable()
388should be called for it too as soon as reasonably possible or its runtime PM
389status should be changed back to 'suspended' with the help of
390pm_runtime_set_suspended().
391
392If the default initial runtime PM status of the device (i.e. 'suspended')
393reflects the actual state of the device, its bus type's or its driver's
394->probe() callback will likely need to wake it up using one of the PM core's
395helper functions described in `Section 4`_.  In that case, pm_runtime_resume()
396should be used.  Of course, for this purpose the device's runtime PM has to be
397enabled earlier by calling pm_runtime_enable().
398
399Note, if the device may execute pm_runtime calls during the probe (such as
400if it is registered with a subsystem that may call back in) then the
401pm_runtime_resume_and_get() call paired with a pm_runtime_put() call will be
402appropriate to ensure that the device is not put back to sleep during the
403probe. This can happen with systems such as the network device layer.
404
405It may be desirable to suspend the device once ->probe() has finished.
406Therefore the driver core uses the asynchronous pm_request_idle() to submit a
407request to execute the subsystem-level idle callback for the device at that
408time.  A driver that makes use of the runtime autosuspend feature may want to
409update the last busy mark before returning from ->probe().
410
411Moreover, the driver core prevents runtime PM callbacks from racing with the bus
412notifier callback in __device_release_driver(), which is necessary because the
413notifier is used by some subsystems to carry out operations affecting the
414runtime PM functionality.  It does so by calling pm_runtime_get_sync() before
415driver_sysfs_remove() and the BUS_NOTIFY_UNBIND_DRIVER notifications.  This
416resumes the device if it's in the suspended state and prevents it from
417being suspended again while those routines are being executed.
418
419To allow bus types and drivers to put devices into the suspended state by
420calling pm_runtime_suspend() from their ->remove() routines, the driver core
421executes pm_runtime_put_sync() after running the BUS_NOTIFY_UNBIND_DRIVER
422notifications in __device_release_driver().  This requires bus types and
423drivers to make their ->remove() callbacks avoid races with runtime PM directly,
424but it also allows more flexibility in the handling of devices during the
425removal of their drivers.
426
427Drivers in ->remove() callback should undo the runtime PM changes done
428in ->probe(). Usually this means calling pm_runtime_disable(),
429pm_runtime_dont_use_autosuspend() etc. Alternatively, drivers can use
430devm_pm_runtime_enable() during probe, which automatically takes care of
431calling pm_runtime_disable() and pm_runtime_dont_use_autosuspend() upon driver
432detachment.
433
434The user space can effectively disallow the driver of the device to power manage
435it at run time by changing the value of its /sys/devices/.../power/control
436attribute to "on", which causes pm_runtime_forbid() to be called.  In principle,
437this mechanism may also be used by the driver to effectively turn off the
438runtime power management of the device until the user space turns it on.
439Namely, during the initialization the driver can make sure that the runtime PM
440status of the device is 'active' and call pm_runtime_forbid().  It should be
441noted, however, that if the user space has already intentionally changed the
442value of /sys/devices/.../power/control to "auto" to allow the driver to power
443manage the device at run time, the driver may confuse it by using
444pm_runtime_forbid() this way.
445
446.. _Section 6:
447
4486. Runtime PM and System Sleep
449==============================
450
451Runtime PM and system sleep (i.e., system suspend and hibernation, also known
452as suspend-to-RAM and suspend-to-disk) interact with each other in a couple of
453ways.  If a device is active when a system sleep starts, everything is
454straightforward.  But what should happen if the device is already suspended?
455
456The device may have different wake-up settings for runtime PM and system sleep.
457For example, remote wake-up may be enabled for runtime suspend but disallowed
458for system sleep (device_may_wakeup(dev) returns 'false').  When this happens,
459the subsystem-level system suspend callback is responsible for changing the
460device's wake-up setting (it may leave that to the device driver's system
461suspend routine).  It may be necessary to resume the device and suspend it again
462in order to do so.  The same is true if the driver uses different power levels
463or other settings for runtime suspend and system sleep.
464
465During system resume, the simplest approach is to bring all devices back to full
466power, even if they had been suspended before the system suspend began.  There
467are several reasons for this, including:
468
469  * The device might need to switch power levels, wake-up settings, etc.
470
471  * Remote wake-up events might have been lost by the firmware.
472
473  * The device's children may need the device to be at full power in order
474    to resume themselves.
475
476  * The driver's idea of the device state may not agree with the device's
477    physical state.  This can happen during resume from hibernation.
478
479  * The device might need to be reset.
480
481  * Even though the device was suspended, if its usage counter was > 0 then most
482    likely it would need a runtime resume in the near future anyway.
483
484If the device had been suspended before the system suspend began and it's
485brought back to full power during resume, then its runtime PM status will have
486to be updated to reflect the actual post-system sleep status.  The way to do
487this is:
488
489	 - pm_runtime_disable(dev);
490	 - pm_runtime_set_active(dev);
491	 - pm_runtime_enable(dev);
492
493The PM core always increments the runtime usage counter before calling the
494->suspend() callback and decrements it after calling the ->resume() callback.
495Hence disabling runtime PM temporarily like this will not cause any runtime
496suspend attempts to be permanently lost.  If the usage count goes to zero
497following the return of the ->resume() callback, the ->runtime_idle() callback
498will be invoked as usual.
499
500On some systems, however, system sleep is not entered through a global firmware
501or hardware operation.  Instead, all hardware components are put into low-power
502states directly by the kernel in a coordinated way.  Then, the system sleep
503state effectively follows from the states the hardware components end up in
504and the system is woken up from that state by a hardware interrupt or a similar
505mechanism entirely under the kernel's control.  As a result, the kernel never
506gives control away and the states of all devices during resume are precisely
507known to it.  If that is the case and none of the situations listed above takes
508place (in particular, if the system is not waking up from hibernation), it may
509be more efficient to leave the devices that had been suspended before the system
510suspend began in the suspended state.
511
512To this end, the PM core provides a mechanism allowing some coordination between
513different levels of device hierarchy.  Namely, if a system suspend .prepare()
514callback returns a positive number for a device, that indicates to the PM core
515that the device appears to be runtime-suspended and its state is fine, so it
516may be left in runtime suspend provided that all of its descendants are also
517left in runtime suspend.  If that happens, the PM core will not execute any
518system suspend and resume callbacks for all of those devices, except for the
519.complete() callback, which is then entirely responsible for handling the device
520as appropriate.  This only applies to system suspend transitions that are not
521related to hibernation (see Documentation/driver-api/pm/devices.rst for more
522information).
523
524The PM core does its best to reduce the probability of race conditions between
525the runtime PM and system suspend/resume (and hibernation) callbacks by carrying
526out the following operations:
527
528  * During system suspend pm_runtime_get_noresume() is called for every device
529    right before executing the subsystem-level .prepare() callback for it and
530    pm_runtime_barrier() is called for every device right before executing the
531    subsystem-level .suspend() callback for it.  In addition to that, the PM
532    core disables runtime PM for every device right before executing the
533    subsystem-level .suspend_late() callback for it.
534
535  * During system resume pm_runtime_enable() and pm_runtime_put() are called for
536    every device right after executing the subsystem-level .resume_early()
537    callback and right after executing the subsystem-level .complete() callback
538    for it, respectively.
539
540.. _Section 7:
541
5427. Generic subsystem callbacks
543==============================
544
545Subsystems may wish to conserve code space by using the set of generic power
546management callbacks provided by the PM core, defined in
547drivers/base/power/generic_ops.c:
548
549.. kernel-doc:: drivers/base/power/generic_ops.c
550   :export:
551
552These functions are the defaults used by the PM core if a subsystem doesn't
553provide its own callbacks for ->runtime_idle(), ->runtime_suspend(),
554->runtime_resume(), ->suspend(), ->suspend_noirq(), ->resume(),
555->resume_noirq(), ->freeze(), ->freeze_noirq(), ->thaw(), ->thaw_noirq(),
556->poweroff(), ->poweroff_noirq(), ->restore(), ->restore_noirq() in the
557subsystem-level dev_pm_ops structure.
558
559Device drivers that wish to use the same function as a system suspend, freeze,
560poweroff and runtime suspend callback, and similarly for system resume, thaw,
561restore, and runtime resume, can achieve similar behaviour with the help of the
562DEFINE_RUNTIME_DEV_PM_OPS() macro defined in include/linux/pm_runtime.h
563(possibly setting its last argument to NULL).
564
565.. _Section 8:
566
5678. "No-Callback" Devices
568========================
569
570Some "devices" are only logical sub-devices of their parent and cannot be
571power-managed on their own.  (The prototype example is a USB interface.  Entire
572USB devices can go into low-power mode or send wake-up requests, but neither is
573possible for individual interfaces.)  The drivers for these devices have no
574need of runtime PM callbacks; if the callbacks did exist, ->runtime_suspend()
575and ->runtime_resume() would always return 0 without doing anything else and
576->runtime_idle() would always call pm_runtime_suspend().
577
578Subsystems can tell the PM core about these devices by calling
579pm_runtime_no_callbacks().  This should be done after the device structure is
580initialized and before it is registered (although after device registration is
581also okay).  The routine will set the device's power.no_callbacks flag and
582prevent the non-debugging runtime PM sysfs attributes from being created.
583
584When power.no_callbacks is set, the PM core will not invoke the
585->runtime_idle(), ->runtime_suspend(), or ->runtime_resume() callbacks.
586Instead it will assume that suspends and resumes always succeed and that idle
587devices should be suspended.
588
589As a consequence, the PM core will never directly inform the device's subsystem
590or driver about runtime power changes.  Instead, the driver for the device's
591parent must take responsibility for telling the device's driver when the
592parent's power state changes.
593
594Note that, in some cases it may not be desirable for subsystems/drivers to call
595pm_runtime_no_callbacks() for their devices. This could be because a subset of
596the runtime PM callbacks needs to be implemented, a platform dependent PM
597domain could get attached to the device or that the device is power managed
598through a supplier device link. For these reasons and to avoid boilerplate code
599in subsystems/drivers, the PM core allows runtime PM callbacks to be
600unassigned. More precisely, if a callback pointer is NULL, the PM core will act
601as though there was a callback and it returned 0.
602
603.. _Section 9:
604
6059. Autosuspend, or automatically-delayed suspends
606=================================================
607
608Changing a device's power state isn't free; it requires both time and energy.
609A device should be put in a low-power state only when there's some reason to
610think it will remain in that state for a substantial time.  A common heuristic
611says that a device which hasn't been used for a while is liable to remain
612unused; following this advice, drivers should not allow devices to be suspended
613at runtime until they have been inactive for some minimum period.  Even when
614the heuristic ends up being non-optimal, it will still prevent devices from
615"bouncing" too rapidly between low-power and full-power states.
616
617The term "autosuspend" is an historical remnant.  It doesn't mean that the
618device is automatically suspended (the subsystem or driver still has to call
619the appropriate PM routines); rather it means that runtime suspends will
620automatically be delayed until the desired period of inactivity has elapsed.
621
622Inactivity is determined based on the power.last_busy field. The desired length
623of the inactivity period is a matter of policy.  Subsystems can set this length
624initially by calling pm_runtime_set_autosuspend_delay(), but after device
625registration the length should be controlled by user space, using the
626/sys/devices/.../power/autosuspend_delay_ms attribute.
627
628In order to use autosuspend, subsystems or drivers must call
629pm_runtime_use_autosuspend() (preferably before registering the device), and
630thereafter they should use the various \*_autosuspend() helper functions
631instead of the non-autosuspend counterparts::
632
633	Instead of: pm_runtime_suspend    use: pm_runtime_autosuspend;
634	Instead of: pm_schedule_suspend   use: pm_request_autosuspend;
635	Instead of: pm_runtime_put        use: pm_runtime_put_autosuspend;
636	Instead of: pm_runtime_put_sync   use: pm_runtime_put_sync_autosuspend.
637
638Drivers may also continue to use the non-autosuspend helper functions; they
639will behave normally, which means sometimes taking the autosuspend delay into
640account (see pm_runtime_idle()). The autosuspend variants of the functions also
641call pm_runtime_mark_last_busy().
642
643Under some circumstances a driver or subsystem may want to prevent a device
644from autosuspending immediately, even though the usage counter is zero and the
645autosuspend delay time has expired.  If the ->runtime_suspend() callback
646returns -EAGAIN or -EBUSY, and if the next autosuspend delay expiration time is
647in the future (as it normally would be if the callback invoked
648pm_runtime_mark_last_busy()), the PM core will automatically reschedule the
649autosuspend.  The ->runtime_suspend() callback can't do this rescheduling
650itself because no suspend requests of any kind are accepted while the device is
651suspending (i.e., while the callback is running).
652
653The implementation is well suited for asynchronous use in interrupt contexts.
654However such use inevitably involves races, because the PM core can't
655synchronize ->runtime_suspend() callbacks with the arrival of I/O requests.
656This synchronization must be handled by the driver, using its private lock.
657Here is a schematic pseudo-code example::
658
659	foo_read_or_write(struct foo_priv *foo, void *data)
660	{
661		lock(&foo->private_lock);
662		add_request_to_io_queue(foo, data);
663		if (foo->num_pending_requests++ == 0)
664			pm_runtime_get(&foo->dev);
665		if (!foo->is_suspended)
666			foo_process_next_request(foo);
667		unlock(&foo->private_lock);
668	}
669
670	foo_io_completion(struct foo_priv *foo, void *req)
671	{
672		lock(&foo->private_lock);
673		if (--foo->num_pending_requests == 0)
674			pm_runtime_put_autosuspend(&foo->dev);
675		else
676			foo_process_next_request(foo);
677		unlock(&foo->private_lock);
678		/* Send req result back to the user ... */
679	}
680
681	int foo_runtime_suspend(struct device *dev)
682	{
683		struct foo_priv *foo = container_of(dev, ...);
684		int ret = 0;
685
686		lock(&foo->private_lock);
687		if (foo->num_pending_requests > 0) {
688			ret = -EBUSY;
689		} else {
690			/* ... suspend the device ... */
691			foo->is_suspended = 1;
692		}
693		unlock(&foo->private_lock);
694		return ret;
695	}
696
697	int foo_runtime_resume(struct device *dev)
698	{
699		struct foo_priv *foo = container_of(dev, ...);
700
701		lock(&foo->private_lock);
702		/* ... resume the device ... */
703		foo->is_suspended = 0;
704		pm_runtime_mark_last_busy(&foo->dev);
705		if (foo->num_pending_requests > 0)
706			foo_process_next_request(foo);
707		unlock(&foo->private_lock);
708		return 0;
709	}
710
711The important point is that after foo_io_completion() asks for an autosuspend,
712the foo_runtime_suspend() callback may race with foo_read_or_write().
713Therefore foo_runtime_suspend() has to check whether there are any pending I/O
714requests (while holding the private lock) before allowing the suspend to
715proceed.
716
717In addition, the power.autosuspend_delay field can be changed by user space at
718any time.  If a driver cares about this, it can call
719pm_runtime_autosuspend_expiration() from within the ->runtime_suspend()
720callback while holding its private lock.  If the function returns a nonzero
721value then the delay has not yet expired and the callback should return
722-EAGAIN.
723