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