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