Lines Matching +full:cpu +full:- +full:idle +full:- +full:states
1 .. SPDX-License-Identifier: GPL-2.0
12 At least one global system-wide transition needs to be carried out for the
14 :doc:`sleep states <sleep-states>`. Hibernation requires more than one
15 transition to occur for this purpose, but the other sleep states, commonly
16 referred to as *system-wide suspend* (or simply *system suspend*) states, need
19 For those sleep states, the transition from the working state of the system into
26 different sleep states of the system are quite similar, but there are some
27 significant differences between the :ref:`suspend-to-idle <s2idle>` code flows
28 and the code flows related to the :ref:`suspend-to-RAM <s2ram>` and
29 :ref:`standby <standby>` sleep states.
31 The :ref:`suspend-to-RAM <s2ram>` and :ref:`standby <standby>` sleep states
33 boils down to the platform-specific actions carried out by the suspend and
36 states are mostly identical, so they both together will be referred to as
37 *platform-dependent suspend* states in what follows.
42 Suspend-to-idle Suspend Code Flow
46 state to the :ref:`suspend-to-idle <s2idle>` sleep state:
48 1. Invoking system-wide suspend notifiers.
87 phase and high-level ("action") interrupt handlers are prevented from being
91 interrupt controllers without performing any device-specific actions that
101 When all devices have been suspended, CPUs enter the idle loop and are put
102 into the deepest available idle state. While doing that, each of them
104 the tick do not occur until the CPU is woken up by another interrupt source.
106 The last CPU to enter the idle state also stops the timekeeping which
108 forward until the first CPU that is woken up restarts the timekeeping.
109 That allows the CPUs to stay in the deep idle state relatively long in one
112 From this point on, the CPUs can only be woken up by non-timer hardware
113 interrupts. If that happens, they go back to the idle state unless the
120 Suspend-to-idle Resume Code Flow
124 :ref:`suspend-to-idle <s2idle>` sleep state into the working state:
128 When one of the CPUs is woken up (by a non-timer hardware interrupt), it
129 leaves the idle state entered in the last step of the preceding suspend
131 by another CPU that woke up earlier) and the scheduler tick on that CPU is
134 If the interrupt that has woken up the CPU was armed for system wakeup,
137 2. Resuming devices and restoring the working-state configuration of IRQs.
146 The working-state configuration of IRQs is restored after the *noirq* resume
147 phase and the runtime PM API is re-enabled for every device whose driver
157 4. Invoking system-wide resume notifiers.
164 Platform-dependent Suspend Code Flow
168 state to platform-dependent suspend state:
170 1. Invoking system-wide suspend notifiers.
172 This step is the same as step 1 of the suspend-to-idle suspend transition
177 This step is the same as step 2 of the suspend-to-idle suspend transition
182 This step is analogous to step 3 of the suspend-to-idle suspend transition
186 There are platforms that can go into a very deep low-power state internally
187 when all CPUs in them are in sufficiently deep idle states and all I/O
188 devices have been put into low-power states. On those platforms,
189 suspend-to-idle can reduce system power very effectively.
191 On the other platforms, however, low-level components (like interrupt
192 controllers) need to be turned off in a platform-specific way (implemented
196 That usually prevents in-band hardware interrupts from waking up the system,
197 which must be done in a special platform-dependent way. Then, the
202 4. Disabling non-boot CPUs.
204 On some platforms the suspend hooks mentioned above must run in a one-CPU
210 For this reason, the CPU offline/online (CPU hotplug) framework is used
211 to take all of the CPUs in the system, except for one (the boot CPU),
212 offline (typically, the CPUs that have been taken offline go into deep idle
213 states).
216 rerouted to the only CPU that remains online.
223 6. Platform-specific power removal.
233 Platform-dependent Resume Code Flow
237 platform-dependent suspend state into the working state:
239 1. Platform-specific system wakeup.
242 wakeup devices (which need not be an in-band hardware interrupt) and
249 The suspend-time configuration of the core system components is restored and
252 3. Re-enabling non-boot CPUs.
255 back online and their suspend-time configuration is restored.
257 4. Resuming devices and restoring the working-state configuration of IRQs.
259 This step is the same as step 2 of the suspend-to-idle suspend transition
264 This step is the same as step 3 of the suspend-to-idle suspend transition
267 6. Invoking system-wide resume notifiers.
269 This step is the same as step 4 of the suspend-to-idle suspend transition