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