0804b9a11934dfd4ba28922c88ef94cc416c3cc2
[sfrench/cifs-2.6.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_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
17         select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
18         select ARCH_HAS_BINFMT_FLAT
19         select ARCH_HAS_DEBUG_VM_PGTABLE
20         select ARCH_HAS_DEBUG_VIRTUAL if MMU
21         select ARCH_HAS_DEBUG_WX
22         select ARCH_HAS_FORTIFY_SOURCE
23         select ARCH_HAS_GCOV_PROFILE_ALL
24         select ARCH_HAS_GIGANTIC_PAGE
25         select ARCH_HAS_KCOV
26         select ARCH_HAS_MMIOWB
27         select ARCH_HAS_PTE_SPECIAL
28         select ARCH_HAS_SET_DIRECT_MAP if MMU
29         select ARCH_HAS_SET_MEMORY if MMU
30         select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL
31         select ARCH_HAS_STRICT_MODULE_RWX if MMU && !XIP_KERNEL
32         select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
33         select ARCH_HAS_UBSAN_SANITIZE_ALL
34         select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
35         select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
36         select ARCH_STACKWALK
37         select ARCH_SUPPORTS_ATOMIC_RMW
38         select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU
39         select ARCH_SUPPORTS_HUGETLBFS if MMU
40         select ARCH_USE_MEMTEST
41         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
42         select ARCH_WANT_FRAME_POINTERS
43         select ARCH_WANT_GENERAL_HUGETLB
44         select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
45         select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU
46         select BUILDTIME_TABLE_SORT if MMU
47         select CLONE_BACKWARDS
48         select CLINT_TIMER if !MMU
49         select COMMON_CLK
50         select EDAC_SUPPORT
51         select GENERIC_ARCH_TOPOLOGY if SMP
52         select GENERIC_ATOMIC64 if !64BIT
53         select GENERIC_CLOCKEVENTS_BROADCAST if SMP
54         select GENERIC_EARLY_IOREMAP
55         select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
56         select GENERIC_IDLE_POLL_SETUP
57         select GENERIC_IOREMAP if MMU
58         select GENERIC_IRQ_MULTI_HANDLER
59         select GENERIC_IRQ_SHOW
60         select GENERIC_IRQ_SHOW_LEVEL
61         select GENERIC_LIB_DEVMEM_IS_ALLOWED
62         select GENERIC_PCI_IOMAP
63         select GENERIC_PTDUMP if MMU
64         select GENERIC_SCHED_CLOCK
65         select GENERIC_SMP_IDLE_THREAD
66         select GENERIC_TIME_VSYSCALL if MMU && 64BIT
67         select GENERIC_VDSO_TIME_NS if HAVE_GENERIC_VDSO
68         select HAVE_ARCH_AUDITSYSCALL
69         select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
70         select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
71         select HAVE_ARCH_KASAN if MMU && 64BIT
72         select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT
73         select HAVE_ARCH_KFENCE if MMU && 64BIT
74         select HAVE_ARCH_KGDB if !XIP_KERNEL
75         select HAVE_ARCH_KGDB_QXFER_PKT
76         select HAVE_ARCH_MMAP_RND_BITS if MMU
77         select HAVE_ARCH_SECCOMP_FILTER
78         select HAVE_ARCH_TRACEHOOK
79         select HAVE_ARCH_TRANSPARENT_HUGEPAGE if 64BIT && MMU
80         select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
81         select HAVE_ARCH_THREAD_STRUCT_WHITELIST
82         select HAVE_ARCH_VMAP_STACK if MMU && 64BIT
83         select HAVE_ASM_MODVERSIONS
84         select HAVE_CONTEXT_TRACKING
85         select HAVE_DEBUG_KMEMLEAK
86         select HAVE_DMA_CONTIGUOUS if MMU
87         select HAVE_EBPF_JIT if MMU
88         select HAVE_FUNCTION_ERROR_INJECTION
89         select HAVE_GCC_PLUGINS
90         select HAVE_GENERIC_VDSO if MMU && 64BIT
91         select HAVE_IRQ_TIME_ACCOUNTING
92         select HAVE_KPROBES if !XIP_KERNEL
93         select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL
94         select HAVE_KRETPROBES if !XIP_KERNEL
95         select HAVE_MOVE_PMD
96         select HAVE_MOVE_PUD
97         select HAVE_PCI
98         select HAVE_PERF_EVENTS
99         select HAVE_PERF_REGS
100         select HAVE_PERF_USER_STACK_DUMP
101         select HAVE_REGS_AND_STACK_ACCESS_API
102         select HAVE_FUNCTION_ARG_ACCESS_API
103         select HAVE_STACKPROTECTOR
104         select HAVE_SYSCALL_TRACEPOINTS
105         select IRQ_DOMAIN
106         select IRQ_FORCED_THREADING
107         select MODULES_USE_ELF_RELA if MODULES
108         select MODULE_SECTIONS if MODULES
109         select OF
110         select OF_EARLY_FLATTREE
111         select OF_IRQ
112         select PCI_DOMAINS_GENERIC if PCI
113         select PCI_MSI if PCI
114         select RISCV_INTC
115         select RISCV_TIMER if RISCV_SBI
116         select SPARSE_IRQ
117         select SYSCTL_EXCEPTION_TRACE
118         select THREAD_INFO_IN_TASK
119         select TRACE_IRQFLAGS_SUPPORT
120         select UACCESS_MEMCPY if !MMU
121         select ZONE_DMA32 if 64BIT
122
123 config ARCH_MMAP_RND_BITS_MIN
124         default 18 if 64BIT
125         default 8
126
127 # max bits determined by the following formula:
128 #  VA_BITS - PAGE_SHIFT - 3
129 config ARCH_MMAP_RND_BITS_MAX
130         default 24 if 64BIT # SV39 based
131         default 17
132
133 # set if we run in machine mode, cleared if we run in supervisor mode
134 config RISCV_M_MODE
135         bool
136         default !MMU
137
138 # set if we are running in S-mode and can use SBI calls
139 config RISCV_SBI
140         bool
141         depends on !RISCV_M_MODE
142         default y
143
144 config MMU
145         bool "MMU-based Paged Memory Management Support"
146         default y
147         help
148           Select if you want MMU-based virtualised addressing space
149           support by paged memory management. If unsure, say 'Y'.
150
151 config PAGE_OFFSET
152         hex
153         default 0xC0000000 if 32BIT
154         default 0x80000000 if 64BIT && !MMU
155         default 0xffffaf8000000000 if 64BIT
156
157 config KASAN_SHADOW_OFFSET
158         hex
159         depends on KASAN_GENERIC
160         default 0xdfffffff00000000 if 64BIT
161         default 0xffffffff if 32BIT
162
163 config ARCH_FLATMEM_ENABLE
164         def_bool !NUMA
165
166 config ARCH_SPARSEMEM_ENABLE
167         def_bool y
168         depends on MMU
169         select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
170         select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
171
172 config ARCH_SELECT_MEMORY_MODEL
173         def_bool ARCH_SPARSEMEM_ENABLE
174
175 config ARCH_SUPPORTS_UPROBES
176         def_bool y
177
178 config STACKTRACE_SUPPORT
179         def_bool y
180
181 config GENERIC_BUG
182         def_bool y
183         depends on BUG
184         select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
185
186 config GENERIC_BUG_RELATIVE_POINTERS
187         bool
188
189 config GENERIC_CALIBRATE_DELAY
190         def_bool y
191
192 config GENERIC_CSUM
193         def_bool y
194
195 config GENERIC_HWEIGHT
196         def_bool y
197
198 config FIX_EARLYCON_MEM
199         def_bool MMU
200
201 config PGTABLE_LEVELS
202         int
203         default 4 if 64BIT
204         default 2
205
206 config LOCKDEP_SUPPORT
207         def_bool y
208
209 source "arch/riscv/Kconfig.socs"
210 source "arch/riscv/Kconfig.erratas"
211
212 menu "Platform type"
213
214 choice
215         prompt "Base ISA"
216         default ARCH_RV64I
217         help
218           This selects the base ISA that this kernel will target and must match
219           the target platform.
220
221 config ARCH_RV32I
222         bool "RV32I"
223         select 32BIT
224         select GENERIC_LIB_ASHLDI3
225         select GENERIC_LIB_ASHRDI3
226         select GENERIC_LIB_LSHRDI3
227         select GENERIC_LIB_UCMPDI2
228         select MMU
229
230 config ARCH_RV64I
231         bool "RV64I"
232         select 64BIT
233         select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
234         select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
235         select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
236         select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
237         select HAVE_FUNCTION_GRAPH_TRACER
238         select HAVE_FUNCTION_TRACER if !XIP_KERNEL
239         select SWIOTLB if MMU
240
241 endchoice
242
243 # We must be able to map all physical memory into the kernel, but the compiler
244 # is still a bit more efficient when generating code if it's setup in a manner
245 # such that it can only map 2GiB of memory.
246 choice
247         prompt "Kernel Code Model"
248         default CMODEL_MEDLOW if 32BIT
249         default CMODEL_MEDANY if 64BIT
250
251         config CMODEL_MEDLOW
252                 bool "medium low code model"
253         config CMODEL_MEDANY
254                 bool "medium any code model"
255 endchoice
256
257 config MODULE_SECTIONS
258         bool
259         select HAVE_MOD_ARCH_SPECIFIC
260
261 config SMP
262         bool "Symmetric Multi-Processing"
263         help
264           This enables support for systems with more than one CPU.  If
265           you say N here, the kernel will run on single and
266           multiprocessor machines, but will use only one CPU of a
267           multiprocessor machine. If you say Y here, the kernel will run
268           on many, but not all, single processor machines. On a single
269           processor machine, the kernel will run faster if you say N
270           here.
271
272           If you don't know what to do here, say N.
273
274 config NR_CPUS
275         int "Maximum number of CPUs (2-32)"
276         range 2 32
277         depends on SMP
278         default "8"
279
280 config HOTPLUG_CPU
281         bool "Support for hot-pluggable CPUs"
282         depends on SMP
283         select GENERIC_IRQ_MIGRATION
284         help
285
286           Say Y here to experiment with turning CPUs off and on.  CPUs
287           can be controlled through /sys/devices/system/cpu.
288
289           Say N if you want to disable CPU hotplug.
290
291 choice
292         prompt "CPU Tuning"
293         default TUNE_GENERIC
294
295 config TUNE_GENERIC
296         bool "generic"
297
298 endchoice
299
300 # Common NUMA Features
301 config NUMA
302         bool "NUMA Memory Allocation and Scheduler Support"
303         depends on SMP && MMU
304         select GENERIC_ARCH_NUMA
305         select OF_NUMA
306         select ARCH_SUPPORTS_NUMA_BALANCING
307         select USE_PERCPU_NUMA_NODE_ID
308         select NEED_PER_CPU_EMBED_FIRST_CHUNK
309         help
310           Enable NUMA (Non-Uniform Memory Access) support.
311
312           The kernel will try to allocate memory used by a CPU on the
313           local memory of the CPU and add some more NUMA awareness to the kernel.
314
315 config NODES_SHIFT
316         int "Maximum NUMA Nodes (as a power of 2)"
317         range 1 10
318         default "2"
319         depends on NUMA
320         help
321           Specify the maximum number of NUMA Nodes available on the target
322           system.  Increases memory reserved to accommodate various tables.
323
324 config RISCV_ISA_C
325         bool "Emit compressed instructions when building Linux"
326         default y
327         help
328            Adds "C" to the ISA subsets that the toolchain is allowed to emit
329            when building Linux, which results in compressed instructions in the
330            Linux binary.
331
332            If you don't know what to do here, say Y.
333
334 menu "supported PMU type"
335         depends on PERF_EVENTS
336
337 config RISCV_BASE_PMU
338         bool "Base Performance Monitoring Unit"
339         def_bool y
340         help
341           A base PMU that serves as a reference implementation and has limited
342           feature of perf.  It can run on any RISC-V machines so serves as the
343           fallback, but this option can also be disable to reduce kernel size.
344
345 endmenu
346
347 config FPU
348         bool "FPU support"
349         default y
350         help
351           Say N here if you want to disable all floating-point related procedure
352           in the kernel.
353
354           If you don't know what to do here, say Y.
355
356 endmenu
357
358 menu "Kernel features"
359
360 source "kernel/Kconfig.hz"
361
362 config RISCV_SBI_V01
363         bool "SBI v0.1 support"
364         depends on RISCV_SBI
365         help
366           This config allows kernel to use SBI v0.1 APIs. This will be
367           deprecated in future once legacy M-mode software are no longer in use.
368
369 config RISCV_BOOT_SPINWAIT
370         bool "Spinwait booting method"
371         depends on SMP
372         default y
373         help
374           This enables support for booting Linux via spinwait method. In the
375           spinwait method, all cores randomly jump to Linux. One of the cores
376           gets chosen via lottery and all other keep spinning on a percpu
377           variable. This method cannot support CPU hotplug and sparse hartid
378           scheme. It should be only enabled for M-mode Linux or platforms relying
379           on older firmware without SBI HSM extension. All other platforms should
380           rely on ordered booting via SBI HSM extension which gets chosen
381           dynamically at runtime if the firmware supports it.
382
383 config KEXEC
384         bool "Kexec system call"
385         select KEXEC_CORE
386         select HOTPLUG_CPU if SMP
387         depends on MMU
388         help
389           kexec is a system call that implements the ability to shutdown your
390           current kernel, and to start another kernel. It is like a reboot
391           but it is independent of the system firmware. And like a reboot
392           you can start any kernel with it, not just Linux.
393
394           The name comes from the similarity to the exec system call.
395
396 config CRASH_DUMP
397         bool "Build kdump crash kernel"
398         help
399           Generate crash dump after being started by kexec. This should
400           be normally only set in special crash dump kernels which are
401           loaded in the main kernel with kexec-tools into a specially
402           reserved region and then later executed after a crash by
403           kdump/kexec.
404
405           For more details see Documentation/admin-guide/kdump/kdump.rst
406
407 endmenu
408
409 menu "Boot options"
410
411 config CMDLINE
412         string "Built-in kernel command line"
413         help
414           For most platforms, the arguments for the kernel's command line
415           are provided at run-time, during boot. However, there are cases
416           where either no arguments are being provided or the provided
417           arguments are insufficient or even invalid.
418
419           When that occurs, it is possible to define a built-in command
420           line here and choose how the kernel should use it later on.
421
422 choice
423         prompt "Built-in command line usage" if CMDLINE != ""
424         default CMDLINE_FALLBACK
425         help
426           Choose how the kernel will handle the provided built-in command
427           line.
428
429 config CMDLINE_FALLBACK
430         bool "Use bootloader kernel arguments if available"
431         help
432           Use the built-in command line as fallback in case we get nothing
433           during boot. This is the default behaviour.
434
435 config CMDLINE_EXTEND
436         bool "Extend bootloader kernel arguments"
437         help
438           The command-line arguments provided during boot will be
439           appended to the built-in command line. This is useful in
440           cases where the provided arguments are insufficient and
441           you don't want to or cannot modify them.
442
443
444 config CMDLINE_FORCE
445         bool "Always use the default kernel command string"
446         help
447           Always use the built-in command line, even if we get one during
448           boot. This is useful in case you need to override the provided
449           command line on systems where you don't have or want control
450           over it.
451
452 endchoice
453
454 config EFI_STUB
455         bool
456
457 config EFI
458         bool "UEFI runtime support"
459         depends on OF && !XIP_KERNEL
460         select LIBFDT
461         select UCS2_STRING
462         select EFI_PARAMS_FROM_FDT
463         select EFI_STUB
464         select EFI_GENERIC_STUB
465         select EFI_RUNTIME_WRAPPERS
466         select RISCV_ISA_C
467         depends on MMU
468         default y
469         help
470           This option provides support for runtime services provided
471           by UEFI firmware (such as non-volatile variables, realtime
472           clock, and platform reset). A UEFI stub is also provided to
473           allow the kernel to be booted as an EFI application. This
474           is only useful on systems that have UEFI firmware.
475
476 config CC_HAVE_STACKPROTECTOR_TLS
477         def_bool $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=0)
478
479 config STACKPROTECTOR_PER_TASK
480         def_bool y
481         depends on !GCC_PLUGIN_RANDSTRUCT
482         depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
483
484 config PHYS_RAM_BASE_FIXED
485         bool "Explicitly specified physical RAM address"
486         default n
487
488 config PHYS_RAM_BASE
489         hex "Platform Physical RAM address"
490         depends on PHYS_RAM_BASE_FIXED
491         default "0x80000000"
492         help
493           This is the physical address of RAM in the system. It has to be
494           explicitly specified to run early relocations of read-write data
495           from flash to RAM.
496
497 config XIP_KERNEL
498         bool "Kernel Execute-In-Place from ROM"
499         depends on MMU && SPARSEMEM
500         # This prevents XIP from being enabled by all{yes,mod}config, which
501         # fail to build since XIP doesn't support large kernels.
502         depends on !COMPILE_TEST
503         select PHYS_RAM_BASE_FIXED
504         help
505           Execute-In-Place allows the kernel to run from non-volatile storage
506           directly addressable by the CPU, such as NOR flash. This saves RAM
507           space since the text section of the kernel is not loaded from flash
508           to RAM.  Read-write sections, such as the data section and stack,
509           are still copied to RAM.  The XIP kernel is not compressed since
510           it has to run directly from flash, so it will take more space to
511           store it.  The flash address used to link the kernel object files,
512           and for storing it, is configuration dependent. Therefore, if you
513           say Y here, you must know the proper physical address where to
514           store the kernel image depending on your own flash memory usage.
515
516           Also note that the make target becomes "make xipImage" rather than
517           "make zImage" or "make Image".  The final kernel binary to put in
518           ROM memory will be arch/riscv/boot/xipImage.
519
520           SPARSEMEM is required because the kernel text and rodata that are
521           flash resident are not backed by memmap, then any attempt to get
522           a struct page on those regions will trigger a fault.
523
524           If unsure, say N.
525
526 config XIP_PHYS_ADDR
527         hex "XIP Kernel Physical Location"
528         depends on XIP_KERNEL
529         default "0x21000000"
530         help
531           This is the physical address in your flash memory the kernel will
532           be linked for and stored to.  This address is dependent on your
533           own flash usage.
534
535 endmenu
536
537 config BUILTIN_DTB
538         bool
539         depends on OF
540         default y if XIP_KERNEL
541
542 menu "Power management options"
543
544 source "kernel/power/Kconfig"
545
546 endmenu
547
548 source "arch/riscv/kvm/Kconfig"