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