xref: /openbmc/linux/arch/riscv/Kconfig (revision 2ef5a7f1)
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
30	select GENERIC_STRNLEN_USER
31	select GENERIC_SMP_IDLE_THREAD
32	select GENERIC_ATOMIC64 if !64BIT
33	select HAVE_ARCH_AUDITSYSCALL
34	select HAVE_MEMBLOCK_NODE_MAP
35	select HAVE_DMA_CONTIGUOUS
36	select HAVE_FUTEX_CMPXCHG if FUTEX
37	select HAVE_PERF_EVENTS
38	select HAVE_SYSCALL_TRACEPOINTS
39	select IRQ_DOMAIN
40	select SPARSE_IRQ
41	select SYSCTL_EXCEPTION_TRACE
42	select HAVE_ARCH_TRACEHOOK
43	select HAVE_PCI
44	select MODULES_USE_ELF_RELA if MODULES
45	select MODULE_SECTIONS if MODULES
46	select THREAD_INFO_IN_TASK
47	select PCI_DOMAINS_GENERIC if PCI
48	select PCI_MSI if PCI
49	select RISCV_TIMER
50	select GENERIC_IRQ_MULTI_HANDLER
51	select ARCH_HAS_PTE_SPECIAL
52	select ARCH_HAS_MMIOWB
53	select HAVE_EBPF_JIT if 64BIT
54	select EDAC_SUPPORT
55	select ARCH_HAS_GIGANTIC_PAGE
56	select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
57
58config MMU
59	def_bool y
60
61config ZONE_DMA32
62	bool
63	default y if 64BIT
64
65config PAGE_OFFSET
66	hex
67	default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB
68	default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
69	default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
70
71config ARCH_WANT_GENERAL_HUGETLB
72	def_bool y
73
74config SYS_SUPPORTS_HUGETLBFS
75	def_bool y
76
77config STACKTRACE_SUPPORT
78	def_bool y
79
80config TRACE_IRQFLAGS_SUPPORT
81	def_bool y
82
83config GENERIC_BUG
84	def_bool y
85	depends on BUG
86	select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
87
88config GENERIC_BUG_RELATIVE_POINTERS
89	bool
90
91config GENERIC_CALIBRATE_DELAY
92	def_bool y
93
94config GENERIC_CSUM
95	def_bool y
96
97config GENERIC_HWEIGHT
98	def_bool y
99
100config FIX_EARLYCON_MEM
101	def_bool y
102
103config PGTABLE_LEVELS
104	int
105	default 3 if 64BIT
106	default 2
107
108source "arch/riscv/Kconfig.socs"
109
110menu "Platform type"
111
112choice
113	prompt "Base ISA"
114	default ARCH_RV64I
115	help
116	  This selects the base ISA that this kernel will target and must match
117	  the target platform.
118
119config ARCH_RV32I
120	bool "RV32I"
121	select 32BIT
122	select GENERIC_LIB_ASHLDI3
123	select GENERIC_LIB_ASHRDI3
124	select GENERIC_LIB_LSHRDI3
125	select GENERIC_LIB_UCMPDI2
126
127config ARCH_RV64I
128	bool "RV64I"
129	select 64BIT
130	select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000
131	select HAVE_FUNCTION_TRACER
132	select HAVE_FUNCTION_GRAPH_TRACER
133	select HAVE_FTRACE_MCOUNT_RECORD
134	select HAVE_DYNAMIC_FTRACE
135	select HAVE_DYNAMIC_FTRACE_WITH_REGS
136	select SWIOTLB
137
138endchoice
139
140# We must be able to map all physical memory into the kernel, but the compiler
141# is still a bit more efficient when generating code if it's setup in a manner
142# such that it can only map 2GiB of memory.
143choice
144	prompt "Kernel Code Model"
145	default CMODEL_MEDLOW if 32BIT
146	default CMODEL_MEDANY if 64BIT
147
148	config CMODEL_MEDLOW
149		bool "medium low code model"
150	config CMODEL_MEDANY
151		bool "medium any code model"
152endchoice
153
154config MODULE_SECTIONS
155	bool
156	select HAVE_MOD_ARCH_SPECIFIC
157
158choice
159	prompt "Maximum Physical Memory"
160	default MAXPHYSMEM_2GB if 32BIT
161	default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
162	default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
163
164	config MAXPHYSMEM_2GB
165		bool "2GiB"
166	config MAXPHYSMEM_128GB
167		depends on 64BIT && CMODEL_MEDANY
168		bool "128GiB"
169endchoice
170
171
172config SMP
173	bool "Symmetric Multi-Processing"
174	help
175	  This enables support for systems with more than one CPU.  If
176	  you say N here, the kernel will run on single and
177	  multiprocessor machines, but will use only one CPU of a
178	  multiprocessor machine. If you say Y here, the kernel will run
179	  on many, but not all, single processor machines. On a single
180	  processor machine, the kernel will run faster if you say N
181	  here.
182
183	  If you don't know what to do here, say N.
184
185config NR_CPUS
186	int "Maximum number of CPUs (2-32)"
187	range 2 32
188	depends on SMP
189	default "8"
190
191choice
192	prompt "CPU Tuning"
193	default TUNE_GENERIC
194
195config TUNE_GENERIC
196	bool "generic"
197
198endchoice
199
200config RISCV_ISA_C
201	bool "Emit compressed instructions when building Linux"
202	default y
203	help
204	   Adds "C" to the ISA subsets that the toolchain is allowed to emit
205	   when building Linux, which results in compressed instructions in the
206	   Linux binary.
207
208	   If you don't know what to do here, say Y.
209
210menu "supported PMU type"
211	depends on PERF_EVENTS
212
213config RISCV_BASE_PMU
214	bool "Base Performance Monitoring Unit"
215	def_bool y
216	help
217	  A base PMU that serves as a reference implementation and has limited
218	  feature of perf.  It can run on any RISC-V machines so serves as the
219	  fallback, but this option can also be disable to reduce kernel size.
220
221endmenu
222
223config FPU
224	bool "FPU support"
225	default y
226	help
227	  Say N here if you want to disable all floating-point related procedure
228	  in the kernel.
229
230	  If you don't know what to do here, say Y.
231
232endmenu
233
234menu "Kernel features"
235
236source "kernel/Kconfig.hz"
237
238endmenu
239
240menu "Boot options"
241
242config CMDLINE
243	string "Built-in kernel command line"
244	help
245	  For most platforms, the arguments for the kernel's command line
246	  are provided at run-time, during boot. However, there are cases
247	  where either no arguments are being provided or the provided
248	  arguments are insufficient or even invalid.
249
250	  When that occurs, it is possible to define a built-in command
251	  line here and choose how the kernel should use it later on.
252
253choice
254	prompt "Built-in command line usage" if CMDLINE != ""
255	default CMDLINE_FALLBACK
256	help
257	  Choose how the kernel will handle the provided built-in command
258	  line.
259
260config CMDLINE_FALLBACK
261	bool "Use bootloader kernel arguments if available"
262	help
263	  Use the built-in command line as fallback in case we get nothing
264	  during boot. This is the default behaviour.
265
266config CMDLINE_EXTEND
267	bool "Extend bootloader kernel arguments"
268	help
269	  The command-line arguments provided during boot will be
270	  appended to the built-in command line. This is useful in
271	  cases where the provided arguments are insufficient and
272	  you don't want to or cannot modify them.
273
274
275config CMDLINE_FORCE
276	bool "Always use the default kernel command string"
277	help
278	  Always use the built-in command line, even if we get one during
279	  boot. This is useful in case you need to override the provided
280	  command line on systems where you don't have or want control
281	  over it.
282
283endchoice
284
285endmenu
286
287menu "Power management options"
288
289source "kernel/power/Kconfig"
290
291endmenu
292