|
1 |
| -Power Management Interface |
2 |
| - |
3 |
| - |
4 |
| -The power management subsystem provides a unified sysfs interface to |
5 |
| -userspace, regardless of what architecture or platform one is |
6 |
| -running. The interface exists in /sys/power/ directory (assuming sysfs |
7 |
| -is mounted at /sys). |
8 |
| - |
9 |
| -/sys/power/state controls system power state. Reading from this file |
10 |
| -returns what states are supported, which is hard-coded to 'freeze', |
11 |
| -'standby' (Power-On Suspend), 'mem' (Suspend-to-RAM), and 'disk' |
12 |
| -(Suspend-to-Disk). |
13 |
| - |
14 |
| -Writing to this file one of those strings causes the system to |
15 |
| -transition into that state. Please see the file |
16 |
| -Documentation/power/states.txt for a description of each of those |
17 |
| -states. |
18 |
| - |
19 |
| - |
20 |
| -/sys/power/disk controls the operating mode of the suspend-to-disk |
21 |
| -mechanism. Suspend-to-disk can be handled in several ways. We have a |
22 |
| -few options for putting the system to sleep - using the platform driver |
23 |
| -(e.g. ACPI or other suspend_ops), powering off the system or rebooting the |
24 |
| -system (for testing). |
25 |
| - |
26 |
| -Additionally, /sys/power/disk can be used to turn on one of the two testing |
27 |
| -modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the |
28 |
| -suspend-to-disk mechanism is in the 'testproc' mode, writing 'disk' to |
29 |
| -/sys/power/state will cause the kernel to disable nonboot CPUs and freeze |
30 |
| -tasks, wait for 5 seconds, unfreeze tasks and enable nonboot CPUs. If it is |
31 |
| -in the 'test' mode, writing 'disk' to /sys/power/state will cause the kernel |
32 |
| -to disable nonboot CPUs and freeze tasks, shrink memory, suspend devices, wait |
33 |
| -for 5 seconds, resume devices, unfreeze tasks and enable nonboot CPUs. Then, |
34 |
| -we are able to look in the log messages and work out, for example, which code |
35 |
| -is being slow and which device drivers are misbehaving. |
36 |
| - |
37 |
| -Reading from this file will display all supported modes and the currently |
38 |
| -selected one in brackets, for example |
39 |
| - |
40 |
| - [shutdown] reboot test testproc |
41 |
| - |
42 |
| -Writing to this file will accept one of |
43 |
| - |
44 |
| - 'platform' (only if the platform supports it) |
45 |
| - 'shutdown' |
46 |
| - 'reboot' |
47 |
| - 'testproc' |
48 |
| - 'test' |
49 |
| - |
50 |
| -/sys/power/image_size controls the size of the image created by |
51 |
| -the suspend-to-disk mechanism. It can be written a string |
52 |
| -representing a non-negative integer that will be used as an upper |
53 |
| -limit of the image size, in bytes. The suspend-to-disk mechanism will |
54 |
| -do its best to ensure the image size will not exceed that number. However, |
55 |
| -if this turns out to be impossible, it will try to suspend anyway using the |
56 |
| -smallest image possible. In particular, if "0" is written to this file, the |
57 |
| -suspend image will be as small as possible. |
58 |
| - |
59 |
| -Reading from this file will display the current image size limit, which |
60 |
| -is set to 2/5 of available RAM by default. |
61 |
| - |
62 |
| -/sys/power/pm_trace controls the code which saves the last PM event point in |
63 |
| -the RTC across reboots, so that you can debug a machine that just hangs |
64 |
| -during suspend (or more commonly, during resume). Namely, the RTC is only |
65 |
| -used to save the last PM event point if this file contains '1'. Initially it |
66 |
| -contains '0' which may be changed to '1' by writing a string representing a |
67 |
| -nonzero integer into it. |
68 |
| - |
69 |
| -To use this debugging feature you should attempt to suspend the machine, then |
70 |
| -reboot it and run |
71 |
| - |
72 |
| - dmesg -s 1000000 | grep 'hash matches' |
73 |
| - |
74 |
| -CAUTION: Using it will cause your machine's real-time (CMOS) clock to be |
75 |
| -set to a random invalid time after a resume. |
| 1 | +Power Management Interface for System Sleep |
| 2 | + |
| 3 | +Copyright (c) 2016 Intel Corp., Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| 4 | + |
| 5 | +The power management subsystem provides userspace with a unified sysfs interface |
| 6 | +for system sleep regardless of the underlying system architecture or platform. |
| 7 | +The interface is located in the /sys/power/ directory (assuming that sysfs is |
| 8 | +mounted at /sys). |
| 9 | + |
| 10 | +/sys/power/state is the system sleep state control file. |
| 11 | + |
| 12 | +Reading from it returns a list of supported sleep states, encoded as: |
| 13 | + |
| 14 | +'freeze' (Suspend-to-Idle) |
| 15 | +'standby' (Power-On Suspend) |
| 16 | +'mem' (Suspend-to-RAM) |
| 17 | +'disk' (Suspend-to-Disk) |
| 18 | + |
| 19 | +Suspend-to-Idle is always supported. Suspend-to-Disk is always supported |
| 20 | +too as long the kernel has been configured to support hibernation at all |
| 21 | +(ie. CONFIG_HIBERNATION is set in the kernel configuration file). Support |
| 22 | +for Suspend-to-RAM and Power-On Suspend depends on the capabilities of the |
| 23 | +platform. |
| 24 | + |
| 25 | +If one of the strings listed in /sys/power/state is written to it, the system |
| 26 | +will attempt to transition into the corresponding sleep state. Refer to |
| 27 | +Documentation/power/states.txt for a description of each of those states. |
| 28 | + |
| 29 | +/sys/power/disk controls the operating mode of hibernation (Suspend-to-Disk). |
| 30 | +Specifically, it tells the kernel what to do after creating a hibernation image. |
| 31 | + |
| 32 | +Reading from it returns a list of supported options encoded as: |
| 33 | + |
| 34 | +'platform' (put the system into sleep using a platform-provided method) |
| 35 | +'shutdown' (shut the system down) |
| 36 | +'reboot' (reboot the system) |
| 37 | +'suspend' (trigger a Suspend-to-RAM transition) |
| 38 | +'test_resume' (resume-after-hibernation test mode) |
| 39 | + |
| 40 | +The currently selected option is printed in square brackets. |
| 41 | + |
| 42 | +The 'platform' option is only available if the platform provides a special |
| 43 | +mechanism to put the system to sleep after creating a hibernation image (ACPI |
| 44 | +does that, for example). The 'suspend' option is available if Suspend-to-RAM |
| 45 | +is supported. Refer to Documentation/power/basic_pm_debugging.txt for the |
| 46 | +description of the 'test_resume' option. |
| 47 | + |
| 48 | +To select an option, write the string representing it to /sys/power/disk. |
| 49 | + |
| 50 | +/sys/power/image_size controls the size of hibernation images. |
| 51 | + |
| 52 | +It can be written a string representing a non-negative integer that will be |
| 53 | +used as a best-effort upper limit of the image size, in bytes. The hibernation |
| 54 | +core will do its best to ensure that the image size will not exceed that number. |
| 55 | +However, if that turns out to be impossible to achieve, a hibernation image will |
| 56 | +still be created and its size will be as small as possible. In particular, |
| 57 | +writing '0' to this file will enforce hibernation images to be as small as |
| 58 | +possible. |
| 59 | + |
| 60 | +Reading from this file returns the current image size limit, which is set to |
| 61 | +around 2/5 of available RAM by default. |
| 62 | + |
| 63 | +/sys/power/pm_trace controls the PM trace mechanism saving the last suspend |
| 64 | +or resume event point in the RTC across reboots. |
| 65 | + |
| 66 | +It helps to debug hard lockups or reboots due to device driver failures that |
| 67 | +occur during system suspend or resume (which is more common) more effectively. |
| 68 | + |
| 69 | +If /sys/power/pm_trace contains '1', the fingerprint of each suspend/resume |
| 70 | +event point in turn will be stored in the RTC memory (overwriting the actual |
| 71 | +RTC information), so it will survive a system crash if one occurs right after |
| 72 | +storing it and it can be used later to identify the driver that caused the crash |
| 73 | +to happen (see Documentation/power/s2ram.txt for more information). |
| 74 | + |
| 75 | +Initially it contains '0' which may be changed to '1' by writing a string |
| 76 | +representing a nonzero integer into it. |
0 commit comments