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