About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / power / devices.txt




Custom Search

Based on kernel version 2.6.33. Page generated on 2010-02-24 15:36 EST.

1	Most of the code in Linux is device drivers, so most of the Linux power
2	management code is also driver-specific.  Most drivers will do very little;
3	others, especially for platforms with small batteries (like cell phones),
4	will do a lot.
5	
6	This writeup gives an overview of how drivers interact with system-wide
7	power management goals, emphasizing the models and interfaces that are
8	shared by everything that hooks up to the driver model core.  Read it as
9	background for the domain-specific work you'd do with any specific driver.
10	
11	
12	Two Models for Device Power Management
13	======================================
14	Drivers will use one or both of these models to put devices into low-power
15	states:
16	
17	    System Sleep model:
18		Drivers can enter low power states as part of entering system-wide
19		low-power states like "suspend-to-ram", or (mostly for systems with
20		disks) "hibernate" (suspend-to-disk).
21	
22		This is something that device, bus, and class drivers collaborate on
23		by implementing various role-specific suspend and resume methods to
24		cleanly power down hardware and software subsystems, then reactivate
25		them without loss of data.
26	
27		Some drivers can manage hardware wakeup events, which make the system
28		leave that low-power state.  This feature may be disabled using the
29		relevant /sys/devices/.../power/wakeup file; enabling it may cost some
30		power usage, but let the whole system enter low power states more often.
31	
32	    Runtime Power Management model:
33		Drivers may also enter low power states while the system is running,
34		independently of other power management activity.  Upstream drivers
35		will normally not know (or care) if the device is in some low power
36		state when issuing requests; the driver will auto-resume anything
37		that's needed when it gets a request.
38	
39		This doesn't have, or need much infrastructure; it's just something you
40		should do when writing your drivers.  For example, clk_disable() unused
41		clocks as part of minimizing power drain for currently-unused hardware.
42		Of course, sometimes clusters of drivers will collaborate with each
43		other, which could involve task-specific power management.
44	
45	There's not a lot to be said about those low power states except that they
46	are very system-specific, and often device-specific.  Also, that if enough
47	drivers put themselves into low power states (at "runtime"), the effect may be
48	the same as entering some system-wide low-power state (system sleep) ... and
49	that synergies exist, so that several drivers using runtime pm might put the
50	system into a state where even deeper power saving options are available.
51	
52	Most suspended devices will have quiesced all I/O:  no more DMA or irqs, no
53	more data read or written, and requests from upstream drivers are no longer
54	accepted.  A given bus or platform may have different requirements though.
55	
56	Examples of hardware wakeup events include an alarm from a real time clock,
57	network wake-on-LAN packets, keyboard or mouse activity, and media insertion
58	or removal (for PCMCIA, MMC/SD, USB, and so on).
59	
60	
61	Interfaces for Entering System Sleep States
62	===========================================
63	Most of the programming interfaces a device driver needs to know about
64	relate to that first model:  entering a system-wide low power state,
65	rather than just minimizing power consumption by one device.
66	
67	
68	Bus Driver Methods
69	------------------
70	The core methods to suspend and resume devices reside in struct bus_type.
71	These are mostly of interest to people writing infrastructure for busses
72	like PCI or USB, or because they define the primitives that device drivers
73	may need to apply in domain-specific ways to their devices:
74	
75	struct bus_type {
76		...
77		int  (*suspend)(struct device *dev, pm_message_t state);
78		int  (*resume)(struct device *dev);
79	};
80	
81	Bus drivers implement those methods as appropriate for the hardware and
82	the drivers using it; PCI works differently from USB, and so on.  Not many
83	people write bus drivers; most driver code is a "device driver" that
84	builds on top of bus-specific framework code.
85	
86	For more information on these driver calls, see the description later;
87	they are called in phases for every device, respecting the parent-child
88	sequencing in the driver model tree.  Note that as this is being written,
89	only the suspend() and resume() are widely available; not many bus drivers
90	leverage all of those phases, or pass them down to lower driver levels.
91	
92	
93	/sys/devices/.../power/wakeup files
94	-----------------------------------
95	All devices in the driver model have two flags to control handling of
96	wakeup events, which are hardware signals that can force the device and/or
97	system out of a low power state.  These are initialized by bus or device
98	driver code using device_init_wakeup(dev,can_wakeup).
99	
100	The "can_wakeup" flag just records whether the device (and its driver) can
101	physically support wakeup events.  When that flag is clear, the sysfs
102	"wakeup" file is empty, and device_may_wakeup() returns false.
103	
104	For devices that can issue wakeup events, a separate flag controls whether
105	that device should try to use its wakeup mechanism.  The initial value of
106	device_may_wakeup() will be true, so that the device's "wakeup" file holds
107	the value "enabled".  Userspace can change that to "disabled" so that
108	device_may_wakeup() returns false; or change it back to "enabled" (so that
109	it returns true again).
110	
111	
112	EXAMPLE:  PCI Device Driver Methods
113	-----------------------------------
114	PCI framework software calls these methods when the PCI device driver bound
115	to a device device has provided them:
116	
117	struct pci_driver {
118		...
119		int  (*suspend)(struct pci_device *pdev, pm_message_t state);
120		int  (*suspend_late)(struct pci_device *pdev, pm_message_t state);
121	
122		int  (*resume_early)(struct pci_device *pdev);
123		int  (*resume)(struct pci_device *pdev);
124	};
125	
126	Drivers will implement those methods, and call PCI-specific procedures
127	like pci_set_power_state(), pci_enable_wake(), pci_save_state(), and
128	pci_restore_state() to manage PCI-specific mechanisms.  (PCI config space
129	could be saved during driver probe, if it weren't for the fact that some
130	systems rely on userspace tweaking using setpci.)  Devices are suspended
131	before their bridges enter low power states, and likewise bridges resume
132	before their devices.
133	
134	
135	Upper Layers of Driver Stacks
136	-----------------------------
137	Device drivers generally have at least two interfaces, and the methods
138	sketched above are the ones which apply to the lower level (nearer PCI, USB,
139	or other bus hardware).  The network and block layers are examples of upper
140	level interfaces, as is a character device talking to userspace.
141	
142	Power management requests normally need to flow through those upper levels,
143	which often use domain-oriented requests like "blank that screen".  In
144	some cases those upper levels will have power management intelligence that
145	relates to end-user activity, or other devices that work in cooperation.
146	
147	When those interfaces are structured using class interfaces, there is a
148	standard way to have the upper layer stop issuing requests to a given
149	class device (and restart later):
150	
151	struct class {
152		...
153		int  (*suspend)(struct device *dev, pm_message_t state);
154		int  (*resume)(struct device *dev);
155	};
156	
157	Those calls are issued in specific phases of the process by which the
158	system enters a low power "suspend" state, or resumes from it.
159	
160	
161	Calling Drivers to Enter System Sleep States
162	============================================
163	When the system enters a low power state, each device's driver is asked
164	to suspend the device by putting it into state compatible with the target
165	system state.  That's usually some version of "off", but the details are
166	system-specific.  Also, wakeup-enabled devices will usually stay partly
167	functional in order to wake the system.
168	
169	When the system leaves that low power state, the device's driver is asked
170	to resume it.  The suspend and resume operations always go together, and
171	both are multi-phase operations.
172	
173	For simple drivers, suspend might quiesce the device using the class code
174	and then turn its hardware as "off" as possible with late_suspend.  The
175	matching resume calls would then completely reinitialize the hardware
176	before reactivating its class I/O queues.
177	
178	More power-aware drivers drivers will use more than one device low power
179	state, either at runtime or during system sleep states, and might trigger
180	system wakeup events.
181	
182	
183	Call Sequence Guarantees
184	------------------------
185	To ensure that bridges and similar links needed to talk to a device are
186	available when the device is suspended or resumed, the device tree is
187	walked in a bottom-up order to suspend devices.  A top-down order is
188	used to resume those devices.
189	
190	The ordering of the device tree is defined by the order in which devices
191	get registered:  a child can never be registered, probed or resumed before
192	its parent; and can't be removed or suspended after that parent.
193	
194	The policy is that the device tree should match hardware bus topology.
195	(Or at least the control bus, for devices which use multiple busses.)
196	In particular, this means that a device registration may fail if the parent of
197	the device is suspending (ie. has been chosen by the PM core as the next
198	device to suspend) or has already suspended, as well as after all of the other
199	devices have been suspended.  Device drivers must be prepared to cope with such
200	situations.
201	
202	
203	Suspending Devices
204	------------------
205	Suspending a given device is done in several phases.  Suspending the
206	system always includes every phase, executing calls for every device
207	before the next phase begins.  Not all busses or classes support all
208	these callbacks; and not all drivers use all the callbacks.
209	
210	The phases are seen by driver notifications issued in this order:
211	
212	   1	class.suspend(dev, message) is called after tasks are frozen, for
213		devices associated with a class that has such a method.  This
214		method may sleep.
215	
216		Since I/O activity usually comes from such higher layers, this is
217		a good place to quiesce all drivers of a given type (and keep such
218		code out of those drivers).
219	
220	   2	bus.suspend(dev, message) is called next.  This method may sleep,
221		and is often morphed into a device driver call with bus-specific
222		parameters and/or rules.
223	
224		This call should handle parts of device suspend logic that require
225		sleeping.  It probably does work to quiesce the device which hasn't
226		been abstracted into class.suspend().
227	
228	The pm_message_t parameter is currently used to refine those semantics
229	(described later).
230	
231	At the end of those phases, drivers should normally have stopped all I/O
232	transactions (DMA, IRQs), saved enough state that they can re-initialize
233	or restore previous state (as needed by the hardware), and placed the
234	device into a low-power state.  On many platforms they will also use
235	clk_disable() to gate off one or more clock sources; sometimes they will
236	also switch off power supplies, or reduce voltages.  Drivers which have
237	runtime PM support may already have performed some or all of the steps
238	needed to prepare for the upcoming system sleep state.
239	
240	When any driver sees that its device_can_wakeup(dev), it should make sure
241	to use the relevant hardware signals to trigger a system wakeup event.
242	For example, enable_irq_wake() might identify GPIO signals hooked up to
243	a switch or other external hardware, and pci_enable_wake() does something
244	similar for PCI's PME# signal.
245	
246	If a driver (or bus, or class) fails it suspend method, the system won't
247	enter the desired low power state; it will resume all the devices it's
248	suspended so far.
249	
250	Note that drivers may need to perform different actions based on the target
251	system lowpower/sleep state.  At this writing, there are only platform
252	specific APIs through which drivers could determine those target states.
253	
254	
255	Device Low Power (suspend) States
256	---------------------------------
257	Device low-power states aren't very standard.  One device might only handle
258	"on" and "off, while another might support a dozen different versions of
259	"on" (how many engines are active?), plus a state that gets back to "on"
260	faster than from a full "off".
261	
262	Some busses define rules about what different suspend states mean.  PCI
263	gives one example:  after the suspend sequence completes, a non-legacy
264	PCI device may not perform DMA or issue IRQs, and any wakeup events it
265	issues would be issued through the PME# bus signal.  Plus, there are
266	several PCI-standard device states, some of which are optional.
267	
268	In contrast, integrated system-on-chip processors often use irqs as the
269	wakeup event sources (so drivers would call enable_irq_wake) and might
270	be able to treat DMA completion as a wakeup event (sometimes DMA can stay
271	active too, it'd only be the CPU and some peripherals that sleep).
272	
273	Some details here may be platform-specific.  Systems may have devices that
274	can be fully active in certain sleep states, such as an LCD display that's
275	refreshed using DMA while most of the system is sleeping lightly ... and
276	its frame buffer might even be updated by a DSP or other non-Linux CPU while
277	the Linux control processor stays idle.
278	
279	Moreover, the specific actions taken may depend on the target system state.
280	One target system state might allow a given device to be very operational;
281	another might require a hard shut down with re-initialization on resume.
282	And two different target systems might use the same device in different
283	ways; the aforementioned LCD might be active in one product's "standby",
284	but a different product using the same SOC might work differently.
285	
286	
287	Meaning of pm_message_t.event
288	-----------------------------
289	Parameters to suspend calls include the device affected and a message of
290	type pm_message_t, which has one field:  the event.  If driver does not
291	recognize the event code, suspend calls may abort the request and return
292	a negative errno.  However, most drivers will be fine if they implement
293	PM_EVENT_SUSPEND semantics for all messages.
294	
295	The event codes are used to refine the goal of suspending the device, and
296	mostly matter when creating or resuming system memory image snapshots, as
297	used with suspend-to-disk:
298	
299	    PM_EVENT_SUSPEND -- quiesce the driver and put hardware into a low-power
300		state.  When used with system sleep states like "suspend-to-RAM" or
301		"standby", the upcoming resume() call will often be able to rely on
302		state kept in hardware, or issue system wakeup events.
303	
304	    PM_EVENT_HIBERNATE -- Put hardware into a low-power state and enable wakeup
305		events as appropriate.  It is only used with hibernation
306		(suspend-to-disk) and few devices are able to wake up the system from
307		this state; most are completely powered off.
308	
309	    PM_EVENT_FREEZE -- quiesce the driver, but don't necessarily change into
310		any low power mode.  A system snapshot is about to be taken, often
311		followed by a call to the driver's resume() method.  Neither wakeup
312		events nor DMA are allowed.
313	
314	    PM_EVENT_PRETHAW -- quiesce the driver, knowing that the upcoming resume()
315		will restore a suspend-to-disk snapshot from a different kernel image.
316		Drivers that are smart enough to look at their hardware state during
317		resume() processing need that state to be correct ... a PRETHAW could
318		be used to invalidate that state (by resetting the device), like a
319		shutdown() invocation would before a kexec() or system halt.  Other
320		drivers might handle this the same way as PM_EVENT_FREEZE.  Neither
321		wakeup events nor DMA are allowed.
322	
323	To enter "standby" (ACPI S1) or "Suspend to RAM" (STR, ACPI S3) states, or
324	the similarly named APM states, only PM_EVENT_SUSPEND is used; the other event
325	codes are used for hibernation ("Suspend to Disk", STD, ACPI S4).
326	
327	There's also PM_EVENT_ON, a value which never appears as a suspend event
328	but is sometimes used to record the "not suspended" device state.
329	
330	
331	Resuming Devices
332	----------------
333	Resuming is done in multiple phases, much like suspending, with all
334	devices processing each phase's calls before the next phase begins.
335	
336	The phases are seen by driver notifications issued in this order:
337	
338	   1	bus.resume(dev) reverses the effects of bus.suspend().  This may
339		be morphed into a device driver call with bus-specific parameters;
340		implementations may sleep.
341	
342	   2	class.resume(dev) is called for devices associated with a class
343		that has such a method.  Implementations may sleep.
344	
345		This reverses the effects of class.suspend(), and would usually
346		reactivate the device's I/O queue.
347	
348	At the end of those phases, drivers should normally be as functional as
349	they were before suspending:  I/O can be performed using DMA and IRQs, and
350	the relevant clocks are gated on.  The device need not be "fully on"; it
351	might be in a runtime lowpower/suspend state that acts as if it were.
352	
353	However, the details here may again be platform-specific.  For example,
354	some systems support multiple "run" states, and the mode in effect at
355	the end of resume() might not be the one which preceded suspension.
356	That means availability of certain clocks or power supplies changed,
357	which could easily affect how a driver works.
358	
359	
360	Drivers need to be able to handle hardware which has been reset since the
361	suspend methods were called, for example by complete reinitialization.
362	This may be the hardest part, and the one most protected by NDA'd documents
363	and chip errata.  It's simplest if the hardware state hasn't changed since
364	the suspend() was called, but that can't always be guaranteed.
365	
366	Drivers must also be prepared to notice that the device has been removed
367	while the system was powered off, whenever that's physically possible.
368	PCMCIA, MMC, USB, Firewire, SCSI, and even IDE are common examples of busses
369	where common Linux platforms will see such removal.  Details of how drivers
370	will notice and handle such removals are currently bus-specific, and often
371	involve a separate thread.
372	
373	
374	Note that the bus-specific runtime PM wakeup mechanism can exist, and might
375	be defined to share some of the same driver code as for system wakeup.  For
376	example, a bus-specific device driver's resume() method might be used there,
377	so it wouldn't only be called from bus.resume() during system-wide wakeup.
378	See bus-specific information about how runtime wakeup events are handled.
379	
380	
381	System Devices
382	--------------
383	System devices follow a slightly different API, which can be found in
384	
385		include/linux/sysdev.h
386		drivers/base/sys.c
387	
388	System devices will only be suspended with interrupts disabled, and after
389	all other devices have been suspended.  On resume, they will be resumed
390	before any other devices, and also with interrupts disabled.
391	
392	That is, IRQs are disabled, the suspend_late() phase begins, then the
393	sysdev_driver.suspend() phase, and the system enters a sleep state.  Then
394	the sysdev_driver.resume() phase begins, followed by the resume_early()
395	phase, after which IRQs are enabled.
396	
397	Code to actually enter and exit the system-wide low power state sometimes
398	involves hardware details that are only known to the boot firmware, and
399	may leave a CPU running software (from SRAM or flash memory) that monitors
400	the system and manages its wakeup sequence.
401	
402	
403	Runtime Power Management
404	========================
405	Many devices are able to dynamically power down while the system is still
406	running. This feature is useful for devices that are not being used, and
407	can offer significant power savings on a running system.  These devices
408	often support a range of runtime power states, which might use names such
409	as "off", "sleep", "idle", "active", and so on.  Those states will in some
410	cases (like PCI) be partially constrained by a bus the device uses, and will
411	usually include hardware states that are also used in system sleep states.
412	
413	However, note that if a driver puts a device into a runtime low power state
414	and the system then goes into a system-wide sleep state, it normally ought
415	to resume into that runtime low power state rather than "full on".  Such
416	distinctions would be part of the driver-internal state machine for that
417	hardware; the whole point of runtime power management is to be sure that
418	drivers are decoupled in that way from the state machine governing phases
419	of the system-wide power/sleep state transitions.
420	
421	
422	Power Saving Techniques
423	-----------------------
424	Normally runtime power management is handled by the drivers without specific
425	userspace or kernel intervention, by device-aware use of techniques like:
426	
427	    Using information provided by other system layers
428		- stay deeply "off" except between open() and close()
429		- if transceiver/PHY indicates "nobody connected", stay "off"
430		- application protocols may include power commands or hints
431	
432	    Using fewer CPU cycles
433		- using DMA instead of PIO
434		- removing timers, or making them lower frequency
435		- shortening "hot" code paths
436		- eliminating cache misses
437		- (sometimes) offloading work to device firmware
438	
439	    Reducing other resource costs
440		- gating off unused clocks in software (or hardware)
441		- switching off unused power supplies
442		- eliminating (or delaying/merging) IRQs
443		- tuning DMA to use word and/or burst modes
444	
445	    Using device-specific low power states
446		- using lower voltages
447		- avoiding needless DMA transfers
448	
449	Read your hardware documentation carefully to see the opportunities that
450	may be available.  If you can, measure the actual power usage and check
451	it against the budget established for your project.
452	
453	
454	Examples:  USB hosts, system timer, system CPU
455	----------------------------------------------
456	USB host controllers make interesting, if complex, examples.  In many cases
457	these have no work to do:  no USB devices are connected, or all of them are
458	in the USB "suspend" state.  Linux host controller drivers can then disable
459	periodic DMA transfers that would otherwise be a constant power drain on the
460	memory subsystem, and enter a suspend state.  In power-aware controllers,
461	entering that suspend state may disable the clock used with USB signaling,
462	saving a certain amount of power.
463	
464	The controller will be woken from that state (with an IRQ) by changes to the
465	signal state on the data lines of a given port, for example by an existing
466	peripheral requesting "remote wakeup" or by plugging a new peripheral.  The
467	same wakeup mechanism usually works from "standby" sleep states, and on some
468	systems also from "suspend to RAM" (or even "suspend to disk") states.
469	(Except that ACPI may be involved instead of normal IRQs, on some hardware.)
470	
471	System devices like timers and CPUs may have special roles in the platform
472	power management scheme.  For example, system timers using a "dynamic tick"
473	approach don't just save CPU cycles (by eliminating needless timer IRQs),
474	but they may also open the door to using lower power CPU "idle" states that
475	cost more than a jiffie to enter and exit.  On x86 systems these are states
476	like "C3"; note that periodic DMA transfers from a USB host controller will
477	also prevent entry to a C3 state, much like a periodic timer IRQ.
478	
479	That kind of runtime mechanism interaction is common.  "System On Chip" (SOC)
480	processors often have low power idle modes that can't be entered unless
481	certain medium-speed clocks (often 12 or 48 MHz) are gated off.  When the
482	drivers gate those clocks effectively, then the system idle task may be able
483	to use the lower power idle modes and thereby increase battery life.
484	
485	If the CPU can have a "cpufreq" driver, there also may be opportunities
486	to shift to lower voltage settings and reduce the power cost of executing
487	a given number of instructions.  (Without voltage adjustment, it's rare
488	for cpufreq to save much power; the cost-per-instruction must go down.)
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.