Merge patch series "riscv: 64-bit NOMMU fixes and enhancements"
[linux-2.6-block.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 ACPI_GENERIC_GSI if ACPI
16         select ACPI_REDUCED_HARDWARE_ONLY if ACPI
17         select ARCH_DMA_DEFAULT_COHERENT
18         select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
19         select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
20         select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
21         select ARCH_HAS_BINFMT_FLAT
22         select ARCH_HAS_CURRENT_STACK_POINTER
23         select ARCH_HAS_DEBUG_VIRTUAL if MMU
24         select ARCH_HAS_DEBUG_VM_PGTABLE
25         select ARCH_HAS_DEBUG_WX
26         select ARCH_HAS_FORTIFY_SOURCE
27         select ARCH_HAS_GCOV_PROFILE_ALL
28         select ARCH_HAS_GIGANTIC_PAGE
29         select ARCH_HAS_KCOV
30         select ARCH_HAS_MEMBARRIER_CALLBACKS
31         select ARCH_HAS_MEMBARRIER_SYNC_CORE
32         select ARCH_HAS_MMIOWB
33         select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
34         select ARCH_HAS_PMEM_API
35         select ARCH_HAS_PREPARE_SYNC_CORE_CMD
36         select ARCH_HAS_PTE_SPECIAL
37         select ARCH_HAS_SET_DIRECT_MAP if MMU
38         select ARCH_HAS_SET_MEMORY if MMU
39         select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL
40         select ARCH_HAS_STRICT_MODULE_RWX if MMU && !XIP_KERNEL
41         select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
42         select ARCH_HAS_SYSCALL_WRAPPER
43         select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
44         select ARCH_HAS_UBSAN
45         select ARCH_HAS_VDSO_DATA
46         select ARCH_KEEP_MEMBLOCK if ACPI
47         select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
48         select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
49         select ARCH_STACKWALK
50         select ARCH_SUPPORTS_ATOMIC_RMW
51         select ARCH_SUPPORTS_CFI_CLANG
52         select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU
53         select ARCH_SUPPORTS_HUGETLBFS if MMU
54         # LLD >= 14: https://github.com/llvm/llvm-project/issues/50505
55         select ARCH_SUPPORTS_LTO_CLANG if LLD_VERSION >= 140000
56         select ARCH_SUPPORTS_LTO_CLANG_THIN if LLD_VERSION >= 140000
57         select ARCH_SUPPORTS_PAGE_TABLE_CHECK if MMU
58         select ARCH_SUPPORTS_PER_VMA_LOCK if MMU
59         select ARCH_SUPPORTS_SHADOW_CALL_STACK if HAVE_SHADOW_CALL_STACK
60         select ARCH_USE_MEMTEST
61         select ARCH_USE_QUEUED_RWLOCKS
62         select ARCH_USES_CFI_TRAPS if CFI_CLANG
63         select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH if SMP && MMU
64         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
65         select ARCH_WANT_FRAME_POINTERS
66         select ARCH_WANT_GENERAL_HUGETLB if !RISCV_ISA_SVNAPOT
67         select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
68         select ARCH_WANT_LD_ORPHAN_WARN if !XIP_KERNEL
69         select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
70         select ARCH_WANTS_NO_INSTR
71         select ARCH_WANTS_THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE
72         select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU
73         select BUILDTIME_TABLE_SORT if MMU
74         select CLINT_TIMER if RISCV_M_MODE
75         select CLONE_BACKWARDS
76         select COMMON_CLK
77         select CPU_PM if CPU_IDLE || HIBERNATION || SUSPEND
78         select EDAC_SUPPORT
79         select FRAME_POINTER if PERF_EVENTS || (FUNCTION_TRACER && !DYNAMIC_FTRACE)
80         select FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY if DYNAMIC_FTRACE
81         select GENERIC_ARCH_TOPOLOGY
82         select GENERIC_ATOMIC64 if !64BIT
83         select GENERIC_CLOCKEVENTS_BROADCAST if SMP
84         select GENERIC_CPU_DEVICES
85         select GENERIC_EARLY_IOREMAP
86         select GENERIC_ENTRY
87         select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
88         select GENERIC_IDLE_POLL_SETUP
89         select GENERIC_IOREMAP if MMU
90         select GENERIC_IRQ_IPI if SMP
91         select GENERIC_IRQ_IPI_MUX if SMP
92         select GENERIC_IRQ_MULTI_HANDLER
93         select GENERIC_IRQ_SHOW
94         select GENERIC_IRQ_SHOW_LEVEL
95         select GENERIC_LIB_DEVMEM_IS_ALLOWED
96         select GENERIC_PCI_IOMAP
97         select GENERIC_PTDUMP if MMU
98         select GENERIC_SCHED_CLOCK
99         select GENERIC_SMP_IDLE_THREAD
100         select GENERIC_TIME_VSYSCALL if MMU && 64BIT
101         select GENERIC_VDSO_TIME_NS if HAVE_GENERIC_VDSO
102         select HARDIRQS_SW_RESEND
103         select HAS_IOPORT if MMU
104         select HAVE_ARCH_AUDITSYSCALL
105         select HAVE_ARCH_HUGE_VMALLOC if HAVE_ARCH_HUGE_VMAP
106         select HAVE_ARCH_HUGE_VMAP if MMU && 64BIT && !XIP_KERNEL
107         select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
108         select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
109         select HAVE_ARCH_KASAN if MMU && 64BIT
110         select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT
111         select HAVE_ARCH_KFENCE if MMU && 64BIT
112         select HAVE_ARCH_KGDB if !XIP_KERNEL
113         select HAVE_ARCH_KGDB_QXFER_PKT
114         select HAVE_ARCH_MMAP_RND_BITS if MMU
115         select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
116         select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
117         select HAVE_ARCH_SECCOMP_FILTER
118         select HAVE_ARCH_THREAD_STRUCT_WHITELIST
119         select HAVE_ARCH_TRACEHOOK
120         select HAVE_ARCH_TRANSPARENT_HUGEPAGE if 64BIT && MMU
121         select HAVE_ARCH_USERFAULTFD_MINOR if 64BIT && USERFAULTFD
122         select HAVE_ARCH_VMAP_STACK if MMU && 64BIT
123         select HAVE_ASM_MODVERSIONS
124         select HAVE_CONTEXT_TRACKING_USER
125         select HAVE_DEBUG_KMEMLEAK
126         select HAVE_DMA_CONTIGUOUS if MMU
127         select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && (CLANG_SUPPORTS_DYNAMIC_FTRACE || GCC_SUPPORTS_DYNAMIC_FTRACE)
128         select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
129         select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
130         select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
131         select HAVE_FUNCTION_GRAPH_TRACER
132         select HAVE_FUNCTION_GRAPH_RETVAL if HAVE_FUNCTION_GRAPH_TRACER
133         select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION
134         select HAVE_EBPF_JIT if MMU
135         select HAVE_FAST_GUP if MMU
136         select HAVE_FUNCTION_ARG_ACCESS_API
137         select HAVE_FUNCTION_ERROR_INJECTION
138         select HAVE_GCC_PLUGINS
139         select HAVE_GENERIC_VDSO if MMU && 64BIT
140         select HAVE_IRQ_TIME_ACCOUNTING
141         select HAVE_KPROBES if !XIP_KERNEL
142         select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL
143         select HAVE_KRETPROBES if !XIP_KERNEL
144         # https://github.com/ClangBuiltLinux/linux/issues/1881
145         select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if !LD_IS_LLD
146         select HAVE_MOVE_PMD
147         select HAVE_MOVE_PUD
148         select HAVE_PAGE_SIZE_4KB
149         select HAVE_PCI
150         select HAVE_PERF_EVENTS
151         select HAVE_PERF_REGS
152         select HAVE_PERF_USER_STACK_DUMP
153         select HAVE_POSIX_CPU_TIMERS_TASK_WORK
154         select HAVE_PREEMPT_DYNAMIC_KEY if !XIP_KERNEL
155         select HAVE_REGS_AND_STACK_ACCESS_API
156         select HAVE_RETHOOK if !XIP_KERNEL
157         select HAVE_RSEQ
158         select HAVE_RUST if 64BIT
159         select HAVE_SAMPLE_FTRACE_DIRECT
160         select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
161         select HAVE_STACKPROTECTOR
162         select HAVE_SYSCALL_TRACEPOINTS
163         select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
164         select IRQ_DOMAIN
165         select IRQ_FORCED_THREADING
166         select KASAN_VMALLOC if KASAN
167         select LOCK_MM_AND_FIND_VMA
168         select MMU_GATHER_RCU_TABLE_FREE if SMP && MMU
169         select MODULES_USE_ELF_RELA if MODULES
170         select MODULE_SECTIONS if MODULES
171         select OF
172         select OF_EARLY_FLATTREE
173         select OF_IRQ
174         select PCI_DOMAINS_GENERIC if PCI
175         select PCI_MSI if PCI
176         select RISCV_ALTERNATIVE if !XIP_KERNEL
177         select RISCV_INTC
178         select RISCV_TIMER if RISCV_SBI
179         select SIFIVE_PLIC
180         select SPARSE_IRQ
181         select SYSCTL_EXCEPTION_TRACE
182         select THREAD_INFO_IN_TASK
183         select TRACE_IRQFLAGS_SUPPORT
184         select UACCESS_MEMCPY if !MMU
185         select ZONE_DMA32 if 64BIT
186
187 config CLANG_SUPPORTS_DYNAMIC_FTRACE
188         def_bool CC_IS_CLANG
189         # https://github.com/ClangBuiltLinux/linux/issues/1817
190         depends on AS_IS_GNU || (AS_IS_LLVM && (LD_IS_LLD || LD_VERSION >= 23600))
191
192 config GCC_SUPPORTS_DYNAMIC_FTRACE
193         def_bool CC_IS_GCC
194         depends on $(cc-option,-fpatchable-function-entry=8)
195
196 config HAVE_SHADOW_CALL_STACK
197         def_bool $(cc-option,-fsanitize=shadow-call-stack)
198         # https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a484e843e6eeb51f0cb7b8819e50da6d2444d769
199         depends on $(ld-option,--no-relax-gp)
200
201 config RISCV_USE_LINKER_RELAXATION
202         def_bool y
203         # https://github.com/llvm/llvm-project/commit/6611d58f5bbcbec77262d392e2923e1d680f6985
204         depends on !LD_IS_LLD || LLD_VERSION >= 150000
205
206 # https://github.com/llvm/llvm-project/commit/bbc0f99f3bc96f1db16f649fc21dd18e5b0918f6
207 config ARCH_HAS_BROKEN_DWARF5
208         def_bool y
209         depends on RISCV_USE_LINKER_RELAXATION
210         # https://github.com/llvm/llvm-project/commit/1df5ea29b43690b6622db2cad7b745607ca4de6a
211         depends on AS_IS_LLVM && AS_VERSION < 180000
212         # https://github.com/llvm/llvm-project/commit/7ffabb61a5569444b5ac9322e22e5471cc5e4a77
213         depends on LD_IS_LLD && LLD_VERSION < 180000
214
215 config ARCH_MMAP_RND_BITS_MIN
216         default 18 if 64BIT
217         default 8
218
219 config ARCH_MMAP_RND_COMPAT_BITS_MIN
220         default 8
221
222 # max bits determined by the following formula:
223 #  VA_BITS - PAGE_SHIFT - 3
224 config ARCH_MMAP_RND_BITS_MAX
225         default 24 if 64BIT # SV39 based
226         default 17
227
228 config ARCH_MMAP_RND_COMPAT_BITS_MAX
229         default 17
230
231 # set if we run in machine mode, cleared if we run in supervisor mode
232 config RISCV_M_MODE
233         bool "Build a kernel that runs in machine mode"
234         depends on !MMU
235         default y
236         help
237           Select this option if you want to run the kernel in M-mode,
238           without the assistance of any other firmware.
239
240 # set if we are running in S-mode and can use SBI calls
241 config RISCV_SBI
242         bool
243         depends on !RISCV_M_MODE
244         default y
245
246 config MMU
247         bool "MMU-based Paged Memory Management Support"
248         default y
249         help
250           Select if you want MMU-based virtualised addressing space
251           support by paged memory management. If unsure, say 'Y'.
252
253 config PAGE_OFFSET
254         hex
255         default 0x80000000 if !MMU && RISCV_M_MODE
256         default 0x80200000 if !MMU
257         default 0xc0000000 if 32BIT
258         default 0xff60000000000000 if 64BIT
259
260 config KASAN_SHADOW_OFFSET
261         hex
262         depends on KASAN_GENERIC
263         default 0xdfffffff00000000 if 64BIT
264         default 0xffffffff if 32BIT
265
266 config ARCH_FLATMEM_ENABLE
267         def_bool !NUMA
268
269 config ARCH_SPARSEMEM_ENABLE
270         def_bool y
271         depends on MMU
272         select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
273         select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
274
275 config ARCH_SELECT_MEMORY_MODEL
276         def_bool ARCH_SPARSEMEM_ENABLE
277
278 config ARCH_SUPPORTS_UPROBES
279         def_bool y
280
281 config STACKTRACE_SUPPORT
282         def_bool y
283
284 config GENERIC_BUG
285         def_bool y
286         depends on BUG
287         select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
288
289 config GENERIC_BUG_RELATIVE_POINTERS
290         bool
291
292 config GENERIC_CALIBRATE_DELAY
293         def_bool y
294
295 config GENERIC_CSUM
296         def_bool y
297
298 config GENERIC_HWEIGHT
299         def_bool y
300
301 config FIX_EARLYCON_MEM
302         def_bool MMU
303
304 config PGTABLE_LEVELS
305         int
306         default 5 if 64BIT
307         default 2
308
309 config LOCKDEP_SUPPORT
310         def_bool y
311
312 config RISCV_DMA_NONCOHERENT
313         bool
314         select ARCH_HAS_DMA_PREP_COHERENT
315         select ARCH_HAS_SETUP_DMA_OPS
316         select ARCH_HAS_SYNC_DMA_FOR_CPU
317         select ARCH_HAS_SYNC_DMA_FOR_DEVICE
318         select DMA_BOUNCE_UNALIGNED_KMALLOC if SWIOTLB
319
320 config RISCV_NONSTANDARD_CACHE_OPS
321         bool
322         help
323           This enables function pointer support for non-standard noncoherent
324           systems to handle cache management.
325
326 config AS_HAS_INSN
327         def_bool $(as-instr,.insn r 51$(comma) 0$(comma) 0$(comma) t0$(comma) t0$(comma) zero)
328
329 config AS_HAS_OPTION_ARCH
330         # https://github.com/llvm/llvm-project/commit/9e8ed3403c191ab9c4903e8eeb8f732ff8a43cb4
331         def_bool y
332         depends on $(as-instr, .option arch$(comma) +m)
333
334 source "arch/riscv/Kconfig.socs"
335 source "arch/riscv/Kconfig.errata"
336
337 menu "Platform type"
338
339 config NONPORTABLE
340         bool "Allow configurations that result in non-portable kernels"
341         help
342           RISC-V kernel binaries are compatible between all known systems
343           whenever possible, but there are some use cases that can only be
344           satisfied by configurations that result in kernel binaries that are
345           not portable between systems.
346
347           Selecting N does not guarantee kernels will be portable to all known
348           systems.  Selecting any of the options guarded by NONPORTABLE will
349           result in kernel binaries that are unlikely to be portable between
350           systems.
351
352           If unsure, say N.
353
354 choice
355         prompt "Base ISA"
356         default ARCH_RV64I
357         help
358           This selects the base ISA that this kernel will target and must match
359           the target platform.
360
361 config ARCH_RV32I
362         bool "RV32I"
363         depends on NONPORTABLE
364         select 32BIT
365         select GENERIC_LIB_ASHLDI3
366         select GENERIC_LIB_ASHRDI3
367         select GENERIC_LIB_LSHRDI3
368         select GENERIC_LIB_UCMPDI2
369
370 config ARCH_RV64I
371         bool "RV64I"
372         select 64BIT
373         select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
374         select SWIOTLB if MMU
375
376 endchoice
377
378 # We must be able to map all physical memory into the kernel, but the compiler
379 # is still a bit more efficient when generating code if it's setup in a manner
380 # such that it can only map 2GiB of memory.
381 choice
382         prompt "Kernel Code Model"
383         default CMODEL_MEDLOW if 32BIT
384         default CMODEL_MEDANY if 64BIT
385
386         config CMODEL_MEDLOW
387                 bool "medium low code model"
388         config CMODEL_MEDANY
389                 bool "medium any code model"
390 endchoice
391
392 config MODULE_SECTIONS
393         bool
394         select HAVE_MOD_ARCH_SPECIFIC
395
396 config SMP
397         bool "Symmetric Multi-Processing"
398         help
399           This enables support for systems with more than one CPU.  If
400           you say N here, the kernel will run on single and
401           multiprocessor machines, but will use only one CPU of a
402           multiprocessor machine. If you say Y here, the kernel will run
403           on many, but not all, single processor machines. On a single
404           processor machine, the kernel will run faster if you say N
405           here.
406
407           If you don't know what to do here, say N.
408
409 config SCHED_MC
410         bool "Multi-core scheduler support"
411         depends on SMP
412         help
413           Multi-core scheduler support improves the CPU scheduler's decision
414           making when dealing with multi-core CPU chips at a cost of slightly
415           increased overhead in some places. If unsure say N here.
416
417 config NR_CPUS
418         int "Maximum number of CPUs (2-512)"
419         depends on SMP
420         range 2 512 if !RISCV_SBI_V01
421         range 2 32 if RISCV_SBI_V01 && 32BIT
422         range 2 64 if RISCV_SBI_V01 && 64BIT
423         default "32" if 32BIT
424         default "64" if 64BIT
425
426 config HOTPLUG_CPU
427         bool "Support for hot-pluggable CPUs"
428         depends on SMP
429         select GENERIC_IRQ_MIGRATION
430         help
431
432           Say Y here to experiment with turning CPUs off and on.  CPUs
433           can be controlled through /sys/devices/system/cpu.
434
435           Say N if you want to disable CPU hotplug.
436
437 choice
438         prompt "CPU Tuning"
439         default TUNE_GENERIC
440
441 config TUNE_GENERIC
442         bool "generic"
443
444 endchoice
445
446 # Common NUMA Features
447 config NUMA
448         bool "NUMA Memory Allocation and Scheduler Support"
449         depends on SMP && MMU
450         select ARCH_SUPPORTS_NUMA_BALANCING
451         select GENERIC_ARCH_NUMA
452         select HAVE_SETUP_PER_CPU_AREA
453         select NEED_PER_CPU_EMBED_FIRST_CHUNK
454         select NEED_PER_CPU_PAGE_FIRST_CHUNK
455         select OF_NUMA
456         select USE_PERCPU_NUMA_NODE_ID
457         help
458           Enable NUMA (Non-Uniform Memory Access) support.
459
460           The kernel will try to allocate memory used by a CPU on the
461           local memory of the CPU and add some more NUMA awareness to the kernel.
462
463 config NODES_SHIFT
464         int "Maximum NUMA Nodes (as a power of 2)"
465         range 1 10
466         default "2"
467         depends on NUMA
468         help
469           Specify the maximum number of NUMA Nodes available on the target
470           system.  Increases memory reserved to accommodate various tables.
471
472 config RISCV_ALTERNATIVE
473         bool
474         depends on !XIP_KERNEL
475         help
476           This Kconfig allows the kernel to automatically patch the
477           erratum or cpufeature required by the execution platform at run
478           time. The code patching overhead is minimal, as it's only done
479           once at boot and once on each module load.
480
481 config RISCV_ALTERNATIVE_EARLY
482         bool
483         depends on RISCV_ALTERNATIVE
484         help
485           Allows early patching of the kernel for special errata
486
487 config RISCV_ISA_C
488         bool "Emit compressed instructions when building Linux"
489         default y
490         help
491           Adds "C" to the ISA subsets that the toolchain is allowed to emit
492           when building Linux, which results in compressed instructions in the
493           Linux binary.
494
495           If you don't know what to do here, say Y.
496
497 config RISCV_ISA_SVNAPOT
498         bool "Svnapot extension support for supervisor mode NAPOT pages"
499         depends on 64BIT && MMU
500         depends on RISCV_ALTERNATIVE
501         default y
502         help
503           Allow kernel to detect the Svnapot ISA-extension dynamically at boot
504           time and enable its usage.
505
506           The Svnapot extension is used to mark contiguous PTEs as a range
507           of contiguous virtual-to-physical translations for a naturally
508           aligned power-of-2 (NAPOT) granularity larger than the base 4KB page
509           size. When HUGETLBFS is also selected this option unconditionally
510           allocates some memory for each NAPOT page size supported by the kernel.
511           When optimizing for low memory consumption and for platforms without
512           the Svnapot extension, it may be better to say N here.
513
514           If you don't know what to do here, say Y.
515
516 config RISCV_ISA_SVPBMT
517         bool "Svpbmt extension support for supervisor mode page-based memory types"
518         depends on 64BIT && MMU
519         depends on RISCV_ALTERNATIVE
520         default y
521         help
522            Adds support to dynamically detect the presence of the Svpbmt
523            ISA-extension (Supervisor-mode: page-based memory types) and
524            enable its usage.
525
526            The memory type for a page contains a combination of attributes
527            that indicate the cacheability, idempotency, and ordering
528            properties for access to that page.
529
530            The Svpbmt extension is only available on 64-bit cpus.
531
532            If you don't know what to do here, say Y.
533
534 config TOOLCHAIN_HAS_V
535         bool
536         default y
537         depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64iv)
538         depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32iv)
539         depends on LLD_VERSION >= 140000 || LD_VERSION >= 23800
540         depends on AS_HAS_OPTION_ARCH
541
542 config RISCV_ISA_V
543         bool "VECTOR extension support"
544         depends on TOOLCHAIN_HAS_V
545         depends on FPU
546         select DYNAMIC_SIGFRAME
547         default y
548         help
549           Say N here if you want to disable all vector related procedure
550           in the kernel.
551
552           If you don't know what to do here, say Y.
553
554 config RISCV_ISA_V_DEFAULT_ENABLE
555         bool "Enable userspace Vector by default"
556         depends on RISCV_ISA_V
557         default y
558         help
559           Say Y here if you want to enable Vector in userspace by default.
560           Otherwise, userspace has to make explicit prctl() call to enable
561           Vector, or enable it via the sysctl interface.
562
563           If you don't know what to do here, say Y.
564
565 config RISCV_ISA_V_UCOPY_THRESHOLD
566         int "Threshold size for vectorized user copies"
567         depends on RISCV_ISA_V
568         default 768
569         help
570           Prefer using vectorized copy_to_user()/copy_from_user() when the
571           workload size exceeds this value.
572
573 config RISCV_ISA_V_PREEMPTIVE
574         bool "Run kernel-mode Vector with kernel preemption"
575         depends on PREEMPTION
576         depends on RISCV_ISA_V
577         default y
578         help
579           Usually, in-kernel SIMD routines are run with preemption disabled.
580           Functions which envoke long running SIMD thus must yield core's
581           vector unit to prevent blocking other tasks for too long.
582
583           This config allows kernel to run SIMD without explicitly disable
584           preemption. Enabling this config will result in higher memory
585           consumption due to the allocation of per-task's kernel Vector context.
586
587 config TOOLCHAIN_HAS_ZBB
588         bool
589         default y
590         depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zbb)
591         depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbb)
592         depends on LLD_VERSION >= 150000 || LD_VERSION >= 23900
593         depends on AS_HAS_OPTION_ARCH
594
595 # This symbol indicates that the toolchain supports all v1.0 vector crypto
596 # extensions, including Zvk*, Zvbb, and Zvbc.  LLVM added all of these at once.
597 # binutils added all except Zvkb, then added Zvkb.  So we just check for Zvkb.
598 config TOOLCHAIN_HAS_VECTOR_CRYPTO
599         def_bool $(as-instr, .option arch$(comma) +v$(comma) +zvkb)
600         depends on AS_HAS_OPTION_ARCH
601
602 config RISCV_ISA_ZBB
603         bool "Zbb extension support for bit manipulation instructions"
604         depends on TOOLCHAIN_HAS_ZBB
605         depends on RISCV_ALTERNATIVE
606         default y
607         help
608            Adds support to dynamically detect the presence of the ZBB
609            extension (basic bit manipulation) and enable its usage.
610
611            The Zbb extension provides instructions to accelerate a number
612            of bit-specific operations (count bit population, sign extending,
613            bitrotation, etc).
614
615            If you don't know what to do here, say Y.
616
617 config RISCV_ISA_ZICBOM
618         bool "Zicbom extension support for non-coherent DMA operation"
619         depends on MMU
620         depends on RISCV_ALTERNATIVE
621         default y
622         select RISCV_DMA_NONCOHERENT
623         select DMA_DIRECT_REMAP
624         help
625            Adds support to dynamically detect the presence of the ZICBOM
626            extension (Cache Block Management Operations) and enable its
627            usage.
628
629            The Zicbom extension can be used to handle for example
630            non-coherent DMA support on devices that need it.
631
632            If you don't know what to do here, say Y.
633
634 config RISCV_ISA_ZICBOZ
635         bool "Zicboz extension support for faster zeroing of memory"
636         depends on RISCV_ALTERNATIVE
637         default y
638         help
639            Enable the use of the Zicboz extension (cbo.zero instruction)
640            when available.
641
642            The Zicboz extension is used for faster zeroing of memory.
643
644            If you don't know what to do here, say Y.
645
646 config TOOLCHAIN_HAS_ZIHINTPAUSE
647         bool
648         default y
649         depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zihintpause)
650         depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zihintpause)
651         depends on LLD_VERSION >= 150000 || LD_VERSION >= 23600
652
653 config TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
654         def_bool y
655         # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc
656         # https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=98416dbb0a62579d4a7a4a76bab51b5b52fec2cd
657         depends on AS_IS_GNU && AS_VERSION >= 23600
658         help
659           Binutils-2.38 and GCC-12.1.0 bumped the default ISA spec to the newer
660           20191213 version, which moves some instructions from the I extension to
661           the Zicsr and Zifencei extensions. This requires explicitly specifying
662           Zicsr and Zifencei when binutils >= 2.38 or GCC >= 12.1.0. Zicsr
663           and Zifencei are supported in binutils from version 2.36 onwards.
664           To make life easier, and avoid forcing toolchains that default to a
665           newer ISA spec to version 2.2, relax the check to binutils >= 2.36.
666           For clang < 17 or GCC < 11.3.0, for which this is not possible or need
667           special treatment, this is dealt with in TOOLCHAIN_NEEDS_OLD_ISA_SPEC.
668
669 config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
670         def_bool y
671         depends on TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
672         # https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
673         # https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=d29f5d6ab513c52fd872f532c492e35ae9fd6671
674         depends on (CC_IS_CLANG && CLANG_VERSION < 170000) || (CC_IS_GCC && GCC_VERSION < 110300)
675         help
676           Certain versions of clang and GCC do not support zicsr and zifencei via
677           -march. This option causes an older ISA spec compatible with these older
678           versions of clang and GCC to be passed to GAS, which has the same result
679           as passing zicsr and zifencei to -march.
680
681 config FPU
682         bool "FPU support"
683         default y
684         help
685           Say N here if you want to disable all floating-point related procedure
686           in the kernel.
687
688           If you don't know what to do here, say Y.
689
690 config IRQ_STACKS
691         bool "Independent irq & softirq stacks" if EXPERT
692         default y
693         select HAVE_IRQ_EXIT_ON_IRQ_STACK
694         select HAVE_SOFTIRQ_ON_OWN_STACK
695         help
696           Add independent irq & softirq stacks for percpu to prevent kernel stack
697           overflows. We may save some memory footprint by disabling IRQ_STACKS.
698
699 config THREAD_SIZE_ORDER
700         int "Kernel stack size (in power-of-two numbers of page size)" if VMAP_STACK && EXPERT
701         range 0 4
702         default 1 if 32BIT && !KASAN
703         default 3 if 64BIT && KASAN
704         default 2
705         help
706           Specify the Pages of thread stack size (from 4KB to 64KB), which also
707           affects irq stack size, which is equal to thread stack size.
708
709 config RISCV_MISALIGNED
710         bool
711         select SYSCTL_ARCH_UNALIGN_ALLOW
712         help
713           Embed support for emulating misaligned loads and stores.
714
715 choice
716         prompt "Unaligned Accesses Support"
717         default RISCV_PROBE_UNALIGNED_ACCESS
718         help
719           This determines the level of support for unaligned accesses. This
720           information is used by the kernel to perform optimizations. It is also
721           exposed to user space via the hwprobe syscall. The hardware will be
722           probed at boot by default.
723
724 config RISCV_PROBE_UNALIGNED_ACCESS
725         bool "Probe for hardware unaligned access support"
726         select RISCV_MISALIGNED
727         help
728           During boot, the kernel will run a series of tests to determine the
729           speed of unaligned accesses. This probing will dynamically determine
730           the speed of unaligned accesses on the underlying system. If unaligned
731           memory accesses trap into the kernel as they are not supported by the
732           system, the kernel will emulate the unaligned accesses to preserve the
733           UABI.
734
735 config RISCV_EMULATED_UNALIGNED_ACCESS
736         bool "Emulate unaligned access where system support is missing"
737         select RISCV_MISALIGNED
738         help
739           If unaligned memory accesses trap into the kernel as they are not
740           supported by the system, the kernel will emulate the unaligned
741           accesses to preserve the UABI. When the underlying system does support
742           unaligned accesses, the unaligned accesses are assumed to be slow.
743
744 config RISCV_SLOW_UNALIGNED_ACCESS
745         bool "Assume the system supports slow unaligned memory accesses"
746         depends on NONPORTABLE
747         help
748           Assume that the system supports slow unaligned memory accesses. The
749           kernel and userspace programs may not be able to run at all on systems
750           that do not support unaligned memory accesses.
751
752 config RISCV_EFFICIENT_UNALIGNED_ACCESS
753         bool "Assume the system supports fast unaligned memory accesses"
754         depends on NONPORTABLE
755         select DCACHE_WORD_ACCESS if MMU
756         select HAVE_EFFICIENT_UNALIGNED_ACCESS
757         help
758           Assume that the system supports fast unaligned memory accesses. When
759           enabled, this option improves the performance of the kernel on such
760           systems. However, the kernel and userspace programs will run much more
761           slowly, or will not be able to run at all, on systems that do not
762           support efficient unaligned memory accesses.
763
764 endchoice
765
766 endmenu # "Platform type"
767
768 menu "Kernel features"
769
770 source "kernel/Kconfig.hz"
771
772 config RISCV_SBI_V01
773         bool "SBI v0.1 support"
774         depends on RISCV_SBI
775         help
776           This config allows kernel to use SBI v0.1 APIs. This will be
777           deprecated in future once legacy M-mode software are no longer in use.
778
779 config RISCV_BOOT_SPINWAIT
780         bool "Spinwait booting method"
781         depends on SMP
782         default y if RISCV_SBI_V01 || RISCV_M_MODE
783         help
784           This enables support for booting Linux via spinwait method. In the
785           spinwait method, all cores randomly jump to Linux. One of the cores
786           gets chosen via lottery and all other keep spinning on a percpu
787           variable. This method cannot support CPU hotplug and sparse hartid
788           scheme. It should be only enabled for M-mode Linux or platforms relying
789           on older firmware without SBI HSM extension. All other platforms should
790           rely on ordered booting via SBI HSM extension which gets chosen
791           dynamically at runtime if the firmware supports it.
792
793           Since spinwait is incompatible with sparse hart IDs, it requires
794           NR_CPUS be large enough to contain the physical hart ID of the first
795           hart to enter Linux.
796
797           If unsure what to do here, say N.
798
799 config ARCH_SUPPORTS_KEXEC
800         def_bool y
801
802 config ARCH_SELECTS_KEXEC
803         def_bool y
804         depends on KEXEC
805         select HOTPLUG_CPU if SMP
806
807 config ARCH_SUPPORTS_KEXEC_FILE
808         def_bool 64BIT
809
810 config ARCH_SELECTS_KEXEC_FILE
811         def_bool y
812         depends on KEXEC_FILE
813         select HAVE_IMA_KEXEC if IMA
814         select KEXEC_ELF
815
816 config ARCH_SUPPORTS_KEXEC_PURGATORY
817         def_bool ARCH_SUPPORTS_KEXEC_FILE
818
819 config ARCH_SUPPORTS_CRASH_DUMP
820         def_bool y
821
822 config ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION
823         def_bool CRASH_RESERVE
824
825 config COMPAT
826         bool "Kernel support for 32-bit U-mode"
827         default 64BIT
828         depends on 64BIT && MMU
829         help
830           This option enables support for a 32-bit U-mode running under a 64-bit
831           kernel at S-mode. riscv32-specific components such as system calls,
832           the user helper functions (vdso), signal rt_frame functions and the
833           ptrace interface are handled appropriately by the kernel.
834
835           If you want to execute 32-bit userspace applications, say Y.
836
837 config PARAVIRT
838         bool "Enable paravirtualization code"
839         depends on RISCV_SBI
840         help
841           This changes the kernel so it can modify itself when it is run
842           under a hypervisor, potentially improving performance significantly
843           over full virtualization.
844
845 config PARAVIRT_TIME_ACCOUNTING
846         bool "Paravirtual steal time accounting"
847         depends on PARAVIRT
848         help
849           Select this option to enable fine granularity task steal time
850           accounting. Time spent executing other tasks in parallel with
851           the current vCPU is discounted from the vCPU power. To account for
852           that, there can be a small performance impact.
853
854           If in doubt, say N here.
855
856 config RELOCATABLE
857         bool "Build a relocatable kernel"
858         depends on MMU && 64BIT && !XIP_KERNEL
859         help
860           This builds a kernel as a Position Independent Executable (PIE),
861           which retains all relocation metadata required to relocate the
862           kernel binary at runtime to a different virtual address than the
863           address it was linked at.
864           Since RISCV uses the RELA relocation format, this requires a
865           relocation pass at runtime even if the kernel is loaded at the
866           same address it was linked at.
867
868           If unsure, say N.
869
870 config RANDOMIZE_BASE
871         bool "Randomize the address of the kernel image"
872         select RELOCATABLE
873         depends on MMU && 64BIT && !XIP_KERNEL
874         help
875           Randomizes the virtual address at which the kernel image is
876           loaded, as a security feature that deters exploit attempts
877           relying on knowledge of the location of kernel internals.
878
879           It is the bootloader's job to provide entropy, by passing a
880           random u64 value in /chosen/kaslr-seed at kernel entry.
881
882           When booting via the UEFI stub, it will invoke the firmware's
883           EFI_RNG_PROTOCOL implementation (if available) to supply entropy
884           to the kernel proper. In addition, it will randomise the physical
885           location of the kernel Image as well.
886
887           If unsure, say N.
888
889 endmenu # "Kernel features"
890
891 menu "Boot options"
892
893 config CMDLINE
894         string "Built-in kernel command line"
895         help
896           For most platforms, the arguments for the kernel's command line
897           are provided at run-time, during boot. However, there are cases
898           where either no arguments are being provided or the provided
899           arguments are insufficient or even invalid.
900
901           When that occurs, it is possible to define a built-in command
902           line here and choose how the kernel should use it later on.
903
904 choice
905         prompt "Built-in command line usage" if CMDLINE != ""
906         default CMDLINE_FALLBACK
907         help
908           Choose how the kernel will handle the provided built-in command
909           line.
910
911 config CMDLINE_FALLBACK
912         bool "Use bootloader kernel arguments if available"
913         help
914           Use the built-in command line as fallback in case we get nothing
915           during boot. This is the default behaviour.
916
917 config CMDLINE_EXTEND
918         bool "Extend bootloader kernel arguments"
919         help
920           The command-line arguments provided during boot will be
921           appended to the built-in command line. This is useful in
922           cases where the provided arguments are insufficient and
923           you don't want to or cannot modify them.
924
925 config CMDLINE_FORCE
926         bool "Always use the default kernel command string"
927         help
928           Always use the built-in command line, even if we get one during
929           boot. This is useful in case you need to override the provided
930           command line on systems where you don't have or want control
931           over it.
932
933 endchoice
934
935 config EFI_STUB
936         bool
937
938 config EFI
939         bool "UEFI runtime support"
940         depends on OF && !XIP_KERNEL
941         depends on MMU
942         default y
943         select ARCH_SUPPORTS_ACPI if 64BIT
944         select EFI_GENERIC_STUB
945         select EFI_PARAMS_FROM_FDT
946         select EFI_RUNTIME_WRAPPERS
947         select EFI_STUB
948         select LIBFDT
949         select RISCV_ISA_C
950         select UCS2_STRING
951         help
952           This option provides support for runtime services provided
953           by UEFI firmware (such as non-volatile variables, realtime
954           clock, and platform reset). A UEFI stub is also provided to
955           allow the kernel to be booted as an EFI application. This
956           is only useful on systems that have UEFI firmware.
957
958 config CC_HAVE_STACKPROTECTOR_TLS
959         def_bool $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=0)
960
961 config STACKPROTECTOR_PER_TASK
962         def_bool y
963         depends on !RANDSTRUCT
964         depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
965
966 config PHYS_RAM_BASE_FIXED
967         bool "Explicitly specified physical RAM address"
968         depends on NONPORTABLE
969         default n
970
971 config PHYS_RAM_BASE
972         hex "Platform Physical RAM address"
973         depends on PHYS_RAM_BASE_FIXED
974         default "0x80000000"
975         help
976           This is the physical address of RAM in the system. It has to be
977           explicitly specified to run early relocations of read-write data
978           from flash to RAM.
979
980 config XIP_KERNEL
981         bool "Kernel Execute-In-Place from ROM"
982         depends on MMU && SPARSEMEM && NONPORTABLE
983         # This prevents XIP from being enabled by all{yes,mod}config, which
984         # fail to build since XIP doesn't support large kernels.
985         depends on !COMPILE_TEST
986         select PHYS_RAM_BASE_FIXED
987         help
988           Execute-In-Place allows the kernel to run from non-volatile storage
989           directly addressable by the CPU, such as NOR flash. This saves RAM
990           space since the text section of the kernel is not loaded from flash
991           to RAM.  Read-write sections, such as the data section and stack,
992           are still copied to RAM.  The XIP kernel is not compressed since
993           it has to run directly from flash, so it will take more space to
994           store it.  The flash address used to link the kernel object files,
995           and for storing it, is configuration dependent. Therefore, if you
996           say Y here, you must know the proper physical address where to
997           store the kernel image depending on your own flash memory usage.
998
999           Also note that the make target becomes "make xipImage" rather than
1000           "make zImage" or "make Image".  The final kernel binary to put in
1001           ROM memory will be arch/riscv/boot/xipImage.
1002
1003           SPARSEMEM is required because the kernel text and rodata that are
1004           flash resident are not backed by memmap, then any attempt to get
1005           a struct page on those regions will trigger a fault.
1006
1007           If unsure, say N.
1008
1009 config XIP_PHYS_ADDR
1010         hex "XIP Kernel Physical Location"
1011         depends on XIP_KERNEL
1012         default "0x21000000"
1013         help
1014           This is the physical address in your flash memory the kernel will
1015           be linked for and stored to.  This address is dependent on your
1016           own flash usage.
1017
1018 config RISCV_ISA_FALLBACK
1019         bool "Permit falling back to parsing riscv,isa for extension support by default"
1020         default y
1021         help
1022           Parsing the "riscv,isa" devicetree property has been deprecated and
1023           replaced by a list of explicitly defined strings. For compatibility
1024           with existing platforms, the kernel will fall back to parsing the
1025           "riscv,isa" property if the replacements are not found.
1026
1027           Selecting N here will result in a kernel that does not use the
1028           fallback, unless the commandline "riscv_isa_fallback" parameter is
1029           present.
1030
1031           Please see the dt-binding, located at
1032           Documentation/devicetree/bindings/riscv/extensions.yaml for details
1033           on the replacement properties, "riscv,isa-base" and
1034           "riscv,isa-extensions".
1035
1036 config BUILTIN_DTB
1037         bool "Built-in device tree"
1038         depends on OF && NONPORTABLE
1039         help
1040           Build a device tree into the Linux image.
1041           This option should be selected if no bootloader is being used.
1042           If unsure, say N.
1043
1044
1045 config BUILTIN_DTB_SOURCE
1046         string "Built-in device tree source"
1047         depends on BUILTIN_DTB
1048         help
1049           DTS file path (without suffix, relative to arch/riscv/boot/dts)
1050           for the DTS file that will be used to produce the DTB linked into the
1051           kernel.
1052
1053 endmenu # "Boot options"
1054
1055 config PORTABLE
1056         bool
1057         default !NONPORTABLE
1058         select EFI
1059         select MMU
1060         select OF
1061
1062 config ARCH_PROC_KCORE_TEXT
1063         def_bool y
1064
1065 menu "Power management options"
1066
1067 source "kernel/power/Kconfig"
1068
1069 config ARCH_HIBERNATION_POSSIBLE
1070         def_bool y
1071
1072 config ARCH_HIBERNATION_HEADER
1073         def_bool HIBERNATION
1074
1075 config ARCH_SUSPEND_POSSIBLE
1076         def_bool y
1077
1078 endmenu # "Power management options"
1079
1080 menu "CPU Power Management"
1081
1082 source "drivers/cpuidle/Kconfig"
1083
1084 source "drivers/cpufreq/Kconfig"
1085
1086 endmenu # "CPU Power Management"
1087
1088 source "arch/riscv/kvm/Kconfig"
1089
1090 source "drivers/acpi/Kconfig"