@@ -349,7 +349,7 @@ the phases are: ``prepare``, ``suspend``, ``suspend_late``, ``suspend_noirq``.
349
349
PM core will skip the ``suspend ``, ``suspend_late `` and
350
350
``suspend_noirq `` phases as well as all of the corresponding phases of
351
351
the subsequent device resume for all of these devices. In that case,
352
- the ``->complete `` callback will be invoked directly after the
352
+ the ``->complete `` callback will be the next one invoked after the
353
353
``->prepare `` callback and is entirely responsible for putting the
354
354
device into a consistent state as appropriate.
355
355
@@ -383,11 +383,15 @@ the phases are: ``prepare``, ``suspend``, ``suspend_late``, ``suspend_noirq``.
383
383
``->suspend `` methods provided by subsystems (bus types and PM domains
384
384
in particular) must follow an additional rule regarding what can be done
385
385
to the devices before their drivers' ``->suspend `` methods are called.
386
- Namely, they can only resume the devices from runtime suspend by
387
- calling :c:func: `pm_runtime_resume ` for them, if that is necessary, and
386
+ Namely, they may resume the devices from runtime suspend by
387
+ calling :c:func: `pm_runtime_resume ` for them, if that is necessary, but
388
388
they must not update the state of the devices in any other way at that
389
389
time (in case the drivers need to resume the devices from runtime
390
- suspend in their ``->suspend `` methods).
390
+ suspend in their ``->suspend `` methods). In fact, the PM core prevents
391
+ subsystems or drivers from putting devices into runtime suspend at
392
+ these times by calling :c:func: `pm_runtime_get_noresume ` before issuing
393
+ the ``->prepare `` callback (and calling :c:func: `pm_runtime_put ` after
394
+ issuing the ``->complete `` callback).
391
395
392
396
3. For a number of devices it is convenient to split suspend into the
393
397
"quiesce device" and "save device state" phases, in which cases
@@ -459,22 +463,22 @@ When resuming from freeze, standby or memory sleep, the phases are:
459
463
460
464
Note, however, that new children may be registered below the device as
461
465
soon as the ``->resume `` callbacks occur; it's not necessary to wait
462
- until the ``complete `` phase with that .
466
+ until the ``complete `` phase runs .
463
467
464
468
Moreover, if the preceding ``->prepare `` callback returned a positive
465
469
number, the device may have been left in runtime suspend throughout the
466
- whole system suspend and resume (the ``suspend ``, ``suspend_late ``,
467
- ``suspend_noirq `` phases of system suspend and the `` resume_noirq ``,
468
- ``resume_early ``, `` resume `` phases of system resume may have been
469
- skipped for it ). In that case, the ``->complete `` callback is entirely
470
+ whole system suspend and resume (its ``-> suspend ``, ``-> suspend_late ``,
471
+ ``-> suspend_noirq ``, `` -> resume_noirq ``,
472
+ ``-> resume_early ``, and `` -> resume `` callbacks may have been
473
+ skipped). In that case, the ``->complete `` callback is entirely
470
474
responsible for putting the device into a consistent state after system
471
475
suspend if necessary. [For example, it may need to queue up a runtime
472
476
resume request for the device for this purpose.] To check if that is
473
477
the case, the ``->complete `` callback can consult the device's
474
- ``power.direct_complete `` flag. Namely, if that flag is set when the
475
- ``->complete `` callback is being run, it has been called directly after
476
- the preceding `` ->prepare `` and special actions may be required
477
- to make the device work correctly afterward.
478
+ ``power.direct_complete `` flag. If that flag is set when the
479
+ ``->complete `` callback is being run then the direct-complete mechanism
480
+ was used, and special actions may be required to make the device work
481
+ correctly afterward.
478
482
479
483
At the end of these phases, drivers should be as functional as they were before
480
484
suspending: I/O can be performed using DMA and IRQs, and the relevant clocks are
@@ -575,10 +579,12 @@ and the phases are similar.
575
579
576
580
The ``->poweroff ``, ``->poweroff_late `` and ``->poweroff_noirq `` callbacks
577
581
should do essentially the same things as the ``->suspend ``, ``->suspend_late ``
578
- and ``->suspend_noirq `` callbacks, respectively. The only notable difference is
582
+ and ``->suspend_noirq `` callbacks, respectively. A notable difference is
579
583
that they need not store the device register values, because the registers
580
584
should already have been stored during the ``freeze ``, ``freeze_late `` or
581
- ``freeze_noirq `` phases.
585
+ ``freeze_noirq `` phases. Also, on many machines the firmware will power-down
586
+ the entire system, so it is not necessary for the callback to put the device in
587
+ a low-power state.
582
588
583
589
584
590
Leaving Hibernation
@@ -764,11 +770,10 @@ device driver in question.
764
770
765
771
If it is necessary to resume a device from runtime suspend during a system-wide
766
772
transition into a sleep state, that can be done by calling
767
- :c:func: `pm_runtime_resume ` for it from the ``->suspend `` callback (or its
768
- couterpart for transitions related to hibernation) of either the device's driver
769
- or a subsystem responsible for it (for example, a bus type or a PM domain).
770
- That is guaranteed to work by the requirement that subsystems must not change
771
- the state of devices (possibly except for resuming them from runtime suspend)
773
+ :c:func: `pm_runtime_resume ` from the ``->suspend `` callback (or the ``->freeze ``
774
+ or ``->poweroff `` callback for transitions related to hibernation) of either the
775
+ device's driver or its subsystem (for example, a bus type or a PM domain).
776
+ However, subsystems must not otherwise change the runtime status of devices
772
777
from their ``->prepare `` and ``->suspend `` callbacks (or equivalent) *before *
773
778
invoking device drivers' ``->suspend `` callbacks (or equivalent).
774
779
@@ -779,27 +784,29 @@ The ``DPM_FLAG_SMART_SUSPEND`` Driver Flag
779
784
780
785
Some bus types and PM domains have a policy to resume all devices from runtime
781
786
suspend upfront in their ``->suspend `` callbacks, but that may not be really
782
- necessary if the driver of the device can cope with runtime-suspended devices.
783
- The driver can indicate that by setting ``DPM_FLAG_SMART_SUSPEND `` in
784
- :c:member: `power.driver_flags ` at the probe time with the help of the
787
+ necessary if the device's driver can cope with runtime-suspended devices.
788
+ The driver can indicate this by setting ``DPM_FLAG_SMART_SUSPEND `` in
789
+ :c:member: `power.driver_flags ` at probe time, with the assistance of the
785
790
:c:func: `dev_pm_set_driver_flags ` helper routine.
786
791
787
- However, setting that flag also causes the PM core and middle-layer code
792
+ Setting that flag causes the PM core and middle-layer code
788
793
(bus types, PM domains etc.) to skip the ``->suspend_late `` and
789
794
``->suspend_noirq `` callbacks provided by the driver if the device remains in
790
- runtime suspend during the `` suspend_late `` phase of system-wide suspend (or
791
- during the `` poweroff_late `` or `` freeze_late `` phase of hibernation),
792
- after runtime PM was disabled for it. [Without doing that, the same driver
795
+ runtime suspend throughout those phases of the system-wide suspend (and
796
+ similarly for the "freeze" and "poweroff" parts of system hibernation).
797
+ [Otherwise the same driver
793
798
callback might be executed twice in a row for the same device, which would not
794
799
be valid in general.] If the middle-layer system-wide PM callbacks are present
795
- for the device, they are responsible for doing the above, and the PM core takes
796
- care of it otherwise.
800
+ for the device then they are responsible for skipping these driver callbacks;
801
+ if not then the PM core skips them. The subsystem callback routines can
802
+ determine whether they need to skip the driver callbacks by testing the return
803
+ value from the :c:func: `dev_pm_skip_suspend ` helper function.
797
804
798
- In addition, with ``DPM_FLAG_SMART_SUSPEND `` set, the driver's ``->thaw_late ``
799
- and ``->thaw_noirq `` callbacks are skipped if the device remained in runtime
800
- suspend during the preceding "freeze" transition related to hibernation.
801
- Again, if the middle-layer callbacks are present for the device, they are
802
- responsible for doing that, or the PM core takes care of it otherwise .
805
+ In addition, with ``DPM_FLAG_SMART_SUSPEND `` set, the driver's ``->thaw_noirq ``
806
+ and ``->thaw_early `` callbacks are skipped in hibernation if the device remained
807
+ in runtime suspend throughout the preceding "freeze" transition. Again, if the
808
+ middle-layer callbacks are present for the device, they are responsible for
809
+ doing this, otherwise the PM core takes care of it.
803
810
804
811
805
812
The ``DPM_FLAG_MAY_SKIP_RESUME `` Driver Flag
@@ -820,17 +827,20 @@ indicate to the PM core and middle-layer code that they allow their "noirq" and
820
827
after system-wide PM transitions to the working state. Whether or not that is
821
828
the case generally depends on the state of the device before the given system
822
829
suspend-resume cycle and on the type of the system transition under way.
823
- In particular, the "restore" and "thaw" transitions related to hibernation are
824
- not affected by ``DPM_FLAG_MAY_SKIP_RESUME `` at all. [All devices are always
825
- resumed during the "restore" transition and whether or not any driver callbacks
826
- are skipped during the "freeze" transition depends whether or not the
827
- ``DPM_FLAG_SMART_SUSPEND `` flag is set (see `above <smart_suspend_flag _>`_).]
830
+ In particular, the "thaw" and "restore" transitions related to hibernation are
831
+ not affected by ``DPM_FLAG_MAY_SKIP_RESUME `` at all. [All callbacks are
832
+ issued during the "restore" transition regardless of the flag settings,
833
+ and whether or not any driver callbacks
834
+ are skipped during the "thaw" transition depends whether or not the
835
+ ``DPM_FLAG_SMART_SUSPEND `` flag is set (see `above <smart_suspend_flag _>`_).
836
+ In addition, a device is not allowed to remain in runtime suspend if any of its
837
+ children will be returned to full power.]
828
838
829
839
The ``DPM_FLAG_MAY_SKIP_RESUME `` flag is taken into account in combination with
830
840
the :c:member: `power.may_skip_resume ` status bit set by the PM core during the
831
841
"suspend" phase of suspend-type transitions. If the driver or the middle layer
832
842
has a reason to prevent the driver's "noirq" and "early" resume callbacks from
833
- being skipped during the subsequent resume transition of the system , it should
843
+ being skipped during the subsequent system resume transition, it should
834
844
clear :c:member: `power.may_skip_resume ` in its ``->suspend ``, ``->suspend_late ``
835
845
or ``->suspend_noirq `` callback. [Note that the drivers setting
836
846
``DPM_FLAG_SMART_SUSPEND `` need to clear :c:member: `power.may_skip_resume ` in
@@ -845,8 +855,8 @@ not they should be skipped can be determined by evaluating the
845
855
If that function returns ``true ``, the driver's "noirq" and "early" resume
846
856
callbacks should be skipped and the device's runtime PM status will be set to
847
857
"suspended" by the PM core. Otherwise, if the device was runtime-suspended
848
- during the preceding system-wide suspend transition and
849
- ``DPM_FLAG_SMART_SUSPEND `` is set for it , its runtime PM status will be set to
858
+ during the preceding system-wide suspend transition and its
859
+ ``DPM_FLAG_SMART_SUSPEND `` is set, its runtime PM status will be set to
850
860
"active" by the PM core. [Hence, the drivers that do not set
851
861
``DPM_FLAG_SMART_SUSPEND `` should not expect the runtime PM status of their
852
862
devices to be changed from "suspended" to "active" by the PM core during
0 commit comments