xref: /linux/drivers/cpufreq/Kconfig (revision 2e00c2dcc5325af04e2dfbb29281ced1c724ab81)
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	select CPU_FREQ_GOV_COMMON
167	help
168	  'conservative' - this driver is rather similar to the 'ondemand'
169	  governor both in its source code and its purpose, the difference is
170	  its optimisation for better suitability in a battery powered
171	  environment.  The frequency is gracefully increased and decreased
172	  rather than jumping to 100% when speed is required.
173
174	  If you have a desktop machine then you should really be considering
175	  the 'ondemand' governor instead, however if you are using a laptop,
176	  PDA or even an AMD64 based computer (due to the unacceptable
177	  step-by-step latency issues between the minimum and maximum frequency
178	  transitions in the CPU) you will probably want to use this governor.
179
180	  To compile this driver as a module, choose M here: the
181	  module will be called cpufreq_conservative.
182
183	  For details, take a look at
184	  <file:Documentation/admin-guide/pm/cpufreq.rst>.
185
186	  If in doubt, say N.
187
188config CPU_FREQ_GOV_SCHEDUTIL
189	bool "'schedutil' cpufreq policy governor"
190	depends on SMP
191	select CPU_FREQ_GOV_ATTR_SET
192	select IRQ_WORK
193	help
194	  This governor makes decisions based on the utilization data provided
195	  by the scheduler.  It sets the CPU frequency to be proportional to
196	  the utilization/capacity ratio coming from the scheduler.  If the
197	  utilization is frequency-invariant, the new frequency is also
198	  proportional to the maximum available frequency.  If that is not the
199	  case, it is proportional to the current frequency of the CPU.  The
200	  frequency tipping point is at utilization/capacity equal to 80% in
201	  both cases.
202
203	  If in doubt, say N.
204
205comment "CPU frequency scaling drivers"
206
207config CPUFREQ_DT
208	tristate "Generic DT based cpufreq driver"
209	depends on HAVE_CLK && OF
210	select CPUFREQ_DT_PLATDEV
211	select PM_OPP
212	help
213	  This adds a generic DT based cpufreq driver for frequency management.
214	  It supports both uniprocessor (UP) and symmetric multiprocessor (SMP)
215	  systems.
216
217	  If in doubt, say N.
218
219config CPUFREQ_DT_RUST
220	tristate "Rust based Generic DT based cpufreq driver"
221	depends on HAVE_CLK && OF && RUST
222	select CPUFREQ_DT_PLATDEV
223	select PM_OPP
224	help
225	  This adds a Rust based generic DT based cpufreq driver for frequency
226	  management.  It supports both uniprocessor (UP) and symmetric
227	  multiprocessor (SMP) systems.
228
229	  If in doubt, say N.
230
231config CPUFREQ_VIRT
232	tristate "Virtual cpufreq driver"
233	depends on GENERIC_ARCH_TOPOLOGY
234	help
235	  This adds a virtualized cpufreq driver for guest kernels that
236	  read/writes to a MMIO region for a virtualized cpufreq device to
237	  communicate with the host. It sends performance requests to the host
238	  which gets used as a hint to schedule vCPU threads and select CPU
239	  frequency. If a VM does not support a virtualized FIE such as AMUs,
240	  it updates the frequency scaling factor by polling host CPU frequency
241	  to enable accurate Per-Entity Load Tracking for tasks running in the guest.
242
243	  If in doubt, say N.
244
245config CPUFREQ_DT_PLATDEV
246	bool "Generic DT based cpufreq platdev driver"
247	depends on OF
248	help
249	  This adds a generic DT based cpufreq platdev driver for frequency
250	  management.  This creates a 'cpufreq-dt' platform device, on the
251	  supported platforms.
252
253	  If in doubt, say N.
254
255if X86
256source "drivers/cpufreq/Kconfig.x86"
257endif
258
259source "drivers/cpufreq/Kconfig.arm"
260
261if PPC32 || PPC64
262source "drivers/cpufreq/Kconfig.powerpc"
263endif
264
265if MIPS
266config BMIPS_CPUFREQ
267	tristate "BMIPS CPUfreq Driver"
268	help
269	  This option adds a CPUfreq driver for BMIPS processors with
270	  support for configurable CPU frequency.
271
272	  For now, BMIPS5 chips are supported (such as the Broadcom 7425).
273
274	  If in doubt, say N.
275
276config LOONGSON2_CPUFREQ
277	tristate "Loongson2 CPUFreq Driver"
278	depends on LEMOTE_MACH2F
279	help
280	  This option adds a CPUFreq driver for loongson processors which
281	  support software configurable cpu frequency.
282
283	  Loongson2F and its successors support this feature.
284
285	  If in doubt, say N.
286endif
287
288if LOONGARCH
289config LOONGSON3_CPUFREQ
290	tristate "Loongson3 CPUFreq Driver"
291	help
292	  This option adds a CPUFreq driver for Loongson processors which
293	  support software configurable cpu frequency.
294
295	  Loongson-3 family processors support this feature.
296
297	  If in doubt, say N.
298endif
299
300if SPARC64
301config SPARC_US3_CPUFREQ
302	tristate "UltraSPARC-III CPU Frequency driver"
303	help
304	  This adds the CPUFreq driver for UltraSPARC-III processors.
305
306	  If in doubt, say N.
307
308config SPARC_US2E_CPUFREQ
309	tristate "UltraSPARC-IIe CPU Frequency driver"
310	help
311	  This adds the CPUFreq driver for UltraSPARC-IIe processors.
312
313	  If in doubt, say N.
314endif
315
316if SUPERH
317config SH_CPU_FREQ
318	tristate "SuperH CPU Frequency driver"
319	help
320	  This adds the cpufreq driver for SuperH. Any CPU that supports
321	  clock rate rounding through the clock framework can use this
322	  driver. While it will make the kernel slightly larger, this is
323	  harmless for CPUs that don't support rate rounding. The driver
324	  will also generate a notice in the boot log before disabling
325	  itself if the CPU in question is not capable of rate rounding.
326
327	  If unsure, say N.
328endif
329
330config QORIQ_CPUFREQ
331	tristate "CPU frequency scaling driver for Freescale QorIQ SoCs"
332	depends on OF && COMMON_CLK
333	depends on PPC_E500MC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
334	select CLK_QORIQ
335	help
336	  This adds the CPUFreq driver support for Freescale QorIQ SoCs
337	  which are capable of changing the CPU's frequency dynamically.
338
339config ACPI_CPPC_CPUFREQ
340	tristate "CPUFreq driver based on the ACPI CPPC spec"
341	depends on ACPI_PROCESSOR
342	depends on ARM || ARM64 || RISCV
343	select ACPI_CPPC_LIB
344	help
345	  This adds a CPUFreq driver which uses CPPC methods
346	  as described in the ACPIv5.1 spec. CPPC stands for
347	  Collaborative Processor Performance Controls. It
348	  is based on an abstract continuous scale of CPU
349	  performance values which allows the remote power
350	  processor to flexibly optimize for power and
351	  performance. CPPC relies on power management firmware
352	  support for its operation.
353
354	  If in doubt, say N.
355
356config ACPI_CPPC_CPUFREQ_FIE
357	bool "Frequency Invariance support for CPPC cpufreq driver"
358	depends on ACPI_CPPC_CPUFREQ && GENERIC_ARCH_TOPOLOGY
359	depends on ARM || ARM64 || RISCV
360	default y
361	help
362	  This extends frequency invariance support in the CPPC cpufreq driver,
363	  by using CPPC delivered and reference performance counters.
364
365	  If in doubt, say N.
366
367endif # CPU_FREQ
368
369endmenu
370