xref: /linux/arch/riscv/Kconfig (revision 20d38f7c45a44e4b762b586a7bcacbc93ddb3153)
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# For a description of the syntax of this configuration file,
4# see Documentation/kbuild/kconfig-language.rst.
5#
6
7config 64BIT
8	bool
9
10config 32BIT
11	bool
12
13config RISCV
14	def_bool y
15	select ARCH_CLOCKSOURCE_INIT
16	select ARCH_SUPPORTS_ATOMIC_RMW
17	select ARCH_HAS_BINFMT_FLAT
18	select ARCH_HAS_DEBUG_VIRTUAL if MMU
19	select ARCH_HAS_DEBUG_WX
20	select ARCH_HAS_GCOV_PROFILE_ALL
21	select ARCH_HAS_GIGANTIC_PAGE
22	select ARCH_HAS_KCOV
23	select ARCH_HAS_MMIOWB
24	select ARCH_HAS_PTE_SPECIAL
25	select ARCH_HAS_SET_DIRECT_MAP
26	select ARCH_HAS_SET_MEMORY
27	select ARCH_HAS_STRICT_KERNEL_RWX if MMU
28	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
29	select ARCH_WANT_FRAME_POINTERS
30	select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
31	select CLONE_BACKWARDS
32	select COMMON_CLK
33	select EDAC_SUPPORT
34	select GENERIC_ARCH_TOPOLOGY if SMP
35	select GENERIC_ATOMIC64 if !64BIT
36	select GENERIC_CLOCKEVENTS
37	select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
38	select GENERIC_IOREMAP
39	select GENERIC_IRQ_MULTI_HANDLER
40	select GENERIC_IRQ_SHOW
41	select GENERIC_PCI_IOMAP
42	select GENERIC_PTDUMP if MMU
43	select GENERIC_SCHED_CLOCK
44	select GENERIC_SMP_IDLE_THREAD
45	select GENERIC_STRNCPY_FROM_USER if MMU
46	select GENERIC_STRNLEN_USER if MMU
47	select GENERIC_TIME_VSYSCALL if MMU && 64BIT
48	select HANDLE_DOMAIN_IRQ
49	select HAVE_ARCH_AUDITSYSCALL
50	select HAVE_ARCH_KASAN if MMU && 64BIT
51	select HAVE_ARCH_KGDB
52	select HAVE_ARCH_KGDB_QXFER_PKT
53	select HAVE_ARCH_MMAP_RND_BITS if MMU
54	select HAVE_ARCH_SECCOMP_FILTER
55	select HAVE_ARCH_TRACEHOOK
56	select HAVE_ASM_MODVERSIONS
57	select HAVE_CONTEXT_TRACKING
58	select HAVE_COPY_THREAD_TLS
59	select HAVE_DMA_CONTIGUOUS if MMU
60	select HAVE_EBPF_JIT if MMU
61	select HAVE_FUTEX_CMPXCHG if FUTEX
62	select HAVE_GCC_PLUGINS
63	select HAVE_GENERIC_VDSO if MMU && 64BIT
64	select HAVE_PCI
65	select HAVE_PERF_EVENTS
66	select HAVE_PERF_REGS
67	select HAVE_PERF_USER_STACK_DUMP
68	select HAVE_SYSCALL_TRACEPOINTS
69	select IRQ_DOMAIN
70	select MODULES_USE_ELF_RELA if MODULES
71	select MODULE_SECTIONS if MODULES
72	select OF
73	select OF_EARLY_FLATTREE
74	select OF_IRQ
75	select PCI_DOMAINS_GENERIC if PCI
76	select PCI_MSI if PCI
77	select RISCV_INTC
78	select RISCV_TIMER
79	select SPARSEMEM_STATIC if 32BIT
80	select SPARSE_IRQ
81	select SYSCTL_EXCEPTION_TRACE
82	select THREAD_INFO_IN_TASK
83
84config ARCH_MMAP_RND_BITS_MIN
85	default 18 if 64BIT
86	default 8
87
88# max bits determined by the following formula:
89#  VA_BITS - PAGE_SHIFT - 3
90config ARCH_MMAP_RND_BITS_MAX
91	default 24 if 64BIT # SV39 based
92	default 17
93
94# set if we run in machine mode, cleared if we run in supervisor mode
95config RISCV_M_MODE
96	bool
97	default !MMU
98
99# set if we are running in S-mode and can use SBI calls
100config RISCV_SBI
101	bool
102	depends on !RISCV_M_MODE
103	default y
104
105config MMU
106	bool "MMU-based Paged Memory Management Support"
107	default y
108	help
109	  Select if you want MMU-based virtualised addressing space
110	  support by paged memory management. If unsure, say 'Y'.
111
112config ZONE_DMA32
113	bool
114	default y if 64BIT
115
116config VA_BITS
117	int
118	default 32 if 32BIT
119	default 39 if 64BIT
120
121config PA_BITS
122	int
123	default 34 if 32BIT
124	default 56 if 64BIT
125
126config PAGE_OFFSET
127	hex
128	default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB
129	default 0x80000000 if 64BIT && !MMU
130	default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
131	default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
132
133config ARCH_FLATMEM_ENABLE
134	def_bool y
135
136config ARCH_SPARSEMEM_ENABLE
137	def_bool y
138	depends on MMU
139	select SPARSEMEM_VMEMMAP_ENABLE
140
141config ARCH_SELECT_MEMORY_MODEL
142	def_bool ARCH_SPARSEMEM_ENABLE
143
144config ARCH_WANT_GENERAL_HUGETLB
145	def_bool y
146
147config ARCH_SUPPORTS_DEBUG_PAGEALLOC
148	def_bool y
149
150config SYS_SUPPORTS_HUGETLBFS
151	depends on MMU
152	def_bool y
153
154config STACKTRACE_SUPPORT
155	def_bool y
156
157config TRACE_IRQFLAGS_SUPPORT
158	def_bool y
159
160config GENERIC_BUG
161	def_bool y
162	depends on BUG
163	select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
164
165config GENERIC_BUG_RELATIVE_POINTERS
166	bool
167
168config GENERIC_CALIBRATE_DELAY
169	def_bool y
170
171config GENERIC_CSUM
172	def_bool y
173
174config GENERIC_HWEIGHT
175	def_bool y
176
177config FIX_EARLYCON_MEM
178	def_bool MMU
179
180config PGTABLE_LEVELS
181	int
182	default 3 if 64BIT
183	default 2
184
185config LOCKDEP_SUPPORT
186	def_bool y
187
188source "arch/riscv/Kconfig.socs"
189
190menu "Platform type"
191
192choice
193	prompt "Base ISA"
194	default ARCH_RV64I
195	help
196	  This selects the base ISA that this kernel will target and must match
197	  the target platform.
198
199config ARCH_RV32I
200	bool "RV32I"
201	select 32BIT
202	select GENERIC_LIB_ASHLDI3
203	select GENERIC_LIB_ASHRDI3
204	select GENERIC_LIB_LSHRDI3
205	select GENERIC_LIB_UCMPDI2
206	select MMU
207
208config ARCH_RV64I
209	bool "RV64I"
210	select 64BIT
211	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && GCC_VERSION >= 50000
212	select HAVE_DYNAMIC_FTRACE if MMU
213	select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
214	select HAVE_FTRACE_MCOUNT_RECORD
215	select HAVE_FUNCTION_GRAPH_TRACER
216	select HAVE_FUNCTION_TRACER
217	select SWIOTLB if MMU
218
219endchoice
220
221# We must be able to map all physical memory into the kernel, but the compiler
222# is still a bit more efficient when generating code if it's setup in a manner
223# such that it can only map 2GiB of memory.
224choice
225	prompt "Kernel Code Model"
226	default CMODEL_MEDLOW if 32BIT
227	default CMODEL_MEDANY if 64BIT
228
229	config CMODEL_MEDLOW
230		bool "medium low code model"
231	config CMODEL_MEDANY
232		bool "medium any code model"
233endchoice
234
235config MODULE_SECTIONS
236	bool
237	select HAVE_MOD_ARCH_SPECIFIC
238
239choice
240	prompt "Maximum Physical Memory"
241	default MAXPHYSMEM_2GB if 32BIT
242	default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
243	default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
244
245	config MAXPHYSMEM_2GB
246		bool "2GiB"
247	config MAXPHYSMEM_128GB
248		depends on 64BIT && CMODEL_MEDANY
249		bool "128GiB"
250endchoice
251
252
253config SMP
254	bool "Symmetric Multi-Processing"
255	help
256	  This enables support for systems with more than one CPU.  If
257	  you say N here, the kernel will run on single and
258	  multiprocessor machines, but will use only one CPU of a
259	  multiprocessor machine. If you say Y here, the kernel will run
260	  on many, but not all, single processor machines. On a single
261	  processor machine, the kernel will run faster if you say N
262	  here.
263
264	  If you don't know what to do here, say N.
265
266config NR_CPUS
267	int "Maximum number of CPUs (2-32)"
268	range 2 32
269	depends on SMP
270	default "8"
271
272config HOTPLUG_CPU
273	bool "Support for hot-pluggable CPUs"
274	depends on SMP
275	select GENERIC_IRQ_MIGRATION
276	help
277
278	  Say Y here to experiment with turning CPUs off and on.  CPUs
279	  can be controlled through /sys/devices/system/cpu.
280
281	  Say N if you want to disable CPU hotplug.
282
283choice
284	prompt "CPU Tuning"
285	default TUNE_GENERIC
286
287config TUNE_GENERIC
288	bool "generic"
289
290endchoice
291
292config RISCV_ISA_C
293	bool "Emit compressed instructions when building Linux"
294	default y
295	help
296	   Adds "C" to the ISA subsets that the toolchain is allowed to emit
297	   when building Linux, which results in compressed instructions in the
298	   Linux binary.
299
300	   If you don't know what to do here, say Y.
301
302menu "supported PMU type"
303	depends on PERF_EVENTS
304
305config RISCV_BASE_PMU
306	bool "Base Performance Monitoring Unit"
307	def_bool y
308	help
309	  A base PMU that serves as a reference implementation and has limited
310	  feature of perf.  It can run on any RISC-V machines so serves as the
311	  fallback, but this option can also be disable to reduce kernel size.
312
313endmenu
314
315config FPU
316	bool "FPU support"
317	default y
318	help
319	  Say N here if you want to disable all floating-point related procedure
320	  in the kernel.
321
322	  If you don't know what to do here, say Y.
323
324endmenu
325
326menu "Kernel features"
327
328source "kernel/Kconfig.hz"
329
330config SECCOMP
331	bool "Enable seccomp to safely compute untrusted bytecode"
332	help
333	  This kernel feature is useful for number crunching applications
334	  that may need to compute untrusted bytecode during their
335	  execution. By using pipes or other transports made available to
336	  the process as file descriptors supporting the read/write
337	  syscalls, it's possible to isolate those applications in
338	  their own address space using seccomp. Once seccomp is
339	  enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
340	  and the task is only allowed to execute a few safe syscalls
341	  defined by each seccomp mode.
342
343config RISCV_SBI_V01
344	bool "SBI v0.1 support"
345	default y
346	depends on RISCV_SBI
347	help
348	  This config allows kernel to use SBI v0.1 APIs. This will be
349	  deprecated in future once legacy M-mode software are no longer in use.
350endmenu
351
352menu "Boot options"
353
354config CMDLINE
355	string "Built-in kernel command line"
356	help
357	  For most platforms, the arguments for the kernel's command line
358	  are provided at run-time, during boot. However, there are cases
359	  where either no arguments are being provided or the provided
360	  arguments are insufficient or even invalid.
361
362	  When that occurs, it is possible to define a built-in command
363	  line here and choose how the kernel should use it later on.
364
365choice
366	prompt "Built-in command line usage" if CMDLINE != ""
367	default CMDLINE_FALLBACK
368	help
369	  Choose how the kernel will handle the provided built-in command
370	  line.
371
372config CMDLINE_FALLBACK
373	bool "Use bootloader kernel arguments if available"
374	help
375	  Use the built-in command line as fallback in case we get nothing
376	  during boot. This is the default behaviour.
377
378config CMDLINE_EXTEND
379	bool "Extend bootloader kernel arguments"
380	help
381	  The command-line arguments provided during boot will be
382	  appended to the built-in command line. This is useful in
383	  cases where the provided arguments are insufficient and
384	  you don't want to or cannot modify them.
385
386
387config CMDLINE_FORCE
388	bool "Always use the default kernel command string"
389	help
390	  Always use the built-in command line, even if we get one during
391	  boot. This is useful in case you need to override the provided
392	  command line on systems where you don't have or want control
393	  over it.
394
395endchoice
396
397endmenu
398
399config BUILTIN_DTB
400	def_bool n
401	depends on RISCV_M_MODE
402	depends on OF
403
404menu "Power management options"
405
406source "kernel/power/Kconfig"
407
408endmenu
409