xref: /openbmc/linux/arch/riscv/Kconfig (revision 8ad8b72721d0f07fa02dbe71f901743f9c71c8e6)
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	# even on 32-bit, physical (and DMA) addresses are > 32-bits
16	select PHYS_ADDR_T_64BIT
17	select OF
18	select OF_EARLY_FLATTREE
19	select OF_IRQ
20	select ARCH_HAS_BINFMT_FLAT
21	select ARCH_WANT_FRAME_POINTERS
22	select CLONE_BACKWARDS
23	select COMMON_CLK
24	select GENERIC_CLOCKEVENTS
25	select GENERIC_CPU_DEVICES
26	select GENERIC_IRQ_SHOW
27	select GENERIC_PCI_IOMAP
28	select GENERIC_SCHED_CLOCK
29	select GENERIC_STRNCPY_FROM_USER if MMU
30	select GENERIC_STRNLEN_USER if MMU
31	select GENERIC_SMP_IDLE_THREAD
32	select GENERIC_ATOMIC64 if !64BIT
33	select GENERIC_IOREMAP
34	select HAVE_ARCH_AUDITSYSCALL
35	select HAVE_ARCH_SECCOMP_FILTER
36	select HAVE_ASM_MODVERSIONS
37	select HAVE_MEMBLOCK_NODE_MAP
38	select HAVE_DMA_CONTIGUOUS if MMU
39	select HAVE_FUTEX_CMPXCHG if FUTEX
40	select HAVE_PERF_EVENTS
41	select HAVE_PERF_REGS
42	select HAVE_PERF_USER_STACK_DUMP
43	select HAVE_SYSCALL_TRACEPOINTS
44	select IRQ_DOMAIN
45	select SPARSE_IRQ
46	select SYSCTL_EXCEPTION_TRACE
47	select HAVE_ARCH_TRACEHOOK
48	select HAVE_PCI
49	select MODULES_USE_ELF_RELA if MODULES
50	select MODULE_SECTIONS if MODULES
51	select THREAD_INFO_IN_TASK
52	select PCI_DOMAINS_GENERIC if PCI
53	select PCI_MSI if PCI
54	select RISCV_TIMER
55	select UACCESS_MEMCPY if !MMU
56	select GENERIC_IRQ_MULTI_HANDLER
57	select GENERIC_ARCH_TOPOLOGY if SMP
58	select ARCH_HAS_PTE_SPECIAL
59	select ARCH_HAS_MMIOWB
60	select HAVE_EBPF_JIT if 64BIT
61	select EDAC_SUPPORT
62	select ARCH_HAS_GIGANTIC_PAGE
63	select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
64	select SPARSEMEM_STATIC if 32BIT
65	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
66	select HAVE_ARCH_MMAP_RND_BITS if MMU
67	select ARCH_HAS_GCOV_PROFILE_ALL
68	select HAVE_COPY_THREAD_TLS
69	select HAVE_ARCH_KASAN if MMU && 64BIT
70
71config ARCH_MMAP_RND_BITS_MIN
72	default 18 if 64BIT
73	default 8
74
75# max bits determined by the following formula:
76#  VA_BITS - PAGE_SHIFT - 3
77config ARCH_MMAP_RND_BITS_MAX
78	default 24 if 64BIT # SV39 based
79	default 17
80
81# set if we run in machine mode, cleared if we run in supervisor mode
82config RISCV_M_MODE
83	bool
84	default !MMU
85
86# set if we are running in S-mode and can use SBI calls
87config RISCV_SBI
88	bool
89	depends on !RISCV_M_MODE
90	default y
91
92config MMU
93	bool "MMU-based Paged Memory Management Support"
94	default y
95	help
96	  Select if you want MMU-based virtualised addressing space
97	  support by paged memory management. If unsure, say 'Y'.
98
99config ZONE_DMA32
100	bool
101	default y if 64BIT
102
103config VA_BITS
104	int
105	default 32 if 32BIT
106	default 39 if 64BIT
107
108config PA_BITS
109	int
110	default 34 if 32BIT
111	default 56 if 64BIT
112
113config PAGE_OFFSET
114	hex
115	default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB
116	default 0x80000000 if 64BIT && !MMU
117	default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
118	default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
119
120config ARCH_FLATMEM_ENABLE
121	def_bool y
122
123config ARCH_SPARSEMEM_ENABLE
124	def_bool y
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