dma-direct: provide mmap and get_sgtable method overrides
[linux-2.6-microblaze.git] / arch / arm64 / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 config ARM64
3         def_bool y
4         select ACPI_CCA_REQUIRED if ACPI
5         select ACPI_GENERIC_GSI if ACPI
6         select ACPI_GTDT if ACPI
7         select ACPI_IORT if ACPI
8         select ACPI_REDUCED_HARDWARE_ONLY if ACPI
9         select ACPI_MCFG if (ACPI && PCI)
10         select ACPI_SPCR_TABLE if ACPI
11         select ACPI_PPTT if ACPI
12         select ARCH_CLOCKSOURCE_DATA
13         select ARCH_HAS_DEBUG_VIRTUAL
14         select ARCH_HAS_DEVMEM_IS_ALLOWED
15         select ARCH_HAS_DMA_PREP_COHERENT
16         select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
17         select ARCH_HAS_FAST_MULTIPLIER
18         select ARCH_HAS_FORTIFY_SOURCE
19         select ARCH_HAS_GCOV_PROFILE_ALL
20         select ARCH_HAS_GIGANTIC_PAGE
21         select ARCH_HAS_KCOV
22         select ARCH_HAS_KEEPINITRD
23         select ARCH_HAS_MEMBARRIER_SYNC_CORE
24         select ARCH_HAS_PTE_DEVMAP
25         select ARCH_HAS_PTE_SPECIAL
26         select ARCH_HAS_SETUP_DMA_OPS
27         select ARCH_HAS_SET_DIRECT_MAP
28         select ARCH_HAS_SET_MEMORY
29         select ARCH_HAS_STRICT_KERNEL_RWX
30         select ARCH_HAS_STRICT_MODULE_RWX
31         select ARCH_HAS_SYNC_DMA_FOR_DEVICE
32         select ARCH_HAS_SYNC_DMA_FOR_CPU
33         select ARCH_HAS_SYSCALL_WRAPPER
34         select ARCH_HAS_TEARDOWN_DMA_OPS if IOMMU_SUPPORT
35         select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
36         select ARCH_HAVE_NMI_SAFE_CMPXCHG
37         select ARCH_INLINE_READ_LOCK if !PREEMPT
38         select ARCH_INLINE_READ_LOCK_BH if !PREEMPT
39         select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPT
40         select ARCH_INLINE_READ_LOCK_IRQSAVE if !PREEMPT
41         select ARCH_INLINE_READ_UNLOCK if !PREEMPT
42         select ARCH_INLINE_READ_UNLOCK_BH if !PREEMPT
43         select ARCH_INLINE_READ_UNLOCK_IRQ if !PREEMPT
44         select ARCH_INLINE_READ_UNLOCK_IRQRESTORE if !PREEMPT
45         select ARCH_INLINE_WRITE_LOCK if !PREEMPT
46         select ARCH_INLINE_WRITE_LOCK_BH if !PREEMPT
47         select ARCH_INLINE_WRITE_LOCK_IRQ if !PREEMPT
48         select ARCH_INLINE_WRITE_LOCK_IRQSAVE if !PREEMPT
49         select ARCH_INLINE_WRITE_UNLOCK if !PREEMPT
50         select ARCH_INLINE_WRITE_UNLOCK_BH if !PREEMPT
51         select ARCH_INLINE_WRITE_UNLOCK_IRQ if !PREEMPT
52         select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE if !PREEMPT
53         select ARCH_INLINE_SPIN_TRYLOCK if !PREEMPT
54         select ARCH_INLINE_SPIN_TRYLOCK_BH if !PREEMPT
55         select ARCH_INLINE_SPIN_LOCK if !PREEMPT
56         select ARCH_INLINE_SPIN_LOCK_BH if !PREEMPT
57         select ARCH_INLINE_SPIN_LOCK_IRQ if !PREEMPT
58         select ARCH_INLINE_SPIN_LOCK_IRQSAVE if !PREEMPT
59         select ARCH_INLINE_SPIN_UNLOCK if !PREEMPT
60         select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPT
61         select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPT
62         select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPT
63         select ARCH_KEEP_MEMBLOCK
64         select ARCH_USE_CMPXCHG_LOCKREF
65         select ARCH_USE_QUEUED_RWLOCKS
66         select ARCH_USE_QUEUED_SPINLOCKS
67         select ARCH_SUPPORTS_MEMORY_FAILURE
68         select ARCH_SUPPORTS_ATOMIC_RMW
69         select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000 || CC_IS_CLANG
70         select ARCH_SUPPORTS_NUMA_BALANCING
71         select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT
72         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
73         select ARCH_WANT_FRAME_POINTERS
74         select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36)
75         select ARCH_HAS_UBSAN_SANITIZE_ALL
76         select ARM_AMBA
77         select ARM_ARCH_TIMER
78         select ARM_GIC
79         select AUDIT_ARCH_COMPAT_GENERIC
80         select ARM_GIC_V2M if PCI
81         select ARM_GIC_V3
82         select ARM_GIC_V3_ITS if PCI
83         select ARM_PSCI_FW
84         select BUILDTIME_EXTABLE_SORT
85         select CLONE_BACKWARDS
86         select COMMON_CLK
87         select CPU_PM if (SUSPEND || CPU_IDLE)
88         select CRC32
89         select DCACHE_WORD_ACCESS
90         select DMA_DIRECT_REMAP
91         select EDAC_SUPPORT
92         select FRAME_POINTER
93         select GENERIC_ALLOCATOR
94         select GENERIC_ARCH_TOPOLOGY
95         select GENERIC_CLOCKEVENTS
96         select GENERIC_CLOCKEVENTS_BROADCAST
97         select GENERIC_CPU_AUTOPROBE
98         select GENERIC_CPU_VULNERABILITIES
99         select GENERIC_EARLY_IOREMAP
100         select GENERIC_IDLE_POLL_SETUP
101         select GENERIC_IRQ_MULTI_HANDLER
102         select GENERIC_IRQ_PROBE
103         select GENERIC_IRQ_SHOW
104         select GENERIC_IRQ_SHOW_LEVEL
105         select GENERIC_PCI_IOMAP
106         select GENERIC_SCHED_CLOCK
107         select GENERIC_SMP_IDLE_THREAD
108         select GENERIC_STRNCPY_FROM_USER
109         select GENERIC_STRNLEN_USER
110         select GENERIC_TIME_VSYSCALL
111         select GENERIC_GETTIMEOFDAY
112         select HANDLE_DOMAIN_IRQ
113         select HARDIRQS_SW_RESEND
114         select HAVE_PCI
115         select HAVE_ACPI_APEI if (ACPI && EFI)
116         select HAVE_ALIGNED_STRUCT_PAGE if SLUB
117         select HAVE_ARCH_AUDITSYSCALL
118         select HAVE_ARCH_BITREVERSE
119         select HAVE_ARCH_HUGE_VMAP
120         select HAVE_ARCH_JUMP_LABEL
121         select HAVE_ARCH_JUMP_LABEL_RELATIVE
122         select HAVE_ARCH_KASAN if !(ARM64_16K_PAGES && ARM64_VA_BITS_48)
123         select HAVE_ARCH_KASAN_SW_TAGS if HAVE_ARCH_KASAN
124         select HAVE_ARCH_KGDB
125         select HAVE_ARCH_MMAP_RND_BITS
126         select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
127         select HAVE_ARCH_PREL32_RELOCATIONS
128         select HAVE_ARCH_SECCOMP_FILTER
129         select HAVE_ARCH_STACKLEAK
130         select HAVE_ARCH_THREAD_STRUCT_WHITELIST
131         select HAVE_ARCH_TRACEHOOK
132         select HAVE_ARCH_TRANSPARENT_HUGEPAGE
133         select HAVE_ARCH_VMAP_STACK
134         select HAVE_ARM_SMCCC
135         select HAVE_ASM_MODVERSIONS
136         select HAVE_EBPF_JIT
137         select HAVE_C_RECORDMCOUNT
138         select HAVE_CMPXCHG_DOUBLE
139         select HAVE_CMPXCHG_LOCAL
140         select HAVE_CONTEXT_TRACKING
141         select HAVE_DEBUG_BUGVERBOSE
142         select HAVE_DEBUG_KMEMLEAK
143         select HAVE_DMA_CONTIGUOUS
144         select HAVE_DYNAMIC_FTRACE
145         select HAVE_EFFICIENT_UNALIGNED_ACCESS
146         select HAVE_FAST_GUP
147         select HAVE_FTRACE_MCOUNT_RECORD
148         select HAVE_FUNCTION_TRACER
149         select HAVE_FUNCTION_ERROR_INJECTION
150         select HAVE_FUNCTION_GRAPH_TRACER
151         select HAVE_GCC_PLUGINS
152         select HAVE_HW_BREAKPOINT if PERF_EVENTS
153         select HAVE_IRQ_TIME_ACCOUNTING
154         select HAVE_MEMBLOCK_NODE_MAP if NUMA
155         select HAVE_NMI
156         select HAVE_PATA_PLATFORM
157         select HAVE_PERF_EVENTS
158         select HAVE_PERF_REGS
159         select HAVE_PERF_USER_STACK_DUMP
160         select HAVE_REGS_AND_STACK_ACCESS_API
161         select HAVE_FUNCTION_ARG_ACCESS_API
162         select HAVE_RCU_TABLE_FREE
163         select HAVE_RSEQ
164         select HAVE_STACKPROTECTOR
165         select HAVE_SYSCALL_TRACEPOINTS
166         select HAVE_KPROBES
167         select HAVE_KRETPROBES
168         select HAVE_GENERIC_VDSO
169         select IOMMU_DMA if IOMMU_SUPPORT
170         select IRQ_DOMAIN
171         select IRQ_FORCED_THREADING
172         select MODULES_USE_ELF_RELA
173         select NEED_DMA_MAP_STATE
174         select NEED_SG_DMA_LENGTH
175         select OF
176         select OF_EARLY_FLATTREE
177         select PCI_DOMAINS_GENERIC if PCI
178         select PCI_ECAM if (ACPI && PCI)
179         select PCI_SYSCALL if PCI
180         select POWER_RESET
181         select POWER_SUPPLY
182         select REFCOUNT_FULL
183         select SPARSE_IRQ
184         select SWIOTLB
185         select SYSCTL_EXCEPTION_TRACE
186         select THREAD_INFO_IN_TASK
187         help
188           ARM 64-bit (AArch64) Linux support.
189
190 config 64BIT
191         def_bool y
192
193 config MMU
194         def_bool y
195
196 config ARM64_PAGE_SHIFT
197         int
198         default 16 if ARM64_64K_PAGES
199         default 14 if ARM64_16K_PAGES
200         default 12
201
202 config ARM64_CONT_SHIFT
203         int
204         default 5 if ARM64_64K_PAGES
205         default 7 if ARM64_16K_PAGES
206         default 4
207
208 config ARCH_MMAP_RND_BITS_MIN
209        default 14 if ARM64_64K_PAGES
210        default 16 if ARM64_16K_PAGES
211        default 18
212
213 # max bits determined by the following formula:
214 #  VA_BITS - PAGE_SHIFT - 3
215 config ARCH_MMAP_RND_BITS_MAX
216        default 19 if ARM64_VA_BITS=36
217        default 24 if ARM64_VA_BITS=39
218        default 27 if ARM64_VA_BITS=42
219        default 30 if ARM64_VA_BITS=47
220        default 29 if ARM64_VA_BITS=48 && ARM64_64K_PAGES
221        default 31 if ARM64_VA_BITS=48 && ARM64_16K_PAGES
222        default 33 if ARM64_VA_BITS=48
223        default 14 if ARM64_64K_PAGES
224        default 16 if ARM64_16K_PAGES
225        default 18
226
227 config ARCH_MMAP_RND_COMPAT_BITS_MIN
228        default 7 if ARM64_64K_PAGES
229        default 9 if ARM64_16K_PAGES
230        default 11
231
232 config ARCH_MMAP_RND_COMPAT_BITS_MAX
233        default 16
234
235 config NO_IOPORT_MAP
236         def_bool y if !PCI
237
238 config STACKTRACE_SUPPORT
239         def_bool y
240
241 config ILLEGAL_POINTER_VALUE
242         hex
243         default 0xdead000000000000
244
245 config LOCKDEP_SUPPORT
246         def_bool y
247
248 config TRACE_IRQFLAGS_SUPPORT
249         def_bool y
250
251 config GENERIC_BUG
252         def_bool y
253         depends on BUG
254
255 config GENERIC_BUG_RELATIVE_POINTERS
256         def_bool y
257         depends on GENERIC_BUG
258
259 config GENERIC_HWEIGHT
260         def_bool y
261
262 config GENERIC_CSUM
263         def_bool y
264
265 config GENERIC_CALIBRATE_DELAY
266         def_bool y
267
268 config ZONE_DMA32
269         bool "Support DMA32 zone" if EXPERT
270         default y
271
272 config ARCH_ENABLE_MEMORY_HOTPLUG
273         def_bool y
274
275 config SMP
276         def_bool y
277
278 config KERNEL_MODE_NEON
279         def_bool y
280
281 config FIX_EARLYCON_MEM
282         def_bool y
283
284 config PGTABLE_LEVELS
285         int
286         default 2 if ARM64_16K_PAGES && ARM64_VA_BITS_36
287         default 2 if ARM64_64K_PAGES && ARM64_VA_BITS_42
288         default 3 if ARM64_64K_PAGES && (ARM64_VA_BITS_48 || ARM64_VA_BITS_52)
289         default 3 if ARM64_4K_PAGES && ARM64_VA_BITS_39
290         default 3 if ARM64_16K_PAGES && ARM64_VA_BITS_47
291         default 4 if !ARM64_64K_PAGES && ARM64_VA_BITS_48
292
293 config ARCH_SUPPORTS_UPROBES
294         def_bool y
295
296 config ARCH_PROC_KCORE_TEXT
297         def_bool y
298
299 config KASAN_SHADOW_OFFSET
300         hex
301         depends on KASAN
302         default 0xdfffa00000000000 if (ARM64_VA_BITS_48 || ARM64_VA_BITS_52) && !KASAN_SW_TAGS
303         default 0xdfffd00000000000 if ARM64_VA_BITS_47 && !KASAN_SW_TAGS
304         default 0xdffffe8000000000 if ARM64_VA_BITS_42 && !KASAN_SW_TAGS
305         default 0xdfffffd000000000 if ARM64_VA_BITS_39 && !KASAN_SW_TAGS
306         default 0xdffffffa00000000 if ARM64_VA_BITS_36 && !KASAN_SW_TAGS
307         default 0xefff900000000000 if (ARM64_VA_BITS_48 || ARM64_VA_BITS_52) && KASAN_SW_TAGS
308         default 0xefffc80000000000 if ARM64_VA_BITS_47 && KASAN_SW_TAGS
309         default 0xeffffe4000000000 if ARM64_VA_BITS_42 && KASAN_SW_TAGS
310         default 0xefffffc800000000 if ARM64_VA_BITS_39 && KASAN_SW_TAGS
311         default 0xeffffff900000000 if ARM64_VA_BITS_36 && KASAN_SW_TAGS
312         default 0xffffffffffffffff
313
314 source "arch/arm64/Kconfig.platforms"
315
316 menu "Kernel Features"
317
318 menu "ARM errata workarounds via the alternatives framework"
319
320 config ARM64_WORKAROUND_CLEAN_CACHE
321         bool
322
323 config ARM64_ERRATUM_826319
324         bool "Cortex-A53: 826319: System might deadlock if a write cannot complete until read data is accepted"
325         default y
326         select ARM64_WORKAROUND_CLEAN_CACHE
327         help
328           This option adds an alternative code sequence to work around ARM
329           erratum 826319 on Cortex-A53 parts up to r0p2 with an AMBA 4 ACE or
330           AXI master interface and an L2 cache.
331
332           If a Cortex-A53 uses an AMBA AXI4 ACE interface to other processors
333           and is unable to accept a certain write via this interface, it will
334           not progress on read data presented on the read data channel and the
335           system can deadlock.
336
337           The workaround promotes data cache clean instructions to
338           data cache clean-and-invalidate.
339           Please note that this does not necessarily enable the workaround,
340           as it depends on the alternative framework, which will only patch
341           the kernel if an affected CPU is detected.
342
343           If unsure, say Y.
344
345 config ARM64_ERRATUM_827319
346         bool "Cortex-A53: 827319: Data cache clean instructions might cause overlapping transactions to the interconnect"
347         default y
348         select ARM64_WORKAROUND_CLEAN_CACHE
349         help
350           This option adds an alternative code sequence to work around ARM
351           erratum 827319 on Cortex-A53 parts up to r0p2 with an AMBA 5 CHI
352           master interface and an L2 cache.
353
354           Under certain conditions this erratum can cause a clean line eviction
355           to occur at the same time as another transaction to the same address
356           on the AMBA 5 CHI interface, which can cause data corruption if the
357           interconnect reorders the two transactions.
358
359           The workaround promotes data cache clean instructions to
360           data cache clean-and-invalidate.
361           Please note that this does not necessarily enable the workaround,
362           as it depends on the alternative framework, which will only patch
363           the kernel if an affected CPU is detected.
364
365           If unsure, say Y.
366
367 config ARM64_ERRATUM_824069
368         bool "Cortex-A53: 824069: Cache line might not be marked as clean after a CleanShared snoop"
369         default y
370         select ARM64_WORKAROUND_CLEAN_CACHE
371         help
372           This option adds an alternative code sequence to work around ARM
373           erratum 824069 on Cortex-A53 parts up to r0p2 when it is connected
374           to a coherent interconnect.
375
376           If a Cortex-A53 processor is executing a store or prefetch for
377           write instruction at the same time as a processor in another
378           cluster is executing a cache maintenance operation to the same
379           address, then this erratum might cause a clean cache line to be
380           incorrectly marked as dirty.
381
382           The workaround promotes data cache clean instructions to
383           data cache clean-and-invalidate.
384           Please note that this option does not necessarily enable the
385           workaround, as it depends on the alternative framework, which will
386           only patch the kernel if an affected CPU is detected.
387
388           If unsure, say Y.
389
390 config ARM64_ERRATUM_819472
391         bool "Cortex-A53: 819472: Store exclusive instructions might cause data corruption"
392         default y
393         select ARM64_WORKAROUND_CLEAN_CACHE
394         help
395           This option adds an alternative code sequence to work around ARM
396           erratum 819472 on Cortex-A53 parts up to r0p1 with an L2 cache
397           present when it is connected to a coherent interconnect.
398
399           If the processor is executing a load and store exclusive sequence at
400           the same time as a processor in another cluster is executing a cache
401           maintenance operation to the same address, then this erratum might
402           cause data corruption.
403
404           The workaround promotes data cache clean instructions to
405           data cache clean-and-invalidate.
406           Please note that this does not necessarily enable the workaround,
407           as it depends on the alternative framework, which will only patch
408           the kernel if an affected CPU is detected.
409
410           If unsure, say Y.
411
412 config ARM64_ERRATUM_832075
413         bool "Cortex-A57: 832075: possible deadlock on mixing exclusive memory accesses with device loads"
414         default y
415         help
416           This option adds an alternative code sequence to work around ARM
417           erratum 832075 on Cortex-A57 parts up to r1p2.
418
419           Affected Cortex-A57 parts might deadlock when exclusive load/store
420           instructions to Write-Back memory are mixed with Device loads.
421
422           The workaround is to promote device loads to use Load-Acquire
423           semantics.
424           Please note that this does not necessarily enable the workaround,
425           as it depends on the alternative framework, which will only patch
426           the kernel if an affected CPU is detected.
427
428           If unsure, say Y.
429
430 config ARM64_ERRATUM_834220
431         bool "Cortex-A57: 834220: Stage 2 translation fault might be incorrectly reported in presence of a Stage 1 fault"
432         depends on KVM
433         default y
434         help
435           This option adds an alternative code sequence to work around ARM
436           erratum 834220 on Cortex-A57 parts up to r1p2.
437
438           Affected Cortex-A57 parts might report a Stage 2 translation
439           fault as the result of a Stage 1 fault for load crossing a
440           page boundary when there is a permission or device memory
441           alignment fault at Stage 1 and a translation fault at Stage 2.
442
443           The workaround is to verify that the Stage 1 translation
444           doesn't generate a fault before handling the Stage 2 fault.
445           Please note that this does not necessarily enable the workaround,
446           as it depends on the alternative framework, which will only patch
447           the kernel if an affected CPU is detected.
448
449           If unsure, say Y.
450
451 config ARM64_ERRATUM_845719
452         bool "Cortex-A53: 845719: a load might read incorrect data"
453         depends on COMPAT
454         default y
455         help
456           This option adds an alternative code sequence to work around ARM
457           erratum 845719 on Cortex-A53 parts up to r0p4.
458
459           When running a compat (AArch32) userspace on an affected Cortex-A53
460           part, a load at EL0 from a virtual address that matches the bottom 32
461           bits of the virtual address used by a recent load at (AArch64) EL1
462           might return incorrect data.
463
464           The workaround is to write the contextidr_el1 register on exception
465           return to a 32-bit task.
466           Please note that this does not necessarily enable the workaround,
467           as it depends on the alternative framework, which will only patch
468           the kernel if an affected CPU is detected.
469
470           If unsure, say Y.
471
472 config ARM64_ERRATUM_843419
473         bool "Cortex-A53: 843419: A load or store might access an incorrect address"
474         default y
475         select ARM64_MODULE_PLTS if MODULES
476         help
477           This option links the kernel with '--fix-cortex-a53-843419' and
478           enables PLT support to replace certain ADRP instructions, which can
479           cause subsequent memory accesses to use an incorrect address on
480           Cortex-A53 parts up to r0p4.
481
482           If unsure, say Y.
483
484 config ARM64_ERRATUM_1024718
485         bool "Cortex-A55: 1024718: Update of DBM/AP bits without break before make might result in incorrect update"
486         default y
487         help
488           This option adds a workaround for ARM Cortex-A55 Erratum 1024718.
489
490           Affected Cortex-A55 cores (r0p0, r0p1, r1p0) could cause incorrect
491           update of the hardware dirty bit when the DBM/AP bits are updated
492           without a break-before-make. The workaround is to disable the usage
493           of hardware DBM locally on the affected cores. CPUs not affected by
494           this erratum will continue to use the feature.
495
496           If unsure, say Y.
497
498 config ARM64_ERRATUM_1418040
499         bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result"
500         default y
501         depends on COMPAT
502         help
503           This option adds a workaround for ARM Cortex-A76/Neoverse-N1
504           errata 1188873 and 1418040.
505
506           Affected Cortex-A76/Neoverse-N1 cores (r0p0 to r3p1) could
507           cause register corruption when accessing the timer registers
508           from AArch32 userspace.
509
510           If unsure, say Y.
511
512 config ARM64_ERRATUM_1165522
513         bool "Cortex-A76: Speculative AT instruction using out-of-context translation regime could cause subsequent request to generate an incorrect translation"
514         default y
515         help
516           This option adds a workaround for ARM Cortex-A76 erratum 1165522.
517
518           Affected Cortex-A76 cores (r0p0, r1p0, r2p0) could end-up with
519           corrupted TLBs by speculating an AT instruction during a guest
520           context switch.
521
522           If unsure, say Y.
523
524 config ARM64_ERRATUM_1286807
525         bool "Cortex-A76: Modification of the translation table for a virtual address might lead to read-after-read ordering violation"
526         default y
527         select ARM64_WORKAROUND_REPEAT_TLBI
528         help
529           This option adds a workaround for ARM Cortex-A76 erratum 1286807.
530
531           On the affected Cortex-A76 cores (r0p0 to r3p0), if a virtual
532           address for a cacheable mapping of a location is being
533           accessed by a core while another core is remapping the virtual
534           address to a new physical page using the recommended
535           break-before-make sequence, then under very rare circumstances
536           TLBI+DSB completes before a read using the translation being
537           invalidated has been observed by other observers. The
538           workaround repeats the TLBI+DSB operation.
539
540           If unsure, say Y.
541
542 config ARM64_ERRATUM_1463225
543         bool "Cortex-A76: Software Step might prevent interrupt recognition"
544         default y
545         help
546           This option adds a workaround for Arm Cortex-A76 erratum 1463225.
547
548           On the affected Cortex-A76 cores (r0p0 to r3p1), software stepping
549           of a system call instruction (SVC) can prevent recognition of
550           subsequent interrupts when software stepping is disabled in the
551           exception handler of the system call and either kernel debugging
552           is enabled or VHE is in use.
553
554           Work around the erratum by triggering a dummy step exception
555           when handling a system call from a task that is being stepped
556           in a VHE configuration of the kernel.
557
558           If unsure, say Y.
559
560 config CAVIUM_ERRATUM_22375
561         bool "Cavium erratum 22375, 24313"
562         default y
563         help
564           Enable workaround for errata 22375 and 24313.
565
566           This implements two gicv3-its errata workarounds for ThunderX. Both
567           with a small impact affecting only ITS table allocation.
568
569             erratum 22375: only alloc 8MB table size
570             erratum 24313: ignore memory access type
571
572           The fixes are in ITS initialization and basically ignore memory access
573           type and table size provided by the TYPER and BASER registers.
574
575           If unsure, say Y.
576
577 config CAVIUM_ERRATUM_23144
578         bool "Cavium erratum 23144: ITS SYNC hang on dual socket system"
579         depends on NUMA
580         default y
581         help
582           ITS SYNC command hang for cross node io and collections/cpu mapping.
583
584           If unsure, say Y.
585
586 config CAVIUM_ERRATUM_23154
587         bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed"
588         default y
589         help
590           The gicv3 of ThunderX requires a modified version for
591           reading the IAR status to ensure data synchronization
592           (access to icc_iar1_el1 is not sync'ed before and after).
593
594           If unsure, say Y.
595
596 config CAVIUM_ERRATUM_27456
597         bool "Cavium erratum 27456: Broadcast TLBI instructions may cause icache corruption"
598         default y
599         help
600           On ThunderX T88 pass 1.x through 2.1 parts, broadcast TLBI
601           instructions may cause the icache to become corrupted if it
602           contains data for a non-current ASID.  The fix is to
603           invalidate the icache when changing the mm context.
604
605           If unsure, say Y.
606
607 config CAVIUM_ERRATUM_30115
608         bool "Cavium erratum 30115: Guest may disable interrupts in host"
609         default y
610         help
611           On ThunderX T88 pass 1.x through 2.2, T81 pass 1.0 through
612           1.2, and T83 Pass 1.0, KVM guest execution may disable
613           interrupts in host. Trapping both GICv3 group-0 and group-1
614           accesses sidesteps the issue.
615
616           If unsure, say Y.
617
618 config CAVIUM_TX2_ERRATUM_219
619         bool "Cavium ThunderX2 erratum 219: PRFM between TTBR change and ISB fails"
620         default y
621         help
622           On Cavium ThunderX2, a load, store or prefetch instruction between a
623           TTBR update and the corresponding context synchronizing operation can
624           cause a spurious Data Abort to be delivered to any hardware thread in
625           the CPU core.
626
627           Work around the issue by avoiding the problematic code sequence and
628           trapping KVM guest TTBRx_EL1 writes to EL2 when SMT is enabled. The
629           trap handler performs the corresponding register access, skips the
630           instruction and ensures context synchronization by virtue of the
631           exception return.
632
633           If unsure, say Y.
634
635 config QCOM_FALKOR_ERRATUM_1003
636         bool "Falkor E1003: Incorrect translation due to ASID change"
637         default y
638         help
639           On Falkor v1, an incorrect ASID may be cached in the TLB when ASID
640           and BADDR are changed together in TTBRx_EL1. Since we keep the ASID
641           in TTBR1_EL1, this situation only occurs in the entry trampoline and
642           then only for entries in the walk cache, since the leaf translation
643           is unchanged. Work around the erratum by invalidating the walk cache
644           entries for the trampoline before entering the kernel proper.
645
646 config ARM64_WORKAROUND_REPEAT_TLBI
647         bool
648
649 config QCOM_FALKOR_ERRATUM_1009
650         bool "Falkor E1009: Prematurely complete a DSB after a TLBI"
651         default y
652         select ARM64_WORKAROUND_REPEAT_TLBI
653         help
654           On Falkor v1, the CPU may prematurely complete a DSB following a
655           TLBI xxIS invalidate maintenance operation. Repeat the TLBI operation
656           one more time to fix the issue.
657
658           If unsure, say Y.
659
660 config QCOM_QDF2400_ERRATUM_0065
661         bool "QDF2400 E0065: Incorrect GITS_TYPER.ITT_Entry_size"
662         default y
663         help
664           On Qualcomm Datacenter Technologies QDF2400 SoC, ITS hardware reports
665           ITE size incorrectly. The GITS_TYPER.ITT_Entry_size field should have
666           been indicated as 16Bytes (0xf), not 8Bytes (0x7).
667
668           If unsure, say Y.
669
670 config SOCIONEXT_SYNQUACER_PREITS
671         bool "Socionext Synquacer: Workaround for GICv3 pre-ITS"
672         default y
673         help
674           Socionext Synquacer SoCs implement a separate h/w block to generate
675           MSI doorbell writes with non-zero values for the device ID.
676
677           If unsure, say Y.
678
679 config HISILICON_ERRATUM_161600802
680         bool "Hip07 161600802: Erroneous redistributor VLPI base"
681         default y
682         help
683           The HiSilicon Hip07 SoC uses the wrong redistributor base
684           when issued ITS commands such as VMOVP and VMAPP, and requires
685           a 128kB offset to be applied to the target address in this commands.
686
687           If unsure, say Y.
688
689 config QCOM_FALKOR_ERRATUM_E1041
690         bool "Falkor E1041: Speculative instruction fetches might cause errant memory access"
691         default y
692         help
693           Falkor CPU may speculatively fetch instructions from an improper
694           memory location when MMU translation is changed from SCTLR_ELn[M]=1
695           to SCTLR_ELn[M]=0. Prefix an ISB instruction to fix the problem.
696
697           If unsure, say Y.
698
699 config FUJITSU_ERRATUM_010001
700         bool "Fujitsu-A64FX erratum E#010001: Undefined fault may occur wrongly"
701         default y
702         help
703           This option adds a workaround for Fujitsu-A64FX erratum E#010001.
704           On some variants of the Fujitsu-A64FX cores ver(1.0, 1.1), memory
705           accesses may cause undefined fault (Data abort, DFSC=0b111111).
706           This fault occurs under a specific hardware condition when a
707           load/store instruction performs an address translation using:
708           case-1  TTBR0_EL1 with TCR_EL1.NFD0 == 1.
709           case-2  TTBR0_EL2 with TCR_EL2.NFD0 == 1.
710           case-3  TTBR1_EL1 with TCR_EL1.NFD1 == 1.
711           case-4  TTBR1_EL2 with TCR_EL2.NFD1 == 1.
712
713           The workaround is to ensure these bits are clear in TCR_ELx.
714           The workaround only affects the Fujitsu-A64FX.
715
716           If unsure, say Y.
717
718 endmenu
719
720
721 choice
722         prompt "Page size"
723         default ARM64_4K_PAGES
724         help
725           Page size (translation granule) configuration.
726
727 config ARM64_4K_PAGES
728         bool "4KB"
729         help
730           This feature enables 4KB pages support.
731
732 config ARM64_16K_PAGES
733         bool "16KB"
734         help
735           The system will use 16KB pages support. AArch32 emulation
736           requires applications compiled with 16K (or a multiple of 16K)
737           aligned segments.
738
739 config ARM64_64K_PAGES
740         bool "64KB"
741         help
742           This feature enables 64KB pages support (4KB by default)
743           allowing only two levels of page tables and faster TLB
744           look-up. AArch32 emulation requires applications compiled
745           with 64K aligned segments.
746
747 endchoice
748
749 choice
750         prompt "Virtual address space size"
751         default ARM64_VA_BITS_39 if ARM64_4K_PAGES
752         default ARM64_VA_BITS_47 if ARM64_16K_PAGES
753         default ARM64_VA_BITS_42 if ARM64_64K_PAGES
754         help
755           Allows choosing one of multiple possible virtual address
756           space sizes. The level of translation table is determined by
757           a combination of page size and virtual address space size.
758
759 config ARM64_VA_BITS_36
760         bool "36-bit" if EXPERT
761         depends on ARM64_16K_PAGES
762
763 config ARM64_VA_BITS_39
764         bool "39-bit"
765         depends on ARM64_4K_PAGES
766
767 config ARM64_VA_BITS_42
768         bool "42-bit"
769         depends on ARM64_64K_PAGES
770
771 config ARM64_VA_BITS_47
772         bool "47-bit"
773         depends on ARM64_16K_PAGES
774
775 config ARM64_VA_BITS_48
776         bool "48-bit"
777
778 config ARM64_VA_BITS_52
779         bool "52-bit"
780         depends on ARM64_64K_PAGES && (ARM64_PAN || !ARM64_SW_TTBR0_PAN)
781         help
782           Enable 52-bit virtual addressing for userspace when explicitly
783           requested via a hint to mmap(). The kernel will also use 52-bit
784           virtual addresses for its own mappings (provided HW support for
785           this feature is available, otherwise it reverts to 48-bit).
786
787           NOTE: Enabling 52-bit virtual addressing in conjunction with
788           ARMv8.3 Pointer Authentication will result in the PAC being
789           reduced from 7 bits to 3 bits, which may have a significant
790           impact on its susceptibility to brute-force attacks.
791
792           If unsure, select 48-bit virtual addressing instead.
793
794 endchoice
795
796 config ARM64_FORCE_52BIT
797         bool "Force 52-bit virtual addresses for userspace"
798         depends on ARM64_VA_BITS_52 && EXPERT
799         help
800           For systems with 52-bit userspace VAs enabled, the kernel will attempt
801           to maintain compatibility with older software by providing 48-bit VAs
802           unless a hint is supplied to mmap.
803
804           This configuration option disables the 48-bit compatibility logic, and
805           forces all userspace addresses to be 52-bit on HW that supports it. One
806           should only enable this configuration option for stress testing userspace
807           memory management code. If unsure say N here.
808
809 config ARM64_VA_BITS
810         int
811         default 36 if ARM64_VA_BITS_36
812         default 39 if ARM64_VA_BITS_39
813         default 42 if ARM64_VA_BITS_42
814         default 47 if ARM64_VA_BITS_47
815         default 48 if ARM64_VA_BITS_48
816         default 52 if ARM64_VA_BITS_52
817
818 choice
819         prompt "Physical address space size"
820         default ARM64_PA_BITS_48
821         help
822           Choose the maximum physical address range that the kernel will
823           support.
824
825 config ARM64_PA_BITS_48
826         bool "48-bit"
827
828 config ARM64_PA_BITS_52
829         bool "52-bit (ARMv8.2)"
830         depends on ARM64_64K_PAGES
831         depends on ARM64_PAN || !ARM64_SW_TTBR0_PAN
832         help
833           Enable support for a 52-bit physical address space, introduced as
834           part of the ARMv8.2-LPA extension.
835
836           With this enabled, the kernel will also continue to work on CPUs that
837           do not support ARMv8.2-LPA, but with some added memory overhead (and
838           minor performance overhead).
839
840 endchoice
841
842 config ARM64_PA_BITS
843         int
844         default 48 if ARM64_PA_BITS_48
845         default 52 if ARM64_PA_BITS_52
846
847 config CPU_BIG_ENDIAN
848        bool "Build big-endian kernel"
849        help
850          Say Y if you plan on running a kernel in big-endian mode.
851
852 config SCHED_MC
853         bool "Multi-core scheduler support"
854         help
855           Multi-core scheduler support improves the CPU scheduler's decision
856           making when dealing with multi-core CPU chips at a cost of slightly
857           increased overhead in some places. If unsure say N here.
858
859 config SCHED_SMT
860         bool "SMT scheduler support"
861         help
862           Improves the CPU scheduler's decision making when dealing with
863           MultiThreading at a cost of slightly increased overhead in some
864           places. If unsure say N here.
865
866 config NR_CPUS
867         int "Maximum number of CPUs (2-4096)"
868         range 2 4096
869         default "256"
870
871 config HOTPLUG_CPU
872         bool "Support for hot-pluggable CPUs"
873         select GENERIC_IRQ_MIGRATION
874         help
875           Say Y here to experiment with turning CPUs off and on.  CPUs
876           can be controlled through /sys/devices/system/cpu.
877
878 # Common NUMA Features
879 config NUMA
880         bool "Numa Memory Allocation and Scheduler Support"
881         select ACPI_NUMA if ACPI
882         select OF_NUMA
883         help
884           Enable NUMA (Non Uniform Memory Access) support.
885
886           The kernel will try to allocate memory used by a CPU on the
887           local memory of the CPU and add some more
888           NUMA awareness to the kernel.
889
890 config NODES_SHIFT
891         int "Maximum NUMA Nodes (as a power of 2)"
892         range 1 10
893         default "2"
894         depends on NEED_MULTIPLE_NODES
895         help
896           Specify the maximum number of NUMA Nodes available on the target
897           system.  Increases memory reserved to accommodate various tables.
898
899 config USE_PERCPU_NUMA_NODE_ID
900         def_bool y
901         depends on NUMA
902
903 config HAVE_SETUP_PER_CPU_AREA
904         def_bool y
905         depends on NUMA
906
907 config NEED_PER_CPU_EMBED_FIRST_CHUNK
908         def_bool y
909         depends on NUMA
910
911 config HOLES_IN_ZONE
912         def_bool y
913
914 source "kernel/Kconfig.hz"
915
916 config ARCH_SUPPORTS_DEBUG_PAGEALLOC
917         def_bool y
918
919 config ARCH_SPARSEMEM_ENABLE
920         def_bool y
921         select SPARSEMEM_VMEMMAP_ENABLE
922
923 config ARCH_SPARSEMEM_DEFAULT
924         def_bool ARCH_SPARSEMEM_ENABLE
925
926 config ARCH_SELECT_MEMORY_MODEL
927         def_bool ARCH_SPARSEMEM_ENABLE
928
929 config ARCH_FLATMEM_ENABLE
930         def_bool !NUMA
931
932 config HAVE_ARCH_PFN_VALID
933         def_bool y
934
935 config HW_PERF_EVENTS
936         def_bool y
937         depends on ARM_PMU
938
939 config SYS_SUPPORTS_HUGETLBFS
940         def_bool y
941
942 config ARCH_WANT_HUGE_PMD_SHARE
943
944 config ARCH_HAS_CACHE_LINE_SIZE
945         def_bool y
946
947 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
948         def_bool y if PGTABLE_LEVELS > 2
949
950 config SECCOMP
951         bool "Enable seccomp to safely compute untrusted bytecode"
952         ---help---
953           This kernel feature is useful for number crunching applications
954           that may need to compute untrusted bytecode during their
955           execution. By using pipes or other transports made available to
956           the process as file descriptors supporting the read/write
957           syscalls, it's possible to isolate those applications in
958           their own address space using seccomp. Once seccomp is
959           enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
960           and the task is only allowed to execute a few safe syscalls
961           defined by each seccomp mode.
962
963 config PARAVIRT
964         bool "Enable paravirtualization code"
965         help
966           This changes the kernel so it can modify itself when it is run
967           under a hypervisor, potentially improving performance significantly
968           over full virtualization.
969
970 config PARAVIRT_TIME_ACCOUNTING
971         bool "Paravirtual steal time accounting"
972         select PARAVIRT
973         help
974           Select this option to enable fine granularity task steal time
975           accounting. Time spent executing other tasks in parallel with
976           the current vCPU is discounted from the vCPU power. To account for
977           that, there can be a small performance impact.
978
979           If in doubt, say N here.
980
981 config KEXEC
982         depends on PM_SLEEP_SMP
983         select KEXEC_CORE
984         bool "kexec system call"
985         ---help---
986           kexec is a system call that implements the ability to shutdown your
987           current kernel, and to start another kernel.  It is like a reboot
988           but it is independent of the system firmware.   And like a reboot
989           you can start any kernel with it, not just Linux.
990
991 config KEXEC_FILE
992         bool "kexec file based system call"
993         select KEXEC_CORE
994         help
995           This is new version of kexec system call. This system call is
996           file based and takes file descriptors as system call argument
997           for kernel and initramfs as opposed to list of segments as
998           accepted by previous system call.
999
1000 config KEXEC_SIG
1001         bool "Verify kernel signature during kexec_file_load() syscall"
1002         depends on KEXEC_FILE
1003         help
1004           Select this option to verify a signature with loaded kernel
1005           image. If configured, any attempt of loading a image without
1006           valid signature will fail.
1007
1008           In addition to that option, you need to enable signature
1009           verification for the corresponding kernel image type being
1010           loaded in order for this to work.
1011
1012 config KEXEC_IMAGE_VERIFY_SIG
1013         bool "Enable Image signature verification support"
1014         default y
1015         depends on KEXEC_SIG
1016         depends on EFI && SIGNED_PE_FILE_VERIFICATION
1017         help
1018           Enable Image signature verification support.
1019
1020 comment "Support for PE file signature verification disabled"
1021         depends on KEXEC_SIG
1022         depends on !EFI || !SIGNED_PE_FILE_VERIFICATION
1023
1024 config CRASH_DUMP
1025         bool "Build kdump crash kernel"
1026         help
1027           Generate crash dump after being started by kexec. This should
1028           be normally only set in special crash dump kernels which are
1029           loaded in the main kernel with kexec-tools into a specially
1030           reserved region and then later executed after a crash by
1031           kdump/kexec.
1032
1033           For more details see Documentation/admin-guide/kdump/kdump.rst
1034
1035 config XEN_DOM0
1036         def_bool y
1037         depends on XEN
1038
1039 config XEN
1040         bool "Xen guest support on ARM64"
1041         depends on ARM64 && OF
1042         select SWIOTLB_XEN
1043         select PARAVIRT
1044         help
1045           Say Y if you want to run Linux in a Virtual Machine on Xen on ARM64.
1046
1047 config FORCE_MAX_ZONEORDER
1048         int
1049         default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE)
1050         default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE)
1051         default "11"
1052         help
1053           The kernel memory allocator divides physically contiguous memory
1054           blocks into "zones", where each zone is a power of two number of
1055           pages.  This option selects the largest power of two that the kernel
1056           keeps in the memory allocator.  If you need to allocate very large
1057           blocks of physically contiguous memory, then you may need to
1058           increase this value.
1059
1060           This config option is actually maximum order plus one. For example,
1061           a value of 11 means that the largest free memory block is 2^10 pages.
1062
1063           We make sure that we can allocate upto a HugePage size for each configuration.
1064           Hence we have :
1065                 MAX_ORDER = (PMD_SHIFT - PAGE_SHIFT) + 1 => PAGE_SHIFT - 2
1066
1067           However for 4K, we choose a higher default value, 11 as opposed to 10, giving us
1068           4M allocations matching the default size used by generic code.
1069
1070 config UNMAP_KERNEL_AT_EL0
1071         bool "Unmap kernel when running in userspace (aka \"KAISER\")" if EXPERT
1072         default y
1073         help
1074           Speculation attacks against some high-performance processors can
1075           be used to bypass MMU permission checks and leak kernel data to
1076           userspace. This can be defended against by unmapping the kernel
1077           when running in userspace, mapping it back in on exception entry
1078           via a trampoline page in the vector table.
1079
1080           If unsure, say Y.
1081
1082 config HARDEN_BRANCH_PREDICTOR
1083         bool "Harden the branch predictor against aliasing attacks" if EXPERT
1084         default y
1085         help
1086           Speculation attacks against some high-performance processors rely on
1087           being able to manipulate the branch predictor for a victim context by
1088           executing aliasing branches in the attacker context.  Such attacks
1089           can be partially mitigated against by clearing internal branch
1090           predictor state and limiting the prediction logic in some situations.
1091
1092           This config option will take CPU-specific actions to harden the
1093           branch predictor against aliasing attacks and may rely on specific
1094           instruction sequences or control bits being set by the system
1095           firmware.
1096
1097           If unsure, say Y.
1098
1099 config HARDEN_EL2_VECTORS
1100         bool "Harden EL2 vector mapping against system register leak" if EXPERT
1101         default y
1102         help
1103           Speculation attacks against some high-performance processors can
1104           be used to leak privileged information such as the vector base
1105           register, resulting in a potential defeat of the EL2 layout
1106           randomization.
1107
1108           This config option will map the vectors to a fixed location,
1109           independent of the EL2 code mapping, so that revealing VBAR_EL2
1110           to an attacker does not give away any extra information. This
1111           only gets enabled on affected CPUs.
1112
1113           If unsure, say Y.
1114
1115 config ARM64_SSBD
1116         bool "Speculative Store Bypass Disable" if EXPERT
1117         default y
1118         help
1119           This enables mitigation of the bypassing of previous stores
1120           by speculative loads.
1121
1122           If unsure, say Y.
1123
1124 config RODATA_FULL_DEFAULT_ENABLED
1125         bool "Apply r/o permissions of VM areas also to their linear aliases"
1126         default y
1127         help
1128           Apply read-only attributes of VM areas to the linear alias of
1129           the backing pages as well. This prevents code or read-only data
1130           from being modified (inadvertently or intentionally) via another
1131           mapping of the same memory page. This additional enhancement can
1132           be turned off at runtime by passing rodata=[off|on] (and turned on
1133           with rodata=full if this option is set to 'n')
1134
1135           This requires the linear region to be mapped down to pages,
1136           which may adversely affect performance in some cases.
1137
1138 config ARM64_SW_TTBR0_PAN
1139         bool "Emulate Privileged Access Never using TTBR0_EL1 switching"
1140         help
1141           Enabling this option prevents the kernel from accessing
1142           user-space memory directly by pointing TTBR0_EL1 to a reserved
1143           zeroed area and reserved ASID. The user access routines
1144           restore the valid TTBR0_EL1 temporarily.
1145
1146 config ARM64_TAGGED_ADDR_ABI
1147         bool "Enable the tagged user addresses syscall ABI"
1148         default y
1149         help
1150           When this option is enabled, user applications can opt in to a
1151           relaxed ABI via prctl() allowing tagged addresses to be passed
1152           to system calls as pointer arguments. For details, see
1153           Documentation/arm64/tagged-address-abi.rst.
1154
1155 menuconfig COMPAT
1156         bool "Kernel support for 32-bit EL0"
1157         depends on ARM64_4K_PAGES || EXPERT
1158         select COMPAT_BINFMT_ELF if BINFMT_ELF
1159         select HAVE_UID16
1160         select OLD_SIGSUSPEND3
1161         select COMPAT_OLD_SIGACTION
1162         help
1163           This option enables support for a 32-bit EL0 running under a 64-bit
1164           kernel at EL1. AArch32-specific components such as system calls,
1165           the user helper functions, VFP support and the ptrace interface are
1166           handled appropriately by the kernel.
1167
1168           If you use a page size other than 4KB (i.e, 16KB or 64KB), please be aware
1169           that you will only be able to execute AArch32 binaries that were compiled
1170           with page size aligned segments.
1171
1172           If you want to execute 32-bit userspace applications, say Y.
1173
1174 if COMPAT
1175
1176 config KUSER_HELPERS
1177         bool "Enable kuser helpers page for 32-bit applications"
1178         default y
1179         help
1180           Warning: disabling this option may break 32-bit user programs.
1181
1182           Provide kuser helpers to compat tasks. The kernel provides
1183           helper code to userspace in read only form at a fixed location
1184           to allow userspace to be independent of the CPU type fitted to
1185           the system. This permits binaries to be run on ARMv4 through
1186           to ARMv8 without modification.
1187
1188           See Documentation/arm/kernel_user_helpers.rst for details.
1189
1190           However, the fixed address nature of these helpers can be used
1191           by ROP (return orientated programming) authors when creating
1192           exploits.
1193
1194           If all of the binaries and libraries which run on your platform
1195           are built specifically for your platform, and make no use of
1196           these helpers, then you can turn this option off to hinder
1197           such exploits. However, in that case, if a binary or library
1198           relying on those helpers is run, it will not function correctly.
1199
1200           Say N here only if you are absolutely certain that you do not
1201           need these helpers; otherwise, the safe option is to say Y.
1202
1203 config COMPAT_VDSO
1204         bool "Enable vDSO for 32-bit applications"
1205         depends on !CPU_BIG_ENDIAN && "$(CROSS_COMPILE_COMPAT)" != ""
1206         select GENERIC_COMPAT_VDSO
1207         default y
1208         help
1209           Place in the process address space of 32-bit applications an
1210           ELF shared object providing fast implementations of gettimeofday
1211           and clock_gettime.
1212
1213           You must have a 32-bit build of glibc 2.22 or later for programs
1214           to seamlessly take advantage of this.
1215
1216 menuconfig ARMV8_DEPRECATED
1217         bool "Emulate deprecated/obsolete ARMv8 instructions"
1218         depends on SYSCTL
1219         help
1220           Legacy software support may require certain instructions
1221           that have been deprecated or obsoleted in the architecture.
1222
1223           Enable this config to enable selective emulation of these
1224           features.
1225
1226           If unsure, say Y
1227
1228 if ARMV8_DEPRECATED
1229
1230 config SWP_EMULATION
1231         bool "Emulate SWP/SWPB instructions"
1232         help
1233           ARMv8 obsoletes the use of A32 SWP/SWPB instructions such that
1234           they are always undefined. Say Y here to enable software
1235           emulation of these instructions for userspace using LDXR/STXR.
1236
1237           In some older versions of glibc [<=2.8] SWP is used during futex
1238           trylock() operations with the assumption that the code will not
1239           be preempted. This invalid assumption may be more likely to fail
1240           with SWP emulation enabled, leading to deadlock of the user
1241           application.
1242
1243           NOTE: when accessing uncached shared regions, LDXR/STXR rely
1244           on an external transaction monitoring block called a global
1245           monitor to maintain update atomicity. If your system does not
1246           implement a global monitor, this option can cause programs that
1247           perform SWP operations to uncached memory to deadlock.
1248
1249           If unsure, say Y
1250
1251 config CP15_BARRIER_EMULATION
1252         bool "Emulate CP15 Barrier instructions"
1253         help
1254           The CP15 barrier instructions - CP15ISB, CP15DSB, and
1255           CP15DMB - are deprecated in ARMv8 (and ARMv7). It is
1256           strongly recommended to use the ISB, DSB, and DMB
1257           instructions instead.
1258
1259           Say Y here to enable software emulation of these
1260           instructions for AArch32 userspace code. When this option is
1261           enabled, CP15 barrier usage is traced which can help
1262           identify software that needs updating.
1263
1264           If unsure, say Y
1265
1266 config SETEND_EMULATION
1267         bool "Emulate SETEND instruction"
1268         help
1269           The SETEND instruction alters the data-endianness of the
1270           AArch32 EL0, and is deprecated in ARMv8.
1271
1272           Say Y here to enable software emulation of the instruction
1273           for AArch32 userspace code.
1274
1275           Note: All the cpus on the system must have mixed endian support at EL0
1276           for this feature to be enabled. If a new CPU - which doesn't support mixed
1277           endian - is hotplugged in after this feature has been enabled, there could
1278           be unexpected results in the applications.
1279
1280           If unsure, say Y
1281 endif
1282
1283 endif
1284
1285 menu "ARMv8.1 architectural features"
1286
1287 config ARM64_HW_AFDBM
1288         bool "Support for hardware updates of the Access and Dirty page flags"
1289         default y
1290         help
1291           The ARMv8.1 architecture extensions introduce support for
1292           hardware updates of the access and dirty information in page
1293           table entries. When enabled in TCR_EL1 (HA and HD bits) on
1294           capable processors, accesses to pages with PTE_AF cleared will
1295           set this bit instead of raising an access flag fault.
1296           Similarly, writes to read-only pages with the DBM bit set will
1297           clear the read-only bit (AP[2]) instead of raising a
1298           permission fault.
1299
1300           Kernels built with this configuration option enabled continue
1301           to work on pre-ARMv8.1 hardware and the performance impact is
1302           minimal. If unsure, say Y.
1303
1304 config ARM64_PAN
1305         bool "Enable support for Privileged Access Never (PAN)"
1306         default y
1307         help
1308          Privileged Access Never (PAN; part of the ARMv8.1 Extensions)
1309          prevents the kernel or hypervisor from accessing user-space (EL0)
1310          memory directly.
1311
1312          Choosing this option will cause any unprotected (not using
1313          copy_to_user et al) memory access to fail with a permission fault.
1314
1315          The feature is detected at runtime, and will remain as a 'nop'
1316          instruction if the cpu does not implement the feature.
1317
1318 config ARM64_LSE_ATOMICS
1319         bool "Atomic instructions"
1320         depends on JUMP_LABEL
1321         default y
1322         help
1323           As part of the Large System Extensions, ARMv8.1 introduces new
1324           atomic instructions that are designed specifically to scale in
1325           very large systems.
1326
1327           Say Y here to make use of these instructions for the in-kernel
1328           atomic routines. This incurs a small overhead on CPUs that do
1329           not support these instructions and requires the kernel to be
1330           built with binutils >= 2.25 in order for the new instructions
1331           to be used.
1332
1333 config ARM64_VHE
1334         bool "Enable support for Virtualization Host Extensions (VHE)"
1335         default y
1336         help
1337           Virtualization Host Extensions (VHE) allow the kernel to run
1338           directly at EL2 (instead of EL1) on processors that support
1339           it. This leads to better performance for KVM, as they reduce
1340           the cost of the world switch.
1341
1342           Selecting this option allows the VHE feature to be detected
1343           at runtime, and does not affect processors that do not
1344           implement this feature.
1345
1346 endmenu
1347
1348 menu "ARMv8.2 architectural features"
1349
1350 config ARM64_UAO
1351         bool "Enable support for User Access Override (UAO)"
1352         default y
1353         help
1354           User Access Override (UAO; part of the ARMv8.2 Extensions)
1355           causes the 'unprivileged' variant of the load/store instructions to
1356           be overridden to be privileged.
1357
1358           This option changes get_user() and friends to use the 'unprivileged'
1359           variant of the load/store instructions. This ensures that user-space
1360           really did have access to the supplied memory. When addr_limit is
1361           set to kernel memory the UAO bit will be set, allowing privileged
1362           access to kernel memory.
1363
1364           Choosing this option will cause copy_to_user() et al to use user-space
1365           memory permissions.
1366
1367           The feature is detected at runtime, the kernel will use the
1368           regular load/store instructions if the cpu does not implement the
1369           feature.
1370
1371 config ARM64_PMEM
1372         bool "Enable support for persistent memory"
1373         select ARCH_HAS_PMEM_API
1374         select ARCH_HAS_UACCESS_FLUSHCACHE
1375         help
1376           Say Y to enable support for the persistent memory API based on the
1377           ARMv8.2 DCPoP feature.
1378
1379           The feature is detected at runtime, and the kernel will use DC CVAC
1380           operations if DC CVAP is not supported (following the behaviour of
1381           DC CVAP itself if the system does not define a point of persistence).
1382
1383 config ARM64_RAS_EXTN
1384         bool "Enable support for RAS CPU Extensions"
1385         default y
1386         help
1387           CPUs that support the Reliability, Availability and Serviceability
1388           (RAS) Extensions, part of ARMv8.2 are able to track faults and
1389           errors, classify them and report them to software.
1390
1391           On CPUs with these extensions system software can use additional
1392           barriers to determine if faults are pending and read the
1393           classification from a new set of registers.
1394
1395           Selecting this feature will allow the kernel to use these barriers
1396           and access the new registers if the system supports the extension.
1397           Platform RAS features may additionally depend on firmware support.
1398
1399 config ARM64_CNP
1400         bool "Enable support for Common Not Private (CNP) translations"
1401         default y
1402         depends on ARM64_PAN || !ARM64_SW_TTBR0_PAN
1403         help
1404           Common Not Private (CNP) allows translation table entries to
1405           be shared between different PEs in the same inner shareable
1406           domain, so the hardware can use this fact to optimise the
1407           caching of such entries in the TLB.
1408
1409           Selecting this option allows the CNP feature to be detected
1410           at runtime, and does not affect PEs that do not implement
1411           this feature.
1412
1413 endmenu
1414
1415 menu "ARMv8.3 architectural features"
1416
1417 config ARM64_PTR_AUTH
1418         bool "Enable support for pointer authentication"
1419         default y
1420         depends on !KVM || ARM64_VHE
1421         help
1422           Pointer authentication (part of the ARMv8.3 Extensions) provides
1423           instructions for signing and authenticating pointers against secret
1424           keys, which can be used to mitigate Return Oriented Programming (ROP)
1425           and other attacks.
1426
1427           This option enables these instructions at EL0 (i.e. for userspace).
1428
1429           Choosing this option will cause the kernel to initialise secret keys
1430           for each process at exec() time, with these keys being
1431           context-switched along with the process.
1432
1433           The feature is detected at runtime. If the feature is not present in
1434           hardware it will not be advertised to userspace/KVM guest nor will it
1435           be enabled. However, KVM guest also require VHE mode and hence
1436           CONFIG_ARM64_VHE=y option to use this feature.
1437
1438 endmenu
1439
1440 config ARM64_SVE
1441         bool "ARM Scalable Vector Extension support"
1442         default y
1443         depends on !KVM || ARM64_VHE
1444         help
1445           The Scalable Vector Extension (SVE) is an extension to the AArch64
1446           execution state which complements and extends the SIMD functionality
1447           of the base architecture to support much larger vectors and to enable
1448           additional vectorisation opportunities.
1449
1450           To enable use of this extension on CPUs that implement it, say Y.
1451
1452           On CPUs that support the SVE2 extensions, this option will enable
1453           those too.
1454
1455           Note that for architectural reasons, firmware _must_ implement SVE
1456           support when running on SVE capable hardware.  The required support
1457           is present in:
1458
1459             * version 1.5 and later of the ARM Trusted Firmware
1460             * the AArch64 boot wrapper since commit 5e1261e08abf
1461               ("bootwrapper: SVE: Enable SVE for EL2 and below").
1462
1463           For other firmware implementations, consult the firmware documentation
1464           or vendor.
1465
1466           If you need the kernel to boot on SVE-capable hardware with broken
1467           firmware, you may need to say N here until you get your firmware
1468           fixed.  Otherwise, you may experience firmware panics or lockups when
1469           booting the kernel.  If unsure and you are not observing these
1470           symptoms, you should assume that it is safe to say Y.
1471
1472           CPUs that support SVE are architecturally required to support the
1473           Virtualization Host Extensions (VHE), so the kernel makes no
1474           provision for supporting SVE alongside KVM without VHE enabled.
1475           Thus, you will need to enable CONFIG_ARM64_VHE if you want to support
1476           KVM in the same kernel image.
1477
1478 config ARM64_MODULE_PLTS
1479         bool "Use PLTs to allow module memory to spill over into vmalloc area"
1480         depends on MODULES
1481         select HAVE_MOD_ARCH_SPECIFIC
1482         help
1483           Allocate PLTs when loading modules so that jumps and calls whose
1484           targets are too far away for their relative offsets to be encoded
1485           in the instructions themselves can be bounced via veneers in the
1486           module's PLT. This allows modules to be allocated in the generic
1487           vmalloc area after the dedicated module memory area has been
1488           exhausted.
1489
1490           When running with address space randomization (KASLR), the module
1491           region itself may be too far away for ordinary relative jumps and
1492           calls, and so in that case, module PLTs are required and cannot be
1493           disabled.
1494
1495           Specific errata workaround(s) might also force module PLTs to be
1496           enabled (ARM64_ERRATUM_843419).
1497
1498 config ARM64_PSEUDO_NMI
1499         bool "Support for NMI-like interrupts"
1500         select CONFIG_ARM_GIC_V3
1501         help
1502           Adds support for mimicking Non-Maskable Interrupts through the use of
1503           GIC interrupt priority. This support requires version 3 or later of
1504           ARM GIC.
1505
1506           This high priority configuration for interrupts needs to be
1507           explicitly enabled by setting the kernel parameter
1508           "irqchip.gicv3_pseudo_nmi" to 1.
1509
1510           If unsure, say N
1511
1512 if ARM64_PSEUDO_NMI
1513 config ARM64_DEBUG_PRIORITY_MASKING
1514         bool "Debug interrupt priority masking"
1515         help
1516           This adds runtime checks to functions enabling/disabling
1517           interrupts when using priority masking. The additional checks verify
1518           the validity of ICC_PMR_EL1 when calling concerned functions.
1519
1520           If unsure, say N
1521 endif
1522
1523 config RELOCATABLE
1524         bool
1525         select ARCH_HAS_RELR
1526         help
1527           This builds the kernel as a Position Independent Executable (PIE),
1528           which retains all relocation metadata required to relocate the
1529           kernel binary at runtime to a different virtual address than the
1530           address it was linked at.
1531           Since AArch64 uses the RELA relocation format, this requires a
1532           relocation pass at runtime even if the kernel is loaded at the
1533           same address it was linked at.
1534
1535 config RANDOMIZE_BASE
1536         bool "Randomize the address of the kernel image"
1537         select ARM64_MODULE_PLTS if MODULES
1538         select RELOCATABLE
1539         help
1540           Randomizes the virtual address at which the kernel image is
1541           loaded, as a security feature that deters exploit attempts
1542           relying on knowledge of the location of kernel internals.
1543
1544           It is the bootloader's job to provide entropy, by passing a
1545           random u64 value in /chosen/kaslr-seed at kernel entry.
1546
1547           When booting via the UEFI stub, it will invoke the firmware's
1548           EFI_RNG_PROTOCOL implementation (if available) to supply entropy
1549           to the kernel proper. In addition, it will randomise the physical
1550           location of the kernel Image as well.
1551
1552           If unsure, say N.
1553
1554 config RANDOMIZE_MODULE_REGION_FULL
1555         bool "Randomize the module region over a 4 GB range"
1556         depends on RANDOMIZE_BASE
1557         default y
1558         help
1559           Randomizes the location of the module region inside a 4 GB window
1560           covering the core kernel. This way, it is less likely for modules
1561           to leak information about the location of core kernel data structures
1562           but it does imply that function calls between modules and the core
1563           kernel will need to be resolved via veneers in the module PLT.
1564
1565           When this option is not set, the module region will be randomized over
1566           a limited range that contains the [_stext, _etext] interval of the
1567           core kernel, so branch relocations are always in range.
1568
1569 config CC_HAVE_STACKPROTECTOR_SYSREG
1570         def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0)
1571
1572 config STACKPROTECTOR_PER_TASK
1573         def_bool y
1574         depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_SYSREG
1575
1576 endmenu
1577
1578 menu "Boot options"
1579
1580 config ARM64_ACPI_PARKING_PROTOCOL
1581         bool "Enable support for the ARM64 ACPI parking protocol"
1582         depends on ACPI
1583         help
1584           Enable support for the ARM64 ACPI parking protocol. If disabled
1585           the kernel will not allow booting through the ARM64 ACPI parking
1586           protocol even if the corresponding data is present in the ACPI
1587           MADT table.
1588
1589 config CMDLINE
1590         string "Default kernel command string"
1591         default ""
1592         help
1593           Provide a set of default command-line options at build time by
1594           entering them here. As a minimum, you should specify the the
1595           root device (e.g. root=/dev/nfs).
1596
1597 config CMDLINE_FORCE
1598         bool "Always use the default kernel command string"
1599         help
1600           Always use the default kernel command string, even if the boot
1601           loader passes other arguments to the kernel.
1602           This is useful if you cannot or don't want to change the
1603           command-line options your boot loader passes to the kernel.
1604
1605 config EFI_STUB
1606         bool
1607
1608 config EFI
1609         bool "UEFI runtime support"
1610         depends on OF && !CPU_BIG_ENDIAN
1611         depends on KERNEL_MODE_NEON
1612         select ARCH_SUPPORTS_ACPI
1613         select LIBFDT
1614         select UCS2_STRING
1615         select EFI_PARAMS_FROM_FDT
1616         select EFI_RUNTIME_WRAPPERS
1617         select EFI_STUB
1618         select EFI_ARMSTUB
1619         default y
1620         help
1621           This option provides support for runtime services provided
1622           by UEFI firmware (such as non-volatile variables, realtime
1623           clock, and platform reset). A UEFI stub is also provided to
1624           allow the kernel to be booted as an EFI application. This
1625           is only useful on systems that have UEFI firmware.
1626
1627 config DMI
1628         bool "Enable support for SMBIOS (DMI) tables"
1629         depends on EFI
1630         default y
1631         help
1632           This enables SMBIOS/DMI feature for systems.
1633
1634           This option is only useful on systems that have UEFI firmware.
1635           However, even with this option, the resultant kernel should
1636           continue to boot on existing non-UEFI platforms.
1637
1638 endmenu
1639
1640 config SYSVIPC_COMPAT
1641         def_bool y
1642         depends on COMPAT && SYSVIPC
1643
1644 config ARCH_ENABLE_HUGEPAGE_MIGRATION
1645         def_bool y
1646         depends on HUGETLB_PAGE && MIGRATION
1647
1648 menu "Power management options"
1649
1650 source "kernel/power/Kconfig"
1651
1652 config ARCH_HIBERNATION_POSSIBLE
1653         def_bool y
1654         depends on CPU_PM
1655
1656 config ARCH_HIBERNATION_HEADER
1657         def_bool y
1658         depends on HIBERNATION
1659
1660 config ARCH_SUSPEND_POSSIBLE
1661         def_bool y
1662
1663 endmenu
1664
1665 menu "CPU Power Management"
1666
1667 source "drivers/cpuidle/Kconfig"
1668
1669 source "drivers/cpufreq/Kconfig"
1670
1671 endmenu
1672
1673 source "drivers/firmware/Kconfig"
1674
1675 source "drivers/acpi/Kconfig"
1676
1677 source "arch/arm64/kvm/Kconfig"
1678
1679 if CRYPTO
1680 source "arch/arm64/crypto/Kconfig"
1681 endif