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