• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_VM_PGTABLE
19	select ARCH_HAS_DEBUG_VIRTUAL if MMU
20	select ARCH_HAS_DEBUG_WX
21	select ARCH_HAS_GCOV_PROFILE_ALL
22	select ARCH_HAS_GIGANTIC_PAGE
23	select ARCH_HAS_KCOV
24	select ARCH_HAS_MMIOWB
25	select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
26	select ARCH_HAS_PTE_SPECIAL
27	select ARCH_HAS_SET_DIRECT_MAP
28	select ARCH_HAS_SET_MEMORY
29	select ARCH_HAS_STRICT_KERNEL_RWX if MMU
30	select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
31	select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
32	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
33	select ARCH_WANT_FRAME_POINTERS
34	select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
35	select CLONE_BACKWARDS
36	select CLINT_TIMER if !MMU
37	select COMMON_CLK
38	select EDAC_SUPPORT
39	select GENERIC_ARCH_TOPOLOGY
40	select GENERIC_ATOMIC64 if !64BIT
41	select GENERIC_CLOCKEVENTS
42	select GENERIC_EARLY_IOREMAP
43	select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
44	select GENERIC_IOREMAP
45	select GENERIC_IRQ_MULTI_HANDLER
46	select GENERIC_IRQ_SHOW
47	select GENERIC_PCI_IOMAP
48	select GENERIC_PTDUMP if MMU
49	select GENERIC_SCHED_CLOCK
50	select GENERIC_SMP_IDLE_THREAD
51	select GENERIC_STRNCPY_FROM_USER if MMU
52	select GENERIC_STRNLEN_USER if MMU
53	select GENERIC_TIME_VSYSCALL if MMU && 64BIT
54	select HANDLE_DOMAIN_IRQ
55	select HAVE_ARCH_AUDITSYSCALL
56	select HAVE_ARCH_JUMP_LABEL
57	select HAVE_ARCH_JUMP_LABEL_RELATIVE
58	select HAVE_ARCH_KASAN if MMU && 64BIT
59	select HAVE_ARCH_KGDB
60	select HAVE_ARCH_KGDB_QXFER_PKT
61	select HAVE_ARCH_MMAP_RND_BITS if MMU
62	select HAVE_ARCH_SECCOMP_FILTER
63	select HAVE_ARCH_TRACEHOOK
64	select HAVE_ASM_MODVERSIONS
65	select HAVE_CONTEXT_TRACKING
66	select HAVE_DEBUG_KMEMLEAK
67	select HAVE_DMA_CONTIGUOUS if MMU
68	select HAVE_EBPF_JIT if MMU
69	select HAVE_FUTEX_CMPXCHG if FUTEX
70	select HAVE_GCC_PLUGINS
71	select HAVE_GENERIC_VDSO if MMU && 64BIT
72	select HAVE_PCI
73	select HAVE_PERF_EVENTS
74	select HAVE_PERF_REGS
75	select HAVE_PERF_USER_STACK_DUMP
76	select HAVE_STACKPROTECTOR
77	select HAVE_SYSCALL_TRACEPOINTS
78	select IRQ_DOMAIN
79	select MODULES_USE_ELF_RELA if MODULES
80	select MODULE_SECTIONS if MODULES
81	select OF
82	select OF_EARLY_FLATTREE
83	select OF_IRQ
84	select PCI_DOMAINS_GENERIC if PCI
85	select PCI_MSI if PCI
86	select RISCV_INTC
87	select RISCV_TIMER if RISCV_SBI
88	select SPARSE_IRQ
89	select SYSCTL_EXCEPTION_TRACE
90	select THREAD_INFO_IN_TASK
91	select UACCESS_MEMCPY if !MMU
92
93config ARCH_MMAP_RND_BITS_MIN
94	default 18 if 64BIT
95	default 8
96
97# max bits determined by the following formula:
98#  VA_BITS - PAGE_SHIFT - 3
99config ARCH_MMAP_RND_BITS_MAX
100	default 24 if 64BIT # SV39 based
101	default 17
102
103# set if we run in machine mode, cleared if we run in supervisor mode
104config RISCV_M_MODE
105	bool
106	default !MMU
107
108# set if we are running in S-mode and can use SBI calls
109config RISCV_SBI
110	bool
111	depends on !RISCV_M_MODE
112	default y
113
114config MMU
115	bool "MMU-based Paged Memory Management Support"
116	default y
117	help
118	  Select if you want MMU-based virtualised addressing space
119	  support by paged memory management. If unsure, say 'Y'.
120
121config ZONE_DMA32
122	bool
123	default y if 64BIT
124
125config VA_BITS
126	int
127	default 32 if 32BIT
128	default 39 if 64BIT
129
130config PA_BITS
131	int
132	default 34 if 32BIT
133	default 56 if 64BIT
134
135config PAGE_OFFSET
136	hex
137	default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB
138	default 0x80000000 if 64BIT && !MMU
139	default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
140	default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
141
142config KASAN_SHADOW_OFFSET
143	hex
144	depends on KASAN_GENERIC
145	default 0xdfffffc800000000 if 64BIT
146	default 0xffffffff if 32BIT
147
148config ARCH_FLATMEM_ENABLE
149	def_bool y
150
151config ARCH_SPARSEMEM_ENABLE
152	def_bool y
153	depends on MMU
154	select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
155	select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
156
157config ARCH_SELECT_MEMORY_MODEL
158	def_bool ARCH_SPARSEMEM_ENABLE
159
160config ARCH_WANT_GENERAL_HUGETLB
161	def_bool y
162
163config ARCH_SUPPORTS_DEBUG_PAGEALLOC
164	def_bool y
165
166config SYS_SUPPORTS_HUGETLBFS
167	depends on MMU
168	def_bool y
169
170config STACKTRACE_SUPPORT
171	def_bool y
172
173config TRACE_IRQFLAGS_SUPPORT
174	def_bool y
175
176config GENERIC_BUG
177	def_bool y
178	depends on BUG
179	select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
180
181config GENERIC_BUG_RELATIVE_POINTERS
182	bool
183
184config GENERIC_CALIBRATE_DELAY
185	def_bool y
186
187config GENERIC_CSUM
188	def_bool y
189
190config GENERIC_HWEIGHT
191	def_bool y
192
193config FIX_EARLYCON_MEM
194	def_bool MMU
195
196config PGTABLE_LEVELS
197	int
198	default 3 if 64BIT
199	default 2
200
201config LOCKDEP_SUPPORT
202	def_bool y
203
204source "arch/riscv/Kconfig.socs"
205
206menu "Platform type"
207
208choice
209	prompt "Base ISA"
210	default ARCH_RV64I
211	help
212	  This selects the base ISA that this kernel will target and must match
213	  the target platform.
214
215config ARCH_RV32I
216	bool "RV32I"
217	select 32BIT
218	select GENERIC_LIB_ASHLDI3
219	select GENERIC_LIB_ASHRDI3
220	select GENERIC_LIB_LSHRDI3
221	select GENERIC_LIB_UCMPDI2
222	select MMU
223
224config ARCH_RV64I
225	bool "RV64I"
226	select 64BIT
227	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && GCC_VERSION >= 50000
228	select HAVE_DYNAMIC_FTRACE if MMU
229	select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
230	select HAVE_FTRACE_MCOUNT_RECORD
231	select HAVE_FUNCTION_GRAPH_TRACER
232	select HAVE_FUNCTION_TRACER
233	select SWIOTLB if MMU
234
235endchoice
236
237# We must be able to map all physical memory into the kernel, but the compiler
238# is still a bit more efficient when generating code if it's setup in a manner
239# such that it can only map 2GiB of memory.
240choice
241	prompt "Kernel Code Model"
242	default CMODEL_MEDLOW if 32BIT
243	default CMODEL_MEDANY if 64BIT
244
245	config CMODEL_MEDLOW
246		bool "medium low code model"
247	config CMODEL_MEDANY
248		bool "medium any code model"
249endchoice
250
251config MODULE_SECTIONS
252	bool
253	select HAVE_MOD_ARCH_SPECIFIC
254
255choice
256	prompt "Maximum Physical Memory"
257	default MAXPHYSMEM_1GB if 32BIT
258	default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
259	default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
260
261	config MAXPHYSMEM_1GB
262		depends on 32BIT
263		bool "1GiB"
264	config MAXPHYSMEM_2GB
265		depends on 64BIT && CMODEL_MEDLOW
266		bool "2GiB"
267	config MAXPHYSMEM_128GB
268		depends on 64BIT && CMODEL_MEDANY
269		bool "128GiB"
270endchoice
271
272
273config SMP
274	bool "Symmetric Multi-Processing"
275	help
276	  This enables support for systems with more than one CPU.  If
277	  you say N here, the kernel will run on single and
278	  multiprocessor machines, but will use only one CPU of a
279	  multiprocessor machine. If you say Y here, the kernel will run
280	  on many, but not all, single processor machines. On a single
281	  processor machine, the kernel will run faster if you say N
282	  here.
283
284	  If you don't know what to do here, say N.
285
286config NR_CPUS
287	int "Maximum number of CPUs (2-32)"
288	range 2 32
289	depends on SMP
290	default "8"
291
292config HOTPLUG_CPU
293	bool "Support for hot-pluggable CPUs"
294	depends on SMP
295	select GENERIC_IRQ_MIGRATION
296	help
297
298	  Say Y here to experiment with turning CPUs off and on.  CPUs
299	  can be controlled through /sys/devices/system/cpu.
300
301	  Say N if you want to disable CPU hotplug.
302
303choice
304	prompt "CPU Tuning"
305	default TUNE_GENERIC
306
307config TUNE_GENERIC
308	bool "generic"
309
310endchoice
311
312config RISCV_ISA_C
313	bool "Emit compressed instructions when building Linux"
314	default y
315	help
316	   Adds "C" to the ISA subsets that the toolchain is allowed to emit
317	   when building Linux, which results in compressed instructions in the
318	   Linux binary.
319
320	   If you don't know what to do here, say Y.
321
322menu "supported PMU type"
323	depends on PERF_EVENTS
324
325config RISCV_BASE_PMU
326	bool "Base Performance Monitoring Unit"
327	def_bool y
328	help
329	  A base PMU that serves as a reference implementation and has limited
330	  feature of perf.  It can run on any RISC-V machines so serves as the
331	  fallback, but this option can also be disable to reduce kernel size.
332
333endmenu
334
335config TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
336	def_bool y
337	# https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc
338	depends on AS_IS_GNU && AS_VERSION >= 23800
339	help
340	  Newer binutils versions default to ISA spec version 20191213 which
341	  moves some instructions from the I extension to the Zicsr and Zifencei
342	  extensions.
343
344config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
345	def_bool y
346	depends on TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
347	# https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
348	depends on CC_IS_CLANG && CLANG_VERSION < 170000
349	help
350	  Certain versions of clang do not support zicsr and zifencei via -march
351	  but newer versions of binutils require it for the reasons noted in the
352	  help text of CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI. This
353	  option causes an older ISA spec compatible with these older versions
354	  of clang to be passed to GAS, which has the same result as passing zicsr
355	  and zifencei to -march.
356
357config FPU
358	bool "FPU support"
359	default y
360	help
361	  Say N here if you want to disable all floating-point related procedure
362	  in the kernel.
363
364	  If you don't know what to do here, say Y.
365
366endmenu
367
368menu "Kernel features"
369
370source "kernel/Kconfig.hz"
371
372config RISCV_SBI_V01
373	bool "SBI v0.1 support"
374	default y
375	depends on RISCV_SBI
376	help
377	  This config allows kernel to use SBI v0.1 APIs. This will be
378	  deprecated in future once legacy M-mode software are no longer in use.
379endmenu
380
381menu "Boot options"
382
383config CMDLINE
384	string "Built-in kernel command line"
385	help
386	  For most platforms, the arguments for the kernel's command line
387	  are provided at run-time, during boot. However, there are cases
388	  where either no arguments are being provided or the provided
389	  arguments are insufficient or even invalid.
390
391	  When that occurs, it is possible to define a built-in command
392	  line here and choose how the kernel should use it later on.
393
394choice
395	prompt "Built-in command line usage" if CMDLINE != ""
396	default CMDLINE_FALLBACK
397	help
398	  Choose how the kernel will handle the provided built-in command
399	  line.
400
401config CMDLINE_FALLBACK
402	bool "Use bootloader kernel arguments if available"
403	help
404	  Use the built-in command line as fallback in case we get nothing
405	  during boot. This is the default behaviour.
406
407config CMDLINE_EXTEND
408	bool "Extend bootloader kernel arguments"
409	help
410	  The command-line arguments provided during boot will be
411	  appended to the built-in command line. This is useful in
412	  cases where the provided arguments are insufficient and
413	  you don't want to or cannot modify them.
414
415
416config CMDLINE_FORCE
417	bool "Always use the default kernel command string"
418	help
419	  Always use the built-in command line, even if we get one during
420	  boot. This is useful in case you need to override the provided
421	  command line on systems where you don't have or want control
422	  over it.
423
424endchoice
425
426config EFI_STUB
427	bool
428
429config EFI
430	bool "UEFI runtime support"
431	depends on OF
432	select LIBFDT
433	select UCS2_STRING
434	select EFI_PARAMS_FROM_FDT
435	select EFI_STUB
436	select EFI_GENERIC_STUB
437	select EFI_RUNTIME_WRAPPERS
438	select RISCV_ISA_C
439	depends on MMU
440	default y
441	help
442	  This option provides support for runtime services provided
443	  by UEFI firmware (such as non-volatile variables, realtime
444	  clock, and platform reset). A UEFI stub is also provided to
445	  allow the kernel to be booted as an EFI application. This
446	  is only useful on systems that have UEFI firmware.
447
448endmenu
449
450config BUILTIN_DTB
451	def_bool n
452	depends on RISCV_M_MODE
453	depends on OF
454
455menu "Power management options"
456
457source "kernel/power/Kconfig"
458
459endmenu
460
461source "drivers/firmware/Kconfig"
462