xref: /openbmc/linux/kernel/power/Kconfig (revision dc6a81c3)
1# SPDX-License-Identifier: GPL-2.0-only
2config SUSPEND
3	bool "Suspend to RAM and standby"
4	depends on ARCH_SUSPEND_POSSIBLE
5	default y
6	---help---
7	  Allow the system to enter sleep states in which main memory is
8	  powered and thus its contents are preserved, such as the
9	  suspend-to-RAM state (e.g. the ACPI S3 state).
10
11config SUSPEND_FREEZER
12	bool "Enable freezer for suspend to RAM/standby" \
13		if ARCH_WANTS_FREEZER_CONTROL || BROKEN
14	depends on SUSPEND
15	default y
16	help
17	  This allows you to turn off the freezer for suspend. If this is
18	  done, no tasks are frozen for suspend to RAM/standby.
19
20	  Turning OFF this setting is NOT recommended! If in doubt, say Y.
21
22config SUSPEND_SKIP_SYNC
23	bool "Skip kernel's sys_sync() on suspend to RAM/standby"
24	depends on SUSPEND
25	depends on EXPERT
26	help
27	  Skip the kernel sys_sync() before freezing user processes.
28	  Some systems prefer not to pay this cost on every invocation
29	  of suspend, or they are content with invoking sync() from
30	  user-space before invoking suspend.  There's a run-time switch
31	  at '/sys/power/sync_on_suspend' to configure this behaviour.
32	  This setting changes the default for the run-tim switch. Say Y
33	  to change the default to disable the kernel sys_sync().
34
35config HIBERNATE_CALLBACKS
36	bool
37
38config HIBERNATION
39	bool "Hibernation (aka 'suspend to disk')"
40	depends on SWAP && ARCH_HIBERNATION_POSSIBLE
41	select HIBERNATE_CALLBACKS
42	select LZO_COMPRESS
43	select LZO_DECOMPRESS
44	select CRC32
45	---help---
46	  Enable the suspend to disk (STD) functionality, which is usually
47	  called "hibernation" in user interfaces.  STD checkpoints the
48	  system and powers it off; and restores that checkpoint on reboot.
49
50	  You can suspend your machine with 'echo disk > /sys/power/state'
51	  after placing resume=/dev/swappartition on the kernel command line
52	  in your bootloader's configuration file.
53
54	  Alternatively, you can use the additional userland tools available
55	  from <http://suspend.sf.net>.
56
57	  In principle it does not require ACPI or APM, although for example
58	  ACPI will be used for the final steps when it is available.  One
59	  of the reasons to use software suspend is that the firmware hooks
60	  for suspend states like suspend-to-RAM (STR) often don't work very
61	  well with Linux.
62
63	  It creates an image which is saved in your active swap. Upon the next
64	  boot, pass the 'resume=/dev/swappartition' argument to the kernel to
65	  have it detect the saved image, restore memory state from it, and
66	  continue to run as before. If you do not want the previous state to
67	  be reloaded, then use the 'noresume' kernel command line argument.
68	  Note, however, that fsck will be run on your filesystems and you will
69	  need to run mkswap against the swap partition used for the suspend.
70
71	  It also works with swap files to a limited extent (for details see
72	  <file:Documentation/power/swsusp-and-swap-files.rst>).
73
74	  Right now you may boot without resuming and resume later but in the
75	  meantime you cannot use the swap partition(s)/file(s) involved in
76	  suspending.  Also in this case you must not use the filesystems
77	  that were mounted before the suspend.  In particular, you MUST NOT
78	  MOUNT any journaled filesystems mounted before the suspend or they
79	  will get corrupted in a nasty way.
80
81	  For more information take a look at <file:Documentation/power/swsusp.rst>.
82
83config ARCH_SAVE_PAGE_KEYS
84	bool
85
86config PM_STD_PARTITION
87	string "Default resume partition"
88	depends on HIBERNATION
89	default ""
90	---help---
91	  The default resume partition is the partition that the suspend-
92	  to-disk implementation will look for a suspended disk image.
93
94	  The partition specified here will be different for almost every user.
95	  It should be a valid swap partition (at least for now) that is turned
96	  on before suspending.
97
98	  The partition specified can be overridden by specifying:
99
100		resume=/dev/<other device>
101
102	  which will set the resume partition to the device specified.
103
104	  Note there is currently not a way to specify which device to save the
105	  suspended image to. It will simply pick the first available swap
106	  device.
107
108config PM_SLEEP
109	def_bool y
110	depends on SUSPEND || HIBERNATE_CALLBACKS
111	select PM
112	select SRCU
113
114config PM_SLEEP_SMP
115	def_bool y
116	depends on SMP
117	depends on ARCH_SUSPEND_POSSIBLE || ARCH_HIBERNATION_POSSIBLE
118	depends on PM_SLEEP
119	select HOTPLUG_CPU
120
121config PM_SLEEP_SMP_NONZERO_CPU
122	def_bool y
123	depends on PM_SLEEP_SMP
124	depends on ARCH_SUSPEND_NONZERO_CPU
125	---help---
126	If an arch can suspend (for suspend, hibernate, kexec, etc) on a
127	non-zero numbered CPU, it may define ARCH_SUSPEND_NONZERO_CPU. This
128	will allow nohz_full mask to include CPU0.
129
130config PM_AUTOSLEEP
131	bool "Opportunistic sleep"
132	depends on PM_SLEEP
133	default n
134	---help---
135	Allow the kernel to trigger a system transition into a global sleep
136	state automatically whenever there are no active wakeup sources.
137
138config PM_WAKELOCKS
139	bool "User space wakeup sources interface"
140	depends on PM_SLEEP
141	default n
142	---help---
143	Allow user space to create, activate and deactivate wakeup source
144	objects with the help of a sysfs-based interface.
145
146config PM_WAKELOCKS_LIMIT
147	int "Maximum number of user space wakeup sources (0 = no limit)"
148	range 0 100000
149	default 100
150	depends on PM_WAKELOCKS
151
152config PM_WAKELOCKS_GC
153	bool "Garbage collector for user space wakeup sources"
154	depends on PM_WAKELOCKS
155	default y
156
157config PM
158	bool "Device power management core functionality"
159	---help---
160	  Enable functionality allowing I/O devices to be put into energy-saving
161	  (low power) states, for example after a specified period of inactivity
162	  (autosuspended), and woken up in response to a hardware-generated
163	  wake-up event or a driver's request.
164
165	  Hardware support is generally required for this functionality to work
166	  and the bus type drivers of the buses the devices are on are
167	  responsible for the actual handling of device suspend requests and
168	  wake-up events.
169
170config PM_DEBUG
171	bool "Power Management Debug Support"
172	depends on PM
173	---help---
174	This option enables various debugging support in the Power Management
175	code. This is helpful when debugging and reporting PM bugs, like
176	suspend support.
177
178config PM_ADVANCED_DEBUG
179	bool "Extra PM attributes in sysfs for low-level debugging/testing"
180	depends on PM_DEBUG
181	---help---
182	Add extra sysfs attributes allowing one to access some Power Management
183	fields of device objects from user space.  If you are not a kernel
184	developer interested in debugging/testing Power Management, say "no".
185
186config PM_TEST_SUSPEND
187	bool "Test suspend/resume and wakealarm during bootup"
188	depends on SUSPEND && PM_DEBUG && RTC_CLASS=y
189	---help---
190	This option will let you suspend your machine during bootup, and
191	make it wake up a few seconds later using an RTC wakeup alarm.
192	Enable this with a kernel parameter like "test_suspend=mem".
193
194	You probably want to have your system's RTC driver statically
195	linked, ensuring that it's available when this test runs.
196
197config PM_SLEEP_DEBUG
198	def_bool y
199	depends on PM_DEBUG && PM_SLEEP
200
201config DPM_WATCHDOG
202	bool "Device suspend/resume watchdog"
203	depends on PM_DEBUG && PSTORE && EXPERT
204	---help---
205	  Sets up a watchdog timer to capture drivers that are
206	  locked up attempting to suspend/resume a device.
207	  A detected lockup causes system panic with message
208	  captured in pstore device for inspection in subsequent
209	  boot session.
210
211config DPM_WATCHDOG_TIMEOUT
212	int "Watchdog timeout in seconds"
213	range 1 120
214	default 120
215	depends on DPM_WATCHDOG
216
217config PM_TRACE
218	bool
219	help
220	  This enables code to save the last PM event point across
221	  reboot. The architecture needs to support this, x86 for
222	  example does by saving things in the RTC, see below.
223
224	  The architecture specific code must provide the extern
225	  functions from <linux/resume-trace.h> as well as the
226	  <asm/resume-trace.h> header with a TRACE_RESUME() macro.
227
228	  The way the information is presented is architecture-
229	  dependent, x86 will print the information during a
230	  late_initcall.
231
232config PM_TRACE_RTC
233	bool "Suspend/resume event tracing"
234	depends on PM_SLEEP_DEBUG
235	depends on X86
236	select PM_TRACE
237	---help---
238	This enables some cheesy code to save the last PM event point in the
239	RTC across reboots, so that you can debug a machine that just hangs
240	during suspend (or more commonly, during resume).
241
242	To use this debugging feature you should attempt to suspend the
243	machine, reboot it and then run
244
245		dmesg -s 1000000 | grep 'hash matches'
246
247	CAUTION: this option will cause your machine's real-time clock to be
248	set to an invalid time after a resume.
249
250config APM_EMULATION
251	tristate "Advanced Power Management Emulation"
252	depends on SYS_SUPPORTS_APM_EMULATION
253	help
254	  APM is a BIOS specification for saving power using several different
255	  techniques. This is mostly useful for battery powered laptops with
256	  APM compliant BIOSes. If you say Y here, the system time will be
257	  reset after a RESUME operation, the /proc/apm device will provide
258	  battery status information, and user-space programs will receive
259	  notification of APM "events" (e.g. battery status change).
260
261	  In order to use APM, you will need supporting software. For location
262	  and more information, read <file:Documentation/power/apm-acpi.rst>
263	  and the Battery Powered Linux mini-HOWTO, available from
264	  <http://www.tldp.org/docs.html#howto>.
265
266	  This driver does not spin down disk drives (see the hdparm(8)
267	  manpage ("man 8 hdparm") for that), and it doesn't turn off
268	  VESA-compliant "green" monitors.
269
270	  Generally, if you don't have a battery in your machine, there isn't
271	  much point in using this driver and you should say N. If you get
272	  random kernel OOPSes or reboots that don't seem to be related to
273	  anything, try disabling/enabling this option (or disabling/enabling
274	  APM in your BIOS).
275
276config PM_CLK
277	def_bool y
278	depends on PM && HAVE_CLK
279
280config PM_GENERIC_DOMAINS
281	bool
282	depends on PM
283
284config WQ_POWER_EFFICIENT_DEFAULT
285	bool "Enable workqueue power-efficient mode by default"
286	depends on PM
287	default n
288	help
289	  Per-cpu workqueues are generally preferred because they show
290	  better performance thanks to cache locality; unfortunately,
291	  per-cpu workqueues tend to be more power hungry than unbound
292	  workqueues.
293
294	  Enabling workqueue.power_efficient kernel parameter makes the
295	  per-cpu workqueues which were observed to contribute
296	  significantly to power consumption unbound, leading to measurably
297	  lower power usage at the cost of small performance overhead.
298
299	  This config option determines whether workqueue.power_efficient
300	  is enabled by default.
301
302	  If in doubt, say N.
303
304config PM_GENERIC_DOMAINS_SLEEP
305	def_bool y
306	depends on PM_SLEEP && PM_GENERIC_DOMAINS
307
308config PM_GENERIC_DOMAINS_OF
309	def_bool y
310	depends on PM_GENERIC_DOMAINS && OF
311
312config CPU_PM
313	bool
314
315config ENERGY_MODEL
316	bool "Energy Model for CPUs"
317	depends on SMP
318	depends on CPU_FREQ
319	default n
320	help
321	  Several subsystems (thermal and/or the task scheduler for example)
322	  can leverage information about the energy consumed by CPUs to make
323	  smarter decisions. This config option enables the framework from
324	  which subsystems can access the energy models.
325
326	  The exact usage of the energy model is subsystem-dependent.
327
328	  If in doubt, say N.
329