xref: /linux/drivers/cpufreq/Kconfig (revision 976aa630da5b5508c278487db31b873ddf6bae8f)
1# SPDX-License-Identifier: GPL-2.0-only
2menu "CPU Frequency scaling"
3
4config CPU_FREQ
5	bool "CPU Frequency scaling"
6	help
7	  CPU Frequency scaling allows you to change the clock speed of
8	  CPUs on the fly. This is a nice method to save power, because
9	  the lower the CPU clock speed, the less power the CPU consumes.
10
11	  Note that this driver doesn't automatically change the CPU
12	  clock speed, you need to either enable a dynamic cpufreq governor
13	  (see below) after boot, or use a userspace tool.
14
15	  For details, take a look at
16	  <file:Documentation/admin-guide/pm/cpufreq.rst>.
17
18	  If in doubt, say N.
19
20if CPU_FREQ
21
22config CPU_FREQ_GOV_ATTR_SET
23	bool
24
25config CPU_FREQ_GOV_COMMON
26	select CPU_FREQ_GOV_ATTR_SET
27	select IRQ_WORK
28	bool
29
30config CPU_FREQ_STAT
31	bool "CPU frequency transition statistics"
32	help
33	  Export CPU frequency statistics information through sysfs.
34
35	  If in doubt, say N.
36
37choice
38	prompt "Default CPUFreq governor"
39	default CPU_FREQ_DEFAULT_GOV_USERSPACE if ARM_SA1110_CPUFREQ
40	default CPU_FREQ_DEFAULT_GOV_SCHEDUTIL if ARM64 || ARM
41	default CPU_FREQ_DEFAULT_GOV_SCHEDUTIL if (X86_INTEL_PSTATE || X86_AMD_PSTATE) && SMP
42	default CPU_FREQ_DEFAULT_GOV_PERFORMANCE
43	help
44	  This option sets which CPUFreq governor shall be loaded at
45	  startup. If in doubt, use the default setting.
46
47config CPU_FREQ_DEFAULT_GOV_PERFORMANCE
48	bool "performance"
49	select CPU_FREQ_GOV_PERFORMANCE
50	help
51	  Use the CPUFreq governor 'performance' as default. This sets
52	  the frequency statically to the highest frequency supported by
53	  the CPU.
54
55config CPU_FREQ_DEFAULT_GOV_POWERSAVE
56	bool "powersave"
57	select CPU_FREQ_GOV_POWERSAVE
58	help
59	  Use the CPUFreq governor 'powersave' as default. This sets
60	  the frequency statically to the lowest frequency supported by
61	  the CPU.
62
63config CPU_FREQ_DEFAULT_GOV_USERSPACE
64	bool "userspace"
65	select CPU_FREQ_GOV_USERSPACE
66	help
67	  Use the CPUFreq governor 'userspace' as default. This allows
68	  you to set the CPU frequency manually or when a userspace
69	  program shall be able to set the CPU dynamically without having
70	  to enable the userspace governor manually.
71
72config CPU_FREQ_DEFAULT_GOV_ONDEMAND
73	bool "ondemand"
74	depends on !(X86_INTEL_PSTATE && SMP)
75	select CPU_FREQ_GOV_ONDEMAND
76	select CPU_FREQ_GOV_PERFORMANCE
77	help
78	  Use the CPUFreq governor 'ondemand' as default. This allows
79	  you to get a full dynamic frequency capable system by simply
80	  loading your cpufreq low-level hardware driver.
81	  Be aware that not all cpufreq drivers support the ondemand
82	  governor. If unsure have a look at the help section of the
83	  driver. Fallback governor will be the performance governor.
84
85config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
86	bool "conservative"
87	depends on !(X86_INTEL_PSTATE && SMP)
88	select CPU_FREQ_GOV_CONSERVATIVE
89	select CPU_FREQ_GOV_PERFORMANCE
90	help
91	  Use the CPUFreq governor 'conservative' as default. This allows
92	  you to get a full dynamic frequency capable system by simply
93	  loading your cpufreq low-level hardware driver.
94	  Be aware that not all cpufreq drivers support the conservative
95	  governor. If unsure have a look at the help section of the
96	  driver. Fallback governor will be the performance governor.
97
98config CPU_FREQ_DEFAULT_GOV_SCHEDUTIL
99	bool "schedutil"
100	depends on SMP
101	select CPU_FREQ_GOV_SCHEDUTIL
102	select CPU_FREQ_GOV_PERFORMANCE
103	help
104	  Use the 'schedutil' CPUFreq governor by default. If unsure,
105	  have a look at the help section of that governor. The fallback
106	  governor will be 'performance'.
107
108endchoice
109
110config CPU_FREQ_GOV_PERFORMANCE
111	tristate "'performance' governor"
112	help
113	  This cpufreq governor sets the frequency statically to the
114	  highest available CPU frequency.
115
116	  To compile this driver as a module, choose M here: the
117	  module will be called cpufreq_performance.
118
119	  If in doubt, say Y.
120
121config CPU_FREQ_GOV_POWERSAVE
122	tristate "'powersave' governor"
123	help
124	  This cpufreq governor sets the frequency statically to the
125	  lowest available CPU frequency.
126
127	  To compile this driver as a module, choose M here: the
128	  module will be called cpufreq_powersave.
129
130	  If in doubt, say Y.
131
132config CPU_FREQ_GOV_USERSPACE
133	tristate "'userspace' governor for userspace frequency scaling"
134	help
135	  Enable this cpufreq governor when you either want to set the
136	  CPU frequency manually or when a userspace program shall
137	  be able to set the CPU dynamically, like on LART
138	  <http://www.lartmaker.nl/>.
139
140	  To compile this driver as a module, choose M here: the
141	  module will be called cpufreq_userspace.
142
143	  If in doubt, say Y.
144
145config CPU_FREQ_GOV_ONDEMAND
146	tristate "'ondemand' cpufreq policy governor"
147	select CPU_FREQ_GOV_COMMON
148	help
149	  'ondemand' - This driver adds a dynamic cpufreq policy governor.
150	  The governor does a periodic polling and
151	  changes frequency based on the CPU utilization.
152	  The support for this governor depends on CPU capability to
153	  do fast frequency switching (i.e, very low latency frequency
154	  transitions).
155
156	  To compile this driver as a module, choose M here: the
157	  module will be called cpufreq_ondemand.
158
159	  For details, take a look at
160	  <file:Documentation/admin-guide/pm/cpufreq.rst>.
161
162	  If in doubt, say N.
163
164config CPU_FREQ_GOV_CONSERVATIVE
165	tristate "'conservative' cpufreq governor"
166	depends on CPU_FREQ
167	select CPU_FREQ_GOV_COMMON
168	help
169	  'conservative' - this driver is rather similar to the 'ondemand'
170	  governor both in its source code and its purpose, the difference is
171	  its optimisation for better suitability in a battery powered
172	  environment.  The frequency is gracefully increased and decreased
173	  rather than jumping to 100% when speed is required.
174
175	  If you have a desktop machine then you should really be considering
176	  the 'ondemand' governor instead, however if you are using a laptop,
177	  PDA or even an AMD64 based computer (due to the unacceptable
178	  step-by-step latency issues between the minimum and maximum frequency
179	  transitions in the CPU) you will probably want to use this governor.
180
181	  To compile this driver as a module, choose M here: the
182	  module will be called cpufreq_conservative.
183
184	  For details, take a look at
185	  <file:Documentation/admin-guide/pm/cpufreq.rst>.
186
187	  If in doubt, say N.
188
189config CPU_FREQ_GOV_SCHEDUTIL
190	bool "'schedutil' cpufreq policy governor"
191	depends on CPU_FREQ && SMP
192	select CPU_FREQ_GOV_ATTR_SET
193	select IRQ_WORK
194	help
195	  This governor makes decisions based on the utilization data provided
196	  by the scheduler.  It sets the CPU frequency to be proportional to
197	  the utilization/capacity ratio coming from the scheduler.  If the
198	  utilization is frequency-invariant, the new frequency is also
199	  proportional to the maximum available frequency.  If that is not the
200	  case, it is proportional to the current frequency of the CPU.  The
201	  frequency tipping point is at utilization/capacity equal to 80% in
202	  both cases.
203
204	  If in doubt, say N.
205
206comment "CPU frequency scaling drivers"
207
208config CPUFREQ_DT
209	tristate "Generic DT based cpufreq driver"
210	depends on HAVE_CLK && OF
211	select CPUFREQ_DT_PLATDEV
212	select PM_OPP
213	help
214	  This adds a generic DT based cpufreq driver for frequency management.
215	  It supports both uniprocessor (UP) and symmetric multiprocessor (SMP)
216	  systems.
217
218	  If in doubt, say N.
219
220config CPUFREQ_DT_RUST
221	tristate "Rust based Generic DT based cpufreq driver"
222	depends on HAVE_CLK && OF && RUST
223	select CPUFREQ_DT_PLATDEV
224	select PM_OPP
225	help
226	  This adds a Rust based generic DT based cpufreq driver for frequency
227	  management.  It supports both uniprocessor (UP) and symmetric
228	  multiprocessor (SMP) systems.
229
230	  If in doubt, say N.
231
232config CPUFREQ_VIRT
233	tristate "Virtual cpufreq driver"
234	depends on GENERIC_ARCH_TOPOLOGY
235	help
236	  This adds a virtualized cpufreq driver for guest kernels that
237	  read/writes to a MMIO region for a virtualized cpufreq device to
238	  communicate with the host. It sends performance requests to the host
239	  which gets used as a hint to schedule vCPU threads and select CPU
240	  frequency. If a VM does not support a virtualized FIE such as AMUs,
241	  it updates the frequency scaling factor by polling host CPU frequency
242	  to enable accurate Per-Entity Load Tracking for tasks running in the guest.
243
244	  If in doubt, say N.
245
246config CPUFREQ_DT_PLATDEV
247	bool "Generic DT based cpufreq platdev driver"
248	depends on OF
249	help
250	  This adds a generic DT based cpufreq platdev driver for frequency
251	  management.  This creates a 'cpufreq-dt' platform device, on the
252	  supported platforms.
253
254	  If in doubt, say N.
255
256if X86
257source "drivers/cpufreq/Kconfig.x86"
258endif
259
260source "drivers/cpufreq/Kconfig.arm"
261
262if PPC32 || PPC64
263source "drivers/cpufreq/Kconfig.powerpc"
264endif
265
266if MIPS
267config BMIPS_CPUFREQ
268	tristate "BMIPS CPUfreq Driver"
269	help
270	  This option adds a CPUfreq driver for BMIPS processors with
271	  support for configurable CPU frequency.
272
273	  For now, BMIPS5 chips are supported (such as the Broadcom 7425).
274
275	  If in doubt, say N.
276
277config LOONGSON2_CPUFREQ
278	tristate "Loongson2 CPUFreq Driver"
279	depends on LEMOTE_MACH2F
280	help
281	  This option adds a CPUFreq driver for loongson processors which
282	  support software configurable cpu frequency.
283
284	  Loongson2F and its successors support this feature.
285
286	  If in doubt, say N.
287endif
288
289if LOONGARCH
290config LOONGSON3_CPUFREQ
291	tristate "Loongson3 CPUFreq Driver"
292	help
293	  This option adds a CPUFreq driver for Loongson processors which
294	  support software configurable cpu frequency.
295
296	  Loongson-3 family processors support this feature.
297
298	  If in doubt, say N.
299endif
300
301if SPARC64
302config SPARC_US3_CPUFREQ
303	tristate "UltraSPARC-III CPU Frequency driver"
304	help
305	  This adds the CPUFreq driver for UltraSPARC-III processors.
306
307	  If in doubt, say N.
308
309config SPARC_US2E_CPUFREQ
310	tristate "UltraSPARC-IIe CPU Frequency driver"
311	help
312	  This adds the CPUFreq driver for UltraSPARC-IIe processors.
313
314	  If in doubt, say N.
315endif
316
317if SUPERH
318config SH_CPU_FREQ
319	tristate "SuperH CPU Frequency driver"
320	help
321	  This adds the cpufreq driver for SuperH. Any CPU that supports
322	  clock rate rounding through the clock framework can use this
323	  driver. While it will make the kernel slightly larger, this is
324	  harmless for CPUs that don't support rate rounding. The driver
325	  will also generate a notice in the boot log before disabling
326	  itself if the CPU in question is not capable of rate rounding.
327
328	  If unsure, say N.
329endif
330
331config QORIQ_CPUFREQ
332	tristate "CPU frequency scaling driver for Freescale QorIQ SoCs"
333	depends on OF && COMMON_CLK
334	depends on PPC_E500MC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
335	select CLK_QORIQ
336	help
337	  This adds the CPUFreq driver support for Freescale QorIQ SoCs
338	  which are capable of changing the CPU's frequency dynamically.
339
340config ACPI_CPPC_CPUFREQ
341	tristate "CPUFreq driver based on the ACPI CPPC spec"
342	depends on ACPI_PROCESSOR
343	depends on ARM || ARM64 || RISCV
344	select ACPI_CPPC_LIB
345	help
346	  This adds a CPUFreq driver which uses CPPC methods
347	  as described in the ACPIv5.1 spec. CPPC stands for
348	  Collaborative Processor Performance Controls. It
349	  is based on an abstract continuous scale of CPU
350	  performance values which allows the remote power
351	  processor to flexibly optimize for power and
352	  performance. CPPC relies on power management firmware
353	  support for its operation.
354
355	  If in doubt, say N.
356
357config ACPI_CPPC_CPUFREQ_FIE
358	bool "Frequency Invariance support for CPPC cpufreq driver"
359	depends on ACPI_CPPC_CPUFREQ && GENERIC_ARCH_TOPOLOGY
360	depends on ARM || ARM64 || RISCV
361	default y
362	help
363	  This extends frequency invariance support in the CPPC cpufreq driver,
364	  by using CPPC delivered and reference performance counters.
365
366	  If in doubt, say N.
367
368endif
369
370endmenu
371