1# SPDX-License-Identifier: GPL-2.0-only 2config ARM64 3 def_bool y 4 select ACPI_APMT if ACPI 5 select ACPI_CCA_REQUIRED if ACPI 6 select ACPI_GENERIC_GSI if ACPI 7 select ACPI_GTDT if ACPI 8 select ACPI_HOTPLUG_CPU if ACPI_PROCESSOR && HOTPLUG_CPU 9 select ACPI_IORT if ACPI 10 select ACPI_REDUCED_HARDWARE_ONLY if ACPI 11 select ACPI_MCFG if (ACPI && PCI) 12 select ACPI_SPCR_TABLE if ACPI 13 select ACPI_PPTT if ACPI 14 select ARCH_HAS_DEBUG_WX 15 select ARCH_BINFMT_ELF_EXTRA_PHDRS 16 select ARCH_BINFMT_ELF_STATE 17 select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION 18 select ARCH_ENABLE_MEMORY_HOTPLUG 19 select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2 20 select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE 21 select ARCH_HAS_CACHE_LINE_SIZE 22 select ARCH_HAS_CC_PLATFORM 23 select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION 24 select ARCH_HAS_CURRENT_STACK_POINTER 25 select ARCH_HAS_DEBUG_VIRTUAL 26 select ARCH_HAS_DEBUG_VM_PGTABLE 27 select ARCH_HAS_DMA_OPS if XEN 28 select ARCH_HAS_DMA_PREP_COHERENT 29 select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI 30 select ARCH_HAS_FAST_MULTIPLIER 31 select ARCH_HAS_FORTIFY_SOURCE 32 select ARCH_HAS_GCOV_PROFILE_ALL 33 select ARCH_HAS_GIGANTIC_PAGE 34 select ARCH_HAS_KCOV 35 select ARCH_HAS_KERNEL_FPU_SUPPORT if KERNEL_MODE_NEON 36 select ARCH_HAS_KEEPINITRD 37 select ARCH_HAS_LAZY_MMU_MODE 38 select ARCH_HAS_MEMBARRIER_SYNC_CORE 39 select ARCH_HAS_MEM_ENCRYPT 40 select ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS 41 select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS 42 select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE 43 select ARCH_HAS_NONLEAF_PMD_YOUNG if ARM64_HAFT 44 select ARCH_HAS_PREEMPT_LAZY 45 select ARCH_HAS_PTDUMP 46 select ARCH_HAS_PTE_SPECIAL 47 select ARCH_HAS_HW_PTE_YOUNG 48 select ARCH_HAS_SETUP_DMA_OPS 49 select ARCH_HAS_SET_DIRECT_MAP 50 select ARCH_HAS_SET_MEMORY 51 select ARCH_HAS_FORCE_DMA_UNENCRYPTED 52 select ARCH_STACKWALK 53 select ARCH_HAS_STRICT_KERNEL_RWX 54 select ARCH_HAS_STRICT_MODULE_RWX 55 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 56 select ARCH_HAS_SYNC_DMA_FOR_CPU 57 select ARCH_HAS_BATCHED_DMA_SYNC 58 select ARCH_HAS_SYSCALL_WRAPPER 59 select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST 60 select ARCH_HAS_ZONE_DMA_SET if EXPERT 61 select ARCH_HAVE_ELF_PROT 62 select ARCH_HAVE_NMI_SAFE_CMPXCHG 63 select ARCH_HAVE_TRACE_MMIO_ACCESS 64 select ARCH_KEEP_MEMBLOCK 65 select ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE 66 select ARCH_USE_CMPXCHG_LOCKREF 67 select ARCH_USE_GNU_PROPERTY 68 select ARCH_USE_MEMTEST 69 select ARCH_USE_QUEUED_RWLOCKS 70 select ARCH_USE_QUEUED_SPINLOCKS 71 select ARCH_USE_SYM_ANNOTATIONS 72 select ARCH_SUPPORTS_DEBUG_PAGEALLOC 73 select ARCH_SUPPORTS_HUGETLBFS 74 select ARCH_SUPPORTS_MEMORY_FAILURE 75 select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK 76 select ARCH_SUPPORTS_LTO_CLANG if CPU_LITTLE_ENDIAN 77 select ARCH_SUPPORTS_LTO_CLANG_THIN 78 select ARCH_SUPPORTS_CFI 79 select ARCH_SUPPORTS_ATOMIC_RMW 80 select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 81 select ARCH_HAS_PTE_PROTNONE 82 select ARCH_SUPPORTS_NUMA_BALANCING 83 select ARCH_SUPPORTS_PAGE_TABLE_CHECK 84 select ARCH_SUPPORTS_HUGE_PFNMAP if TRANSPARENT_HUGEPAGE 85 select ARCH_SUPPORTS_RT 86 select ARCH_SUPPORTS_SCHED_SMT 87 select ARCH_SUPPORTS_SCHED_CLUSTER 88 select ARCH_SUPPORTS_SCHED_MC 89 select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH 90 select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT 91 select ARCH_WANT_DEFAULT_BPF_JIT 92 select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT 93 select ARCH_WANT_FRAME_POINTERS 94 select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36) 95 select ARCH_WANT_LD_ORPHAN_WARN 96 select ARCH_WANTS_EXECMEM_LATE 97 select ARCH_WANTS_NO_INSTR 98 select ARCH_WANTS_THP_SWAP if ARM64_4K_PAGES 99 select ARCH_HAS_UBSAN 100 select ARM_AMBA 101 select ARM_ARCH_TIMER 102 select ARM_GIC 103 select AUDIT_ARCH_COMPAT_GENERIC 104 select ARM_GIC_V2M if PCI 105 select ARM_GIC_V3 106 select ARM_GIC_V3_ITS if PCI 107 select ARM_GIC_V5 108 select ARM_PSCI_FW 109 select BUILDTIME_TABLE_SORT 110 select CLONE_BACKWARDS 111 select COMMON_CLK 112 select CPU_PM if (SUSPEND || CPU_IDLE) 113 select CPUMASK_OFFSTACK if NR_CPUS > 256 114 select DCACHE_WORD_ACCESS 115 select HAVE_EXTRA_IPI_TRACEPOINTS 116 select DYNAMIC_FTRACE if FUNCTION_TRACER 117 select DMA_BOUNCE_UNALIGNED_KMALLOC 118 select DMA_DIRECT_REMAP 119 select EDAC_SUPPORT 120 select FRAME_POINTER 121 select FUNCTION_ALIGNMENT_4B 122 select FUNCTION_ALIGNMENT_8B if DYNAMIC_FTRACE_WITH_CALL_OPS 123 select GENERIC_ALLOCATOR 124 select GENERIC_ARCH_TOPOLOGY 125 select GENERIC_CLOCKEVENTS_BROADCAST 126 select GENERIC_CPU_AUTOPROBE 127 select GENERIC_CPU_CACHE_MAINTENANCE 128 select GENERIC_CPU_DEVICES 129 select GENERIC_CPU_VULNERABILITIES 130 select GENERIC_EARLY_IOREMAP 131 select GENERIC_IDLE_POLL_SETUP 132 select GENERIC_IOREMAP 133 select GENERIC_IRQ_ENTRY 134 select GENERIC_IRQ_IPI 135 select GENERIC_IRQ_KEXEC_CLEAR_VM_FORWARD 136 select GENERIC_IRQ_PROBE 137 select GENERIC_IRQ_SHOW 138 select GENERIC_IRQ_SHOW_LEVEL 139 select GENERIC_LIB_DEVMEM_IS_ALLOWED 140 select GENERIC_PCI_IOMAP 141 select GENERIC_SCHED_CLOCK 142 select GENERIC_SMP_IDLE_THREAD 143 select GENERIC_GETTIMEOFDAY 144 select HARDIRQS_SW_RESEND 145 select HAS_IOPORT 146 select HAVE_MOVE_PMD 147 select HAVE_MOVE_PUD 148 select HAVE_PCI 149 select HAVE_ACPI_APEI if (ACPI && EFI) 150 select HAVE_ALIGNED_STRUCT_PAGE 151 select HAVE_ARCH_AUDITSYSCALL 152 select HAVE_ARCH_BITREVERSE if BITREVERSE 153 select HAVE_ARCH_COMPILER_H 154 select HAVE_ARCH_HUGE_VMALLOC 155 select HAVE_ARCH_HUGE_VMAP 156 select HAVE_ARCH_JUMP_LABEL 157 select HAVE_ARCH_JUMP_LABEL_RELATIVE 158 select HAVE_ARCH_KASAN 159 select HAVE_ARCH_KASAN_VMALLOC 160 select HAVE_ARCH_KASAN_SW_TAGS 161 select HAVE_ARCH_KASAN_HW_TAGS if ARM64_MTE 162 # Some instrumentation may be unsound, hence EXPERT 163 select HAVE_ARCH_KCSAN if EXPERT 164 select HAVE_ARCH_KFENCE 165 select HAVE_ARCH_KGDB 166 select HAVE_ARCH_KSTACK_ERASE 167 select HAVE_ARCH_MMAP_RND_BITS 168 select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT 169 select HAVE_ARCH_PREL32_RELOCATIONS 170 select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET 171 select HAVE_ARCH_SECCOMP_FILTER 172 select HAVE_ARCH_THREAD_STRUCT_WHITELIST 173 select HAVE_ARCH_TRACEHOOK 174 select HAVE_ARCH_TRANSPARENT_HUGEPAGE 175 select HAVE_ARCH_VMAP_STACK 176 select HAVE_ARM_SMCCC 177 select HAVE_ASM_MODVERSIONS 178 select HAVE_EBPF_JIT 179 select HAVE_C_RECORDMCOUNT 180 select HAVE_CMPXCHG_DOUBLE 181 select HAVE_CMPXCHG_LOCAL 182 select HAVE_CONTEXT_TRACKING_USER 183 select HAVE_DEBUG_KMEMLEAK 184 select HAVE_DMA_CONTIGUOUS 185 select HAVE_DYNAMIC_FTRACE 186 select HAVE_DYNAMIC_FTRACE_WITH_ARGS \ 187 if (GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS || \ 188 CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS) 189 select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS \ 190 if DYNAMIC_FTRACE_WITH_ARGS 191 select HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS \ 192 if (DYNAMIC_FTRACE_WITH_ARGS && !CFI && \ 193 (CC_IS_CLANG || !CC_OPTIMIZE_FOR_SIZE)) 194 select FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY \ 195 if DYNAMIC_FTRACE_WITH_ARGS 196 select HAVE_SAMPLE_FTRACE_DIRECT 197 select HAVE_SAMPLE_FTRACE_DIRECT_MULTI 198 select HAVE_BUILDTIME_MCOUNT_SORT 199 select HAVE_EFFICIENT_UNALIGNED_ACCESS 200 select HAVE_GUP_FAST 201 select HAVE_FTRACE_GRAPH_FUNC 202 select HAVE_FUNCTION_TRACER 203 select HAVE_FUNCTION_ERROR_INJECTION 204 select HAVE_FUNCTION_GRAPH_FREGS 205 select HAVE_FUNCTION_GRAPH_TRACER 206 select HAVE_GCC_PLUGINS 207 select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && \ 208 HW_PERF_EVENTS && HAVE_PERF_EVENTS_NMI 209 select HAVE_HW_BREAKPOINT if PERF_EVENTS 210 select HAVE_IOREMAP_PROT 211 select HAVE_IRQ_TIME_ACCOUNTING 212 select HAVE_LIVEPATCH 213 select HAVE_MOD_ARCH_SPECIFIC 214 select HAVE_NMI 215 select HAVE_PERF_EVENTS 216 select HAVE_PERF_EVENTS_NMI if ARM64_PSEUDO_NMI 217 select HAVE_PERF_REGS 218 select HAVE_PERF_USER_STACK_DUMP 219 select HAVE_PREEMPT_DYNAMIC_KEY 220 select HAVE_REGS_AND_STACK_ACCESS_API 221 select HAVE_RELIABLE_STACKTRACE 222 select HAVE_POSIX_CPU_TIMERS_TASK_WORK 223 select HAVE_FUNCTION_ARG_ACCESS_API 224 select HAVE_RSEQ 225 select HAVE_RUST if RUSTC_SUPPORTS_ARM64 226 select HAVE_STACKPROTECTOR 227 select HAVE_STATIC_CALL if CFI 228 select HAVE_SYSCALL_TRACEPOINTS 229 select HAVE_KPROBES 230 select HAVE_KRETPROBES 231 select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU 232 select HOTPLUG_SMT if HOTPLUG_CPU 233 select IRQ_DOMAIN 234 select IRQ_FORCED_THREADING 235 select JUMP_LABEL 236 select KASAN_VMALLOC if KASAN 237 select LOCK_MM_AND_FIND_VMA 238 select MODULES_USE_ELF_RELA 239 select NEED_DMA_MAP_STATE 240 select NEED_SG_DMA_LENGTH 241 select OF 242 select OF_EARLY_FLATTREE 243 select PCI_DOMAINS_GENERIC if PCI 244 select PCI_ECAM if (ACPI && PCI) 245 select PCI_SYSCALL if PCI 246 select POWER_RESET 247 select POWER_SUPPLY 248 select HAS_SEPARATE_PREEMPT_RESCHED_BITS 249 select SPARSE_IRQ 250 select SWIOTLB 251 select SYSCTL_EXCEPTION_TRACE 252 select THREAD_INFO_IN_TASK 253 select HAVE_ARCH_USERFAULTFD_MINOR if USERFAULTFD 254 select HAVE_ARCH_USERFAULTFD_WP if USERFAULTFD 255 select TRACE_IRQFLAGS_SUPPORT 256 select TRACE_IRQFLAGS_NMI_SUPPORT 257 select HAVE_SOFTIRQ_ON_OWN_STACK 258 select USER_STACKTRACE_SUPPORT 259 select VDSO_GETRANDOM 260 select VMAP_STACK 261 help 262 ARM 64-bit (AArch64) Linux support. 263 264config RUSTC_SUPPORTS_ARM64 265 def_bool y 266 depends on CPU_LITTLE_ENDIAN 267 268config CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS 269 def_bool CC_IS_CLANG 270 # https://github.com/ClangBuiltLinux/linux/issues/1507 271 depends on AS_IS_GNU || (AS_IS_LLVM && (LD_IS_LLD || LD_VERSION >= 23600)) 272 273config GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS 274 def_bool CC_IS_GCC 275 depends on $(cc-option,-fpatchable-function-entry=2) 276 277config 64BIT 278 def_bool y 279 280config MMU 281 def_bool y 282 283config ARM64_CONT_PTE_SHIFT 284 int 285 default 5 if PAGE_SIZE_64KB 286 default 7 if PAGE_SIZE_16KB 287 default 4 288 289config ARM64_CONT_PMD_SHIFT 290 int 291 default 5 if PAGE_SIZE_64KB 292 default 5 if PAGE_SIZE_16KB 293 default 4 294 295config ARCH_MMAP_RND_BITS_MIN 296 default 14 if PAGE_SIZE_64KB 297 default 16 if PAGE_SIZE_16KB 298 default 18 299 300# max bits determined by the following formula: 301# VA_BITS - PTDESC_TABLE_SHIFT 302config ARCH_MMAP_RND_BITS_MAX 303 default 19 if ARM64_VA_BITS=36 304 default 24 if ARM64_VA_BITS=39 305 default 27 if ARM64_VA_BITS=42 306 default 30 if ARM64_VA_BITS=47 307 default 29 if (ARM64_VA_BITS=48 || ARM64_VA_BITS=52) && ARM64_64K_PAGES 308 default 31 if (ARM64_VA_BITS=48 || ARM64_VA_BITS=52) && ARM64_16K_PAGES 309 default 33 if (ARM64_VA_BITS=48 || ARM64_VA_BITS=52) 310 default 14 if ARM64_64K_PAGES 311 default 16 if ARM64_16K_PAGES 312 default 18 313 314config ARCH_MMAP_RND_COMPAT_BITS_MIN 315 default 7 if ARM64_64K_PAGES 316 default 9 if ARM64_16K_PAGES 317 default 11 318 319config ARCH_MMAP_RND_COMPAT_BITS_MAX 320 default 16 321 322config NO_IOPORT_MAP 323 def_bool y if !PCI 324 325config STACKTRACE_SUPPORT 326 def_bool y 327 328config ILLEGAL_POINTER_VALUE 329 hex 330 default 0xdead000000000000 331 332config LOCKDEP_SUPPORT 333 def_bool y 334 335config GENERIC_BUG 336 def_bool y 337 depends on BUG 338 339config GENERIC_BUG_RELATIVE_POINTERS 340 def_bool y 341 depends on GENERIC_BUG 342 343config GENERIC_HWEIGHT 344 def_bool y 345 346config GENERIC_CSUM 347 def_bool y 348 349config GENERIC_CALIBRATE_DELAY 350 def_bool y 351 352config SMP 353 def_bool y 354 355config KERNEL_MODE_NEON 356 def_bool y 357 358config FIX_EARLYCON_MEM 359 def_bool y 360 361config PGTABLE_LEVELS 362 int 363 default 2 if ARM64_16K_PAGES && ARM64_VA_BITS_36 364 default 2 if ARM64_64K_PAGES && ARM64_VA_BITS_42 365 default 3 if ARM64_64K_PAGES && (ARM64_VA_BITS_48 || ARM64_VA_BITS_52) 366 default 3 if ARM64_4K_PAGES && ARM64_VA_BITS_39 367 default 3 if ARM64_16K_PAGES && ARM64_VA_BITS_47 368 default 4 if ARM64_16K_PAGES && (ARM64_VA_BITS_48 || ARM64_VA_BITS_52) 369 default 4 if !ARM64_64K_PAGES && ARM64_VA_BITS_48 370 default 5 if ARM64_4K_PAGES && ARM64_VA_BITS_52 371 372config ARCH_SUPPORTS_UPROBES 373 def_bool y 374 375config ARCH_PROC_KCORE_TEXT 376 def_bool y 377 378config BROKEN_GAS_INST 379 def_bool !$(as-instr,1:\n.inst 0\n.rept . - 1b\n\nnop\n.endr\n) 380 381config BUILTIN_RETURN_ADDRESS_STRIPS_PAC 382 bool 383 # Clang's __builtin_return_address() strips the PAC since 12.0.0 384 # https://github.com/llvm/llvm-project/commit/2a96f47c5ffca84cd774ad402cacd137f4bf45e2 385 default y if CC_IS_CLANG 386 # GCC's __builtin_return_address() strips the PAC since 11.1.0, 387 # and this was backported to 10.2.0, 9.4.0, 8.5.0, but not earlier 388 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94891 389 default y if CC_IS_GCC && (GCC_VERSION >= 110100) 390 default y if CC_IS_GCC && (GCC_VERSION >= 100200) && (GCC_VERSION < 110000) 391 default y if CC_IS_GCC && (GCC_VERSION >= 90400) && (GCC_VERSION < 100000) 392 default y if CC_IS_GCC && (GCC_VERSION >= 80500) && (GCC_VERSION < 90000) 393 default n 394 395config KASAN_SHADOW_OFFSET 396 hex 397 depends on KASAN_GENERIC || KASAN_SW_TAGS 398 default 0xdfff800000000000 if (ARM64_VA_BITS_48 || (ARM64_VA_BITS_52 && !ARM64_16K_PAGES)) && !KASAN_SW_TAGS 399 default 0xdfffc00000000000 if (ARM64_VA_BITS_47 || ARM64_VA_BITS_52) && ARM64_16K_PAGES && !KASAN_SW_TAGS 400 default 0xdffffe0000000000 if ARM64_VA_BITS_42 && !KASAN_SW_TAGS 401 default 0xdfffffc000000000 if ARM64_VA_BITS_39 && !KASAN_SW_TAGS 402 default 0xdffffff800000000 if ARM64_VA_BITS_36 && !KASAN_SW_TAGS 403 default 0xefff800000000000 if (ARM64_VA_BITS_48 || (ARM64_VA_BITS_52 && !ARM64_16K_PAGES)) && KASAN_SW_TAGS 404 default 0xefffc00000000000 if (ARM64_VA_BITS_47 || ARM64_VA_BITS_52) && ARM64_16K_PAGES && KASAN_SW_TAGS 405 default 0xeffffe0000000000 if ARM64_VA_BITS_42 && KASAN_SW_TAGS 406 default 0xefffffc000000000 if ARM64_VA_BITS_39 && KASAN_SW_TAGS 407 default 0xeffffff800000000 if ARM64_VA_BITS_36 && KASAN_SW_TAGS 408 default 0xffffffffffffffff 409 410config UNWIND_TABLES 411 bool 412 413source "arch/arm64/Kconfig.platforms" 414 415menu "Kernel Features" 416 417menu "ARM errata workarounds via the alternatives framework" 418 419config AMPERE_ERRATUM_AC03_CPU_38 420 bool "AmpereOne: AC03_CPU_38: Certain bits in the Virtualization Translation Control Register and Translation Control Registers do not follow RES0 semantics" 421 default y 422 help 423 This option adds an alternative code sequence to work around Ampere 424 errata AC03_CPU_38 and AC04_CPU_10 on AmpereOne. 425 426 The affected design reports FEAT_HAFDBS as not implemented in 427 ID_AA64MMFR1_EL1.HAFDBS, but (V)TCR_ELx.{HA,HD} are not RES0 428 as required by the architecture. The unadvertised HAFDBS 429 implementation suffers from an additional erratum where hardware 430 A/D updates can occur after a PTE has been marked invalid. 431 432 The workaround forces KVM to explicitly set VTCR_EL2.HA to 0, 433 which avoids enabling unadvertised hardware Access Flag management 434 at stage-2. 435 436 If unsure, say Y. 437 438config AMPERE_ERRATUM_AC04_CPU_23 439 bool "AmpereOne: AC04_CPU_23: Failure to synchronize writes to HCR_EL2 may corrupt address translations." 440 default y 441 help 442 This option adds an alternative code sequence to work around Ampere 443 errata AC04_CPU_23 on AmpereOne. 444 445 Updates to HCR_EL2 can rarely corrupt simultaneous translations for 446 data addresses initiated by load/store instructions. Only 447 instruction initiated translations are vulnerable, not translations 448 from prefetches for example. A DSB before the store to HCR_EL2 is 449 sufficient to prevent older instructions from hitting the window 450 for corruption, and an ISB after is sufficient to prevent younger 451 instructions from hitting the window for corruption. 452 453 If unsure, say Y. 454 455config ARM64_WORKAROUND_CLEAN_CACHE 456 bool 457 458config ARM64_ERRATUM_826319 459 bool "Cortex-A53: 826319: System might deadlock if a write cannot complete until read data is accepted" 460 default y 461 select ARM64_WORKAROUND_CLEAN_CACHE 462 help 463 This option adds an alternative code sequence to work around ARM 464 erratum 826319 on Cortex-A53 parts up to r0p2 with an AMBA 4 ACE or 465 AXI master interface and an L2 cache. 466 467 If a Cortex-A53 uses an AMBA AXI4 ACE interface to other processors 468 and is unable to accept a certain write via this interface, it will 469 not progress on read data presented on the read data channel and the 470 system can deadlock. 471 472 The workaround promotes data cache clean instructions to 473 data cache clean-and-invalidate. 474 Please note that this does not necessarily enable the workaround, 475 as it depends on the alternative framework, which will only patch 476 the kernel if an affected CPU is detected. 477 478 If unsure, say Y. 479 480config ARM64_ERRATUM_827319 481 bool "Cortex-A53: 827319: Data cache clean instructions might cause overlapping transactions to the interconnect" 482 default y 483 select ARM64_WORKAROUND_CLEAN_CACHE 484 help 485 This option adds an alternative code sequence to work around ARM 486 erratum 827319 on Cortex-A53 parts up to r0p2 with an AMBA 5 CHI 487 master interface and an L2 cache. 488 489 Under certain conditions this erratum can cause a clean line eviction 490 to occur at the same time as another transaction to the same address 491 on the AMBA 5 CHI interface, which can cause data corruption if the 492 interconnect reorders the two transactions. 493 494 The workaround promotes data cache clean instructions to 495 data cache clean-and-invalidate. 496 Please note that this does not necessarily enable the workaround, 497 as it depends on the alternative framework, which will only patch 498 the kernel if an affected CPU is detected. 499 500 If unsure, say Y. 501 502config ARM64_ERRATUM_824069 503 bool "Cortex-A53: 824069: Cache line might not be marked as clean after a CleanShared snoop" 504 default y 505 select ARM64_WORKAROUND_CLEAN_CACHE 506 help 507 This option adds an alternative code sequence to work around ARM 508 erratum 824069 on Cortex-A53 parts up to r0p2 when it is connected 509 to a coherent interconnect. 510 511 If a Cortex-A53 processor is executing a store or prefetch for 512 write instruction at the same time as a processor in another 513 cluster is executing a cache maintenance operation to the same 514 address, then this erratum might cause a clean cache line to be 515 incorrectly marked as dirty. 516 517 The workaround promotes data cache clean instructions to 518 data cache clean-and-invalidate. 519 Please note that this option does not necessarily enable the 520 workaround, as it depends on the alternative framework, which will 521 only patch the kernel if an affected CPU is detected. 522 523 If unsure, say Y. 524 525config ARM64_ERRATUM_819472 526 bool "Cortex-A53: 819472: Store exclusive instructions might cause data corruption" 527 default y 528 select ARM64_WORKAROUND_CLEAN_CACHE 529 help 530 This option adds an alternative code sequence to work around ARM 531 erratum 819472 on Cortex-A53 parts up to r0p1 with an L2 cache 532 present when it is connected to a coherent interconnect. 533 534 If the processor is executing a load and store exclusive sequence at 535 the same time as a processor in another cluster is executing a cache 536 maintenance operation to the same address, then this erratum might 537 cause data corruption. 538 539 The workaround promotes data cache clean instructions to 540 data cache clean-and-invalidate. 541 Please note that this does not necessarily enable the workaround, 542 as it depends on the alternative framework, which will only patch 543 the kernel if an affected CPU is detected. 544 545 If unsure, say Y. 546 547config ARM64_ERRATUM_832075 548 bool "Cortex-A57: 832075: possible deadlock on mixing exclusive memory accesses with device loads" 549 default y 550 help 551 This option adds an alternative code sequence to work around ARM 552 erratum 832075 on Cortex-A57 parts up to r1p2. 553 554 Affected Cortex-A57 parts might deadlock when exclusive load/store 555 instructions to Write-Back memory are mixed with Device loads. 556 557 The workaround is to promote device loads to use Load-Acquire 558 semantics. 559 Please note that this does not necessarily enable the workaround, 560 as it depends on the alternative framework, which will only patch 561 the kernel if an affected CPU is detected. 562 563 If unsure, say Y. 564 565config ARM64_ERRATUM_834220 566 bool "Cortex-A57: 834220: Stage 2 translation fault might be incorrectly reported in presence of a Stage 1 fault (rare)" 567 depends on KVM 568 help 569 This option adds an alternative code sequence to work around ARM 570 erratum 834220 on Cortex-A57 parts up to r1p2. 571 572 Affected Cortex-A57 parts might report a Stage 2 translation 573 fault as the result of a Stage 1 fault for load crossing a 574 page boundary when there is a permission or device memory 575 alignment fault at Stage 1 and a translation fault at Stage 2. 576 577 The workaround is to verify that the Stage 1 translation 578 doesn't generate a fault before handling the Stage 2 fault. 579 Please note that this does not necessarily enable the workaround, 580 as it depends on the alternative framework, which will only patch 581 the kernel if an affected CPU is detected. 582 583 If unsure, say N. 584 585config ARM64_ERRATUM_1742098 586 bool "Cortex-A57/A72: 1742098: ELR recorded incorrectly on interrupt taken between cryptographic instructions in a sequence" 587 depends on COMPAT 588 default y 589 help 590 This option removes the AES hwcap for aarch32 user-space to 591 workaround erratum 1742098 on Cortex-A57 and Cortex-A72. 592 593 Affected parts may corrupt the AES state if an interrupt is 594 taken between a pair of AES instructions. These instructions 595 are only present if the cryptography extensions are present. 596 All software should have a fallback implementation for CPUs 597 that don't implement the cryptography extensions. 598 599 If unsure, say Y. 600 601config ARM64_ERRATUM_845719 602 bool "Cortex-A53: 845719: a load might read incorrect data" 603 depends on COMPAT 604 default y 605 help 606 This option adds an alternative code sequence to work around ARM 607 erratum 845719 on Cortex-A53 parts up to r0p4. 608 609 When running a compat (AArch32) userspace on an affected Cortex-A53 610 part, a load at EL0 from a virtual address that matches the bottom 32 611 bits of the virtual address used by a recent load at (AArch64) EL1 612 might return incorrect data. 613 614 The workaround is to write the contextidr_el1 register on exception 615 return to a 32-bit task. 616 Please note that this does not necessarily enable the workaround, 617 as it depends on the alternative framework, which will only patch 618 the kernel if an affected CPU is detected. 619 620 If unsure, say Y. 621 622config ARM64_ERRATUM_843419 623 bool "Cortex-A53: 843419: A load or store might access an incorrect address" 624 default y 625 help 626 This option links the kernel with '--fix-cortex-a53-843419' and 627 enables PLT support to replace certain ADRP instructions, which can 628 cause subsequent memory accesses to use an incorrect address on 629 Cortex-A53 parts up to r0p4. 630 631 If unsure, say Y. 632 633config ARM64_ERRATUM_1024718 634 bool "Cortex-A55: 1024718: Update of DBM/AP bits without break before make might result in incorrect update" 635 default y 636 help 637 This option adds a workaround for ARM Cortex-A55 Erratum 1024718. 638 639 Affected Cortex-A55 cores (all revisions) could cause incorrect 640 update of the hardware dirty bit when the DBM/AP bits are updated 641 without a break-before-make. The workaround is to disable the usage 642 of hardware DBM locally on the affected cores. CPUs not affected by 643 this erratum will continue to use the feature. 644 645 If unsure, say Y. 646 647config ARM64_ERRATUM_1418040 648 bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result" 649 default y 650 depends on COMPAT 651 help 652 This option adds a workaround for ARM Cortex-A76/Neoverse-N1 653 errata 1188873 and 1418040. 654 655 Affected Cortex-A76/Neoverse-N1 cores (r0p0 to r3p1) could 656 cause register corruption when accessing the timer registers 657 from AArch32 userspace. 658 659 If unsure, say Y. 660 661config ARM64_WORKAROUND_SPECULATIVE_AT 662 bool 663 664config ARM64_ERRATUM_1165522 665 bool "Cortex-A76: 1165522: Speculative AT instruction using out-of-context translation regime could cause subsequent request to generate an incorrect translation" 666 default y 667 select ARM64_WORKAROUND_SPECULATIVE_AT 668 help 669 This option adds a workaround for ARM Cortex-A76 erratum 1165522. 670 671 Affected Cortex-A76 cores (r0p0, r1p0, r2p0) could end-up with 672 corrupted TLBs by speculating an AT instruction during a guest 673 context switch. 674 675 If unsure, say Y. 676 677config ARM64_ERRATUM_1319367 678 bool "Cortex-A57/A72: 1319537: Speculative AT instruction using out-of-context translation regime could cause subsequent request to generate an incorrect translation" 679 default y 680 select ARM64_WORKAROUND_SPECULATIVE_AT 681 help 682 This option adds work arounds for ARM Cortex-A57 erratum 1319537 683 and A72 erratum 1319367 684 685 Cortex-A57 and A72 cores could end-up with corrupted TLBs by 686 speculating an AT instruction during a guest context switch. 687 688 If unsure, say Y. 689 690config ARM64_ERRATUM_1530923 691 bool "Cortex-A55: 1530923: Speculative AT instruction using out-of-context translation regime could cause subsequent request to generate an incorrect translation" 692 default y 693 select ARM64_WORKAROUND_SPECULATIVE_AT 694 help 695 This option adds a workaround for ARM Cortex-A55 erratum 1530923. 696 697 Affected Cortex-A55 cores (r0p0, r0p1, r1p0, r2p0) could end-up with 698 corrupted TLBs by speculating an AT instruction during a guest 699 context switch. 700 701 If unsure, say Y. 702 703config ARM64_WORKAROUND_REPEAT_TLBI_SYNC 704 bool 705 # This workaround is (only) suitable for TLB invalidation errata where 706 # all of the following conditions are true: 707 # 708 # - The effects of the errata are only a loss of ordering/completion 709 # for explicit memory accesses when the TLBI is completed with a DSB. 710 # The removal of TLB entries is not affected. 711 # 712 # Note that architecturally, S2-only invalidation does not remove 713 # combined S1+S2 entries, and does not complete accesses translated 714 # via those S1+S2 entries. Consequently, where this condition holds, 715 # the errata do not affect S2-only invalidation. 716 # 717 # - The errata only affect broadcast TLB invalidation operations (e.g. 718 # TLBI VMALLE1IS), and do not affect local TLB invalidation 719 # operations (e.g. TLBI VMALLE1). 720 # 721 # - After any number of affected TLBI operations are completed with a 722 # DSB, the errata can be mitigated by executing a single arbitrary 723 # broadcast TLBI (which targets an arbitrary translation regime), 724 # followed by a DSB. 725 # 726 # For more rationale, see commit a8f78680ee6bf795. 727 728config ARM64_ERRATUM_2441007 729 bool "Cortex-A55: Completion of affected memory accesses might not be guaranteed by completion of a TLBI (rare)" 730 select ARM64_WORKAROUND_REPEAT_TLBI_SYNC 731 help 732 This option adds a workaround for ARM Cortex-A55 erratum #2441007. 733 734 Under very rare circumstances, affected Cortex-A55 CPUs 735 may not handle a race between a break-before-make sequence on one 736 CPU, and another CPU accessing the same page. This could allow a 737 store to a page that has been unmapped. 738 739 Work around this by adding the affected CPUs to the list that needs 740 TLB sequences to be done twice. 741 742 If unsure, say N. 743 744config ARM64_ERRATUM_1286807 745 bool "Cortex-A76: Modification of the translation table for a virtual address might lead to read-after-read ordering violation (rare)" 746 select ARM64_WORKAROUND_REPEAT_TLBI_SYNC 747 help 748 This option adds a workaround for ARM Cortex-A76 erratum 1286807. 749 750 On the affected Cortex-A76 cores (r0p0 to r3p0), if a virtual 751 address for a cacheable mapping of a location is being 752 accessed by a core while another core is remapping the virtual 753 address to a new physical page using the recommended 754 break-before-make sequence, then under very rare circumstances 755 TLBI+DSB completes before a read using the translation being 756 invalidated has been observed by other observers. The 757 workaround repeats the TLBI+DSB operation. 758 759 If unsure, say N. 760 761config ARM64_ERRATUM_1463225 762 bool "Cortex-A76: Software Step might prevent interrupt recognition" 763 default y 764 help 765 This option adds a workaround for Arm Cortex-A76 erratum 1463225. 766 767 On the affected Cortex-A76 cores (r0p0 to r3p1), software stepping 768 of a system call instruction (SVC) can prevent recognition of 769 subsequent interrupts when software stepping is disabled in the 770 exception handler of the system call and either kernel debugging 771 is enabled or VHE is in use. 772 773 Work around the erratum by triggering a dummy step exception 774 when handling a system call from a task that is being stepped 775 in a VHE configuration of the kernel. 776 777 If unsure, say Y. 778 779config ARM64_ERRATUM_1542419 780 bool "Neoverse-N1: workaround mis-ordering of instruction fetches (rare)" 781 help 782 This option adds a workaround for ARM Neoverse-N1 erratum 783 1542419. 784 785 Affected Neoverse-N1 cores could execute a stale instruction when 786 modified by another CPU. The workaround depends on a firmware 787 counterpart. 788 789 Workaround the issue by hiding the DIC feature from EL0. This 790 forces user-space to perform cache maintenance. 791 792 If unsure, say N. 793 794config ARM64_ERRATUM_1508412 795 bool "Cortex-A77: 1508412: workaround deadlock on sequence of NC/Device load and store exclusive or PAR read" 796 default y 797 help 798 This option adds a workaround for Arm Cortex-A77 erratum 1508412. 799 800 Affected Cortex-A77 cores (r0p0, r1p0) could deadlock on a sequence 801 of a store-exclusive or read of PAR_EL1 and a load with device or 802 non-cacheable memory attributes. The workaround depends on a firmware 803 counterpart. 804 805 KVM guests must also have the workaround implemented or they can 806 deadlock the system. 807 808 Work around the issue by inserting DMB SY barriers around PAR_EL1 809 register reads and warning KVM users. The DMB barrier is sufficient 810 to prevent a speculative PAR_EL1 read. 811 812 If unsure, say Y. 813 814config ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE 815 bool 816 817config ARM64_ERRATUM_2051678 818 bool "Cortex-A510: 2051678: disable Hardware Update of the page table dirty bit" 819 default y 820 help 821 This options adds the workaround for ARM Cortex-A510 erratum ARM64_ERRATUM_2051678. 822 Affected Cortex-A510 might not respect the ordering rules for 823 hardware update of the page table's dirty bit. The workaround 824 is to not enable the feature on affected CPUs. 825 826 If unsure, say Y. 827 828config ARM64_ERRATUM_2077057 829 bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2" 830 default y 831 help 832 This option adds the workaround for ARM Cortex-A510 erratum 2077057. 833 Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is 834 expected, but a Pointer Authentication trap is taken instead. The 835 erratum causes SPSR_EL1 to be copied to SPSR_EL2, which could allow 836 EL1 to cause a return to EL2 with a guest controlled ELR_EL2. 837 838 This can only happen when EL2 is stepping EL1. 839 840 When these conditions occur, the SPSR_EL2 value is unchanged from the 841 previous guest entry, and can be restored from the in-memory copy. 842 843 If unsure, say Y. 844 845config ARM64_ERRATUM_2658417 846 bool "Cortex-A510: 2658417: remove BF16 support due to incorrect result" 847 default y 848 help 849 This option adds the workaround for ARM Cortex-A510 erratum 2658417. 850 Affected Cortex-A510 (r0p0 to r1p1) may produce the wrong result for 851 BFMMLA or VMMLA instructions in rare circumstances when a pair of 852 A510 CPUs are using shared neon hardware. As the sharing is not 853 discoverable by the kernel, hide the BF16 HWCAP to indicate that 854 user-space should not be using these instructions. 855 856 If unsure, say Y. 857 858config ARM64_ERRATUM_2119858 859 bool "Cortex-A710/X2: 2119858: workaround TRBE overwriting trace data in FILL mode" 860 default y 861 depends on CORESIGHT_TRBE 862 select ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE 863 help 864 This option adds the workaround for ARM Cortex-A710/X2 erratum 2119858. 865 866 Affected Cortex-A710/X2 cores could overwrite up to 3 cache lines of trace 867 data at the base of the buffer (pointed to by TRBASER_EL1) in FILL mode in 868 the event of a WRAP event. 869 870 Work around the issue by always making sure we move the TRBPTR_EL1 by 871 256 bytes before enabling the buffer and filling the first 256 bytes of 872 the buffer with ETM ignore packets upon disabling. 873 874 If unsure, say Y. 875 876config ARM64_ERRATUM_2139208 877 bool "Neoverse-N2: 2139208: workaround TRBE overwriting trace data in FILL mode" 878 default y 879 depends on CORESIGHT_TRBE 880 select ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE 881 help 882 This option adds the workaround for ARM Neoverse-N2 erratum 2139208. 883 884 Affected Neoverse-N2 cores could overwrite up to 3 cache lines of trace 885 data at the base of the buffer (pointed to by TRBASER_EL1) in FILL mode in 886 the event of a WRAP event. 887 888 Work around the issue by always making sure we move the TRBPTR_EL1 by 889 256 bytes before enabling the buffer and filling the first 256 bytes of 890 the buffer with ETM ignore packets upon disabling. 891 892 If unsure, say Y. 893 894config ARM64_WORKAROUND_TSB_FLUSH_FAILURE 895 bool 896 897config ARM64_ERRATUM_2054223 898 bool "Cortex-A710: 2054223: workaround TSB instruction failing to flush trace" 899 default y 900 select ARM64_WORKAROUND_TSB_FLUSH_FAILURE 901 help 902 Enable workaround for ARM Cortex-A710 erratum 2054223 903 904 Affected cores may fail to flush the trace data on a TSB instruction, when 905 the PE is in trace prohibited state. This will cause losing a few bytes 906 of the trace cached. 907 908 Workaround is to issue two TSB consecutively on affected cores. 909 910 If unsure, say Y. 911 912config ARM64_ERRATUM_2067961 913 bool "Neoverse-N2: 2067961: workaround TSB instruction failing to flush trace" 914 default y 915 select ARM64_WORKAROUND_TSB_FLUSH_FAILURE 916 help 917 Enable workaround for ARM Neoverse-N2 erratum 2067961 918 919 Affected cores may fail to flush the trace data on a TSB instruction, when 920 the PE is in trace prohibited state. This will cause losing a few bytes 921 of the trace cached. 922 923 Workaround is to issue two TSB consecutively on affected cores. 924 925 If unsure, say Y. 926 927config ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE 928 bool 929 930config ARM64_ERRATUM_2253138 931 bool "Neoverse-N2: 2253138: workaround TRBE writing to address out-of-range" 932 depends on CORESIGHT_TRBE 933 default y 934 select ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE 935 help 936 This option adds the workaround for ARM Neoverse-N2 erratum 2253138. 937 938 Affected Neoverse-N2 cores might write to an out-of-range address, not reserved 939 for TRBE. Under some conditions, the TRBE might generate a write to the next 940 virtually addressed page following the last page of the TRBE address space 941 (i.e., the TRBLIMITR_EL1.LIMIT), instead of wrapping around to the base. 942 943 Work around this in the driver by always making sure that there is a 944 page beyond the TRBLIMITR_EL1.LIMIT, within the space allowed for the TRBE. 945 946 If unsure, say Y. 947 948config ARM64_ERRATUM_2224489 949 bool "Cortex-A710/X2: 2224489: workaround TRBE writing to address out-of-range" 950 depends on CORESIGHT_TRBE 951 default y 952 select ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE 953 help 954 This option adds the workaround for ARM Cortex-A710/X2 erratum 2224489. 955 956 Affected Cortex-A710/X2 cores might write to an out-of-range address, not reserved 957 for TRBE. Under some conditions, the TRBE might generate a write to the next 958 virtually addressed page following the last page of the TRBE address space 959 (i.e., the TRBLIMITR_EL1.LIMIT), instead of wrapping around to the base. 960 961 Work around this in the driver by always making sure that there is a 962 page beyond the TRBLIMITR_EL1.LIMIT, within the space allowed for the TRBE. 963 964 If unsure, say Y. 965 966config ARM64_ERRATUM_2441009 967 bool "Cortex-A510: Completion of affected memory accesses might not be guaranteed by completion of a TLBI (rare)" 968 select ARM64_WORKAROUND_REPEAT_TLBI_SYNC 969 help 970 This option adds a workaround for ARM Cortex-A510 erratum #2441009. 971 972 Under very rare circumstances, affected Cortex-A510 CPUs 973 may not handle a race between a break-before-make sequence on one 974 CPU, and another CPU accessing the same page. This could allow a 975 store to a page that has been unmapped. 976 977 Work around this by adding the affected CPUs to the list that needs 978 TLB sequences to be done twice. 979 980 If unsure, say N. 981 982config ARM64_ERRATUM_2064142 983 bool "Cortex-A510: 2064142: workaround TRBE register writes while disabled" 984 depends on CORESIGHT_TRBE 985 default y 986 help 987 This option adds the workaround for ARM Cortex-A510 erratum 2064142. 988 989 Affected Cortex-A510 core might fail to write into system registers after the 990 TRBE has been disabled. Under some conditions after the TRBE has been disabled 991 writes into TRBE registers TRBLIMITR_EL1, TRBPTR_EL1, TRBBASER_EL1, TRBSR_EL1, 992 and TRBTRG_EL1 will be ignored and will not be effected. 993 994 Work around this in the driver by executing TSB CSYNC and DSB after collection 995 is stopped and before performing a system register write to one of the affected 996 registers. 997 998 If unsure, say Y. 999 1000config ARM64_ERRATUM_2038923 1001 bool "Cortex-A510: 2038923: workaround TRBE corruption with enable" 1002 depends on CORESIGHT_TRBE 1003 default y 1004 help 1005 This option adds the workaround for ARM Cortex-A510 erratum 2038923. 1006 1007 Affected Cortex-A510 core might cause an inconsistent view on whether trace is 1008 prohibited within the CPU. As a result, the trace buffer or trace buffer state 1009 might be corrupted. This happens after TRBE buffer has been enabled by setting 1010 TRBLIMITR_EL1.E, followed by just a single context synchronization event before 1011 execution changes from a context, in which trace is prohibited to one where it 1012 isn't, or vice versa. In these mentioned conditions, the view of whether trace 1013 is prohibited is inconsistent between parts of the CPU, and the trace buffer or 1014 the trace buffer state might be corrupted. 1015 1016 Work around this in the driver by preventing an inconsistent view of whether the 1017 trace is prohibited or not based on TRBLIMITR_EL1.E by immediately following a 1018 change to TRBLIMITR_EL1.E with at least one ISB instruction before an ERET, or 1019 two ISB instructions if no ERET is to take place. 1020 1021 If unsure, say Y. 1022 1023config ARM64_ERRATUM_1902691 1024 bool "Cortex-A510: 1902691: workaround TRBE trace corruption" 1025 depends on CORESIGHT_TRBE 1026 default y 1027 help 1028 This option adds the workaround for ARM Cortex-A510 erratum 1902691. 1029 1030 Affected Cortex-A510 core might cause trace data corruption, when being written 1031 into the memory. Effectively TRBE is broken and hence cannot be used to capture 1032 trace data. 1033 1034 Work around this problem in the driver by just preventing TRBE initialization on 1035 affected cpus. The firmware must have disabled the access to TRBE for the kernel 1036 on such implementations. This will cover the kernel for any firmware that doesn't 1037 do this already. 1038 1039 If unsure, say Y. 1040 1041config ARM64_ERRATUM_2457168 1042 bool "Cortex-A510: 2457168: workaround for AMEVCNTR01 incrementing incorrectly" 1043 depends on ARM64_AMU_EXTN 1044 default y 1045 help 1046 This option adds the workaround for ARM Cortex-A510 erratum 2457168. 1047 1048 The AMU counter AMEVCNTR01 (constant counter) should increment at the same rate 1049 as the system counter. On affected Cortex-A510 cores AMEVCNTR01 increments 1050 incorrectly giving a significantly higher output value. 1051 1052 Work around this problem by returning 0 when reading the affected counter in 1053 key locations that results in disabling all users of this counter. This effect 1054 is the same to firmware disabling affected counters. 1055 1056 If unsure, say Y. 1057 1058config ARM64_ERRATUM_2645198 1059 bool "Cortex-A715: 2645198: Workaround possible [ESR|FAR]_ELx corruption" 1060 default y 1061 help 1062 This option adds the workaround for ARM Cortex-A715 erratum 2645198. 1063 1064 If a Cortex-A715 cpu sees a page mapping permissions change from executable 1065 to non-executable, it may corrupt the ESR_ELx and FAR_ELx registers on the 1066 next instruction abort caused by permission fault. 1067 1068 Only user-space does executable to non-executable permission transition via 1069 mprotect() system call. Workaround the problem by doing a break-before-make 1070 TLB invalidation, for all changes to executable user space mappings. 1071 1072 If unsure, say Y. 1073 1074config ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD 1075 bool 1076 1077config ARM64_ERRATUM_2966298 1078 bool "Cortex-A520: 2966298: workaround for speculatively executed unprivileged load" 1079 select ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD 1080 default y 1081 help 1082 This option adds the workaround for ARM Cortex-A520 erratum 2966298. 1083 1084 On an affected Cortex-A520 core, a speculatively executed unprivileged 1085 load might leak data from a privileged level via a cache side channel. 1086 1087 Work around this problem by executing a TLBI before returning to EL0. 1088 1089 If unsure, say Y. 1090 1091config ARM64_ERRATUM_3117295 1092 bool "Cortex-A510: 3117295: workaround for speculatively executed unprivileged load" 1093 select ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD 1094 default y 1095 help 1096 This option adds the workaround for ARM Cortex-A510 erratum 3117295. 1097 1098 On an affected Cortex-A510 core, a speculatively executed unprivileged 1099 load might leak data from a privileged level via a cache side channel. 1100 1101 Work around this problem by executing a TLBI before returning to EL0. 1102 1103 If unsure, say Y. 1104 1105config ARM64_ERRATUM_3194386 1106 bool "Cortex-*/Neoverse-*: workaround for MSR SSBS not self-synchronizing" 1107 default y 1108 help 1109 This option adds the workaround for the following errata: 1110 1111 * ARM Cortex-A76 erratum 3324349 1112 * ARM Cortex-A77 erratum 3324348 1113 * ARM Cortex-A78 erratum 3324344 1114 * ARM Cortex-A78C erratum 3324346 1115 * ARM Cortex-A78C erratum 3324347 1116 * ARM Cortex-A710 erratam 3324338 1117 * ARM Cortex-A715 errartum 3456084 1118 * ARM Cortex-A720 erratum 3456091 1119 * ARM Cortex-A725 erratum 3456106 1120 * ARM Cortex-X1 erratum 3324344 1121 * ARM Cortex-X1C erratum 3324346 1122 * ARM Cortex-X2 erratum 3324338 1123 * ARM Cortex-X3 erratum 3324335 1124 * ARM Cortex-X4 erratum 3194386 1125 * ARM Cortex-X925 erratum 3324334 1126 * ARM Neoverse-N1 erratum 3324349 1127 * ARM Neoverse N2 erratum 3324339 1128 * ARM Neoverse-N3 erratum 3456111 1129 * ARM Neoverse-V1 erratum 3324341 1130 * ARM Neoverse V2 erratum 3324336 1131 * ARM Neoverse-V3 erratum 3312417 1132 * ARM Neoverse-V3AE erratum 3312417 1133 1134 On affected cores "MSR SSBS, #0" instructions may not affect 1135 subsequent speculative instructions, which may permit unexepected 1136 speculative store bypassing. 1137 1138 Work around this problem by placing a Speculation Barrier (SB) or 1139 Instruction Synchronization Barrier (ISB) after kernel changes to 1140 SSBS. The presence of the SSBS special-purpose register is hidden 1141 from hwcaps and EL0 reads of ID_AA64PFR1_EL1, such that userspace 1142 will use the PR_SPEC_STORE_BYPASS prctl to change SSBS. 1143 1144 If unsure, say Y. 1145 1146config ARM64_ERRATUM_4311569 1147 bool "SI L1: 4311569: workaround for premature CMO completion erratum" 1148 default y 1149 help 1150 This option adds the workaround for ARM SI L1 erratum 4311569. 1151 1152 The erratum of SI L1 can cause an early response to a combined write 1153 and cache maintenance operation (WR+CMO) before the operation is fully 1154 completed to the Point of Serialization (POS). 1155 This can result in a non-I/O coherent agent observing stale data, 1156 potentially leading to system instability or incorrect behavior. 1157 1158 Enabling this option implements a software workaround by inserting a 1159 second loop of Cache Maintenance Operation (CMO) immediately following the 1160 end of function to do CMOs. This ensures that the data is correctly serialized 1161 before the buffer is handed off to a non-coherent agent. 1162 1163 If unsure, say Y. 1164 1165config ARM64_ERRATUM_4193714 1166 bool "C1-Pro: 4193714: SME DVMSync early acknowledgement" 1167 depends on ARM64_SME 1168 default y 1169 help 1170 Enable workaround for C1-Pro acknowledging the DVMSync before 1171 the SME memory accesses are complete. This will cause TLB 1172 maintenance for processes using SME to also issue an IPI to 1173 the affected CPUs. 1174 1175 If unsure, say Y. 1176 1177config ARM64_ERRATUM_4118414 1178 bool "Various: Completion of affected memory accesses might not be guaranteed by completion of a TLBI" 1179 default y 1180 select ARM64_WORKAROUND_REPEAT_TLBI_SYNC 1181 help 1182 This option adds a workaround for the following errata: 1183 1184 * ARM C1-Premium erratum 4193780 1185 * ARM C1-Ultra erratum 4193780 1186 * ARM Cortex-A76 erratum 4193800 1187 * ARM Cortex-A76AE erratum 4193801 1188 * ARM Cortex-A77 erratum 4193798 1189 * ARM Cortex-A78 erratum 4193791 1190 * ARM Cortex-A78AE erratum 4193793 1191 * ARM Cortex-A78C erratum 4193794 1192 * ARM Cortex-A710 erratum 4193788 1193 * ARM Cortex-X1 erratum 4193791 1194 * ARM Cortex-X1C erratum 4193792 1195 * ARM Cortex-X2 erratum 4193788 1196 * ARM Cortex-X3 erratum 4193786 1197 * ARM Cortex-X4 erratum 4118414 1198 * ARM Cortex-X925 erratum 4193781 1199 * ARM Neoverse-N1 erratum 4193800 1200 * ARM Neoverse-N2 erratum 4193789 1201 * ARM Neoverse-V1 erratum 4193790 1202 * ARM Neoverse-V2 erratum 4193787 1203 * ARM Neoverse-V3 erratum 4193784 1204 * ARM Neoverse-V3AE erratum 4193784 1205 * Microsoft Azure Cobalt 100 4193789 1206 * NVIDIA Olympus erratum T410-OLY-1029 1207 1208 On affected cores, some memory accesses might not be completed by 1209 broadcast TLB invalidation. 1210 1211 This issue is also known as CVE-2025-10263. 1212 1213 If unsure, say Y. 1214 1215config CAVIUM_ERRATUM_22375 1216 bool "Cavium erratum 22375, 24313" 1217 default y 1218 help 1219 Enable workaround for errata 22375 and 24313. 1220 1221 This implements two gicv3-its errata workarounds for ThunderX. Both 1222 with a small impact affecting only ITS table allocation. 1223 1224 erratum 22375: only alloc 8MB table size 1225 erratum 24313: ignore memory access type 1226 1227 The fixes are in ITS initialization and basically ignore memory access 1228 type and table size provided by the TYPER and BASER registers. 1229 1230 If unsure, say Y. 1231 1232config CAVIUM_ERRATUM_23144 1233 bool "Cavium erratum 23144: ITS SYNC hang on dual socket system" 1234 depends on NUMA 1235 default y 1236 help 1237 ITS SYNC command hang for cross node io and collections/cpu mapping. 1238 1239 If unsure, say Y. 1240 1241config CAVIUM_ERRATUM_23154 1242 bool "Cavium errata 23154 and 38545: GICv3 lacks HW synchronisation" 1243 default y 1244 help 1245 The ThunderX GICv3 implementation requires a modified version for 1246 reading the IAR status to ensure data synchronization 1247 (access to icc_iar1_el1 is not sync'ed before and after). 1248 1249 It also suffers from erratum 38545 (also present on Marvell's 1250 OcteonTX and OcteonTX2), resulting in deactivated interrupts being 1251 spuriously presented to the CPU interface. 1252 1253 If unsure, say Y. 1254 1255config CAVIUM_ERRATUM_27456 1256 bool "Cavium erratum 27456: Broadcast TLBI instructions may cause icache corruption" 1257 default y 1258 help 1259 On ThunderX T88 pass 1.x through 2.1 parts, broadcast TLBI 1260 instructions may cause the icache to become corrupted if it 1261 contains data for a non-current ASID. The fix is to 1262 invalidate the icache when changing the mm context. 1263 1264 If unsure, say Y. 1265 1266config CAVIUM_ERRATUM_30115 1267 bool "Cavium erratum 30115: Guest may disable interrupts in host" 1268 default y 1269 help 1270 On ThunderX T88 pass 1.x through 2.2, T81 pass 1.0 through 1271 1.2, and T83 Pass 1.0, KVM guest execution may disable 1272 interrupts in host. Trapping both GICv3 group-0 and group-1 1273 accesses sidesteps the issue. 1274 1275 If unsure, say Y. 1276 1277config CAVIUM_TX2_ERRATUM_219 1278 bool "Cavium ThunderX2 erratum 219: PRFM between TTBR change and ISB fails" 1279 default y 1280 help 1281 On Cavium ThunderX2, a load, store or prefetch instruction between a 1282 TTBR update and the corresponding context synchronizing operation can 1283 cause a spurious Data Abort to be delivered to any hardware thread in 1284 the CPU core. 1285 1286 Work around the issue by avoiding the problematic code sequence and 1287 trapping KVM guest TTBRx_EL1 writes to EL2 when SMT is enabled. The 1288 trap handler performs the corresponding register access, skips the 1289 instruction and ensures context synchronization by virtue of the 1290 exception return. 1291 1292 If unsure, say Y. 1293 1294config FUJITSU_ERRATUM_010001 1295 bool "Fujitsu-A64FX erratum E#010001: Undefined fault may occur wrongly" 1296 default y 1297 help 1298 This option adds a workaround for Fujitsu-A64FX erratum E#010001. 1299 On some variants of the Fujitsu-A64FX cores ver(1.0, 1.1), memory 1300 accesses may cause undefined fault (Data abort, DFSC=0b111111). 1301 This fault occurs under a specific hardware condition when a 1302 load/store instruction performs an address translation using: 1303 case-1 TTBR0_EL1 with TCR_EL1.NFD0 == 1. 1304 case-2 TTBR0_EL2 with TCR_EL2.NFD0 == 1. 1305 case-3 TTBR1_EL1 with TCR_EL1.NFD1 == 1. 1306 case-4 TTBR1_EL2 with TCR_EL2.NFD1 == 1. 1307 1308 The workaround is to ensure these bits are clear in TCR_ELx. 1309 The workaround only affects the Fujitsu-A64FX. 1310 1311 If unsure, say Y. 1312 1313config HISILICON_ERRATUM_161600802 1314 bool "Hip07 161600802: Erroneous redistributor VLPI base" 1315 default y 1316 help 1317 The HiSilicon Hip07 SoC uses the wrong redistributor base 1318 when issued ITS commands such as VMOVP and VMAPP, and requires 1319 a 128kB offset to be applied to the target address in this commands. 1320 1321 If unsure, say Y. 1322 1323config HISILICON_ERRATUM_162100801 1324 bool "Hip09 162100801 erratum support" 1325 default y 1326 help 1327 When enabling GICv4.1 in hip09, VMAPP will fail to clear some caches 1328 during unmapping operation, which will cause some vSGIs lost. 1329 To fix the issue, invalidate related vPE cache through GICR_INVALLR 1330 after VMOVP. 1331 1332 If unsure, say Y. 1333 1334config HISILICON_ERRATUM_162100125 1335 bool "Hisilicon erratum 162100125" 1336 default y 1337 select ARM64_WORKAROUND_DISABLE_CNP 1338 help 1339 On HiSilicon HIP09, TLB entry matching behavior when CNP 1340 (TTBRx.CNP=1) is enabled differs from the ARM architecture 1341 specification. 1342 1343 TLB entries may be incorrectly shared between CPUs, potentially 1344 causing TLB conflicts and stale mappings. 1345 1346 Disable CNP support for affected HiSilicon HIP09 cores. 1347 1348 If unsure, say Y. 1349 1350config QCOM_FALKOR_ERRATUM_1003 1351 bool "Falkor E1003: Incorrect translation due to ASID change" 1352 default y 1353 help 1354 On Falkor v1, an incorrect ASID may be cached in the TLB when ASID 1355 and BADDR are changed together in TTBRx_EL1. Since we keep the ASID 1356 in TTBR1_EL1, this situation only occurs in the entry trampoline and 1357 then only for entries in the walk cache, since the leaf translation 1358 is unchanged. Work around the erratum by invalidating the walk cache 1359 entries for the trampoline before entering the kernel proper. 1360 1361config QCOM_FALKOR_ERRATUM_1009 1362 bool "Falkor E1009: Prematurely complete a DSB after a TLBI" 1363 default y 1364 select ARM64_WORKAROUND_REPEAT_TLBI_SYNC 1365 help 1366 On Falkor v1, the CPU may prematurely complete a DSB following a 1367 TLBI xxIS invalidate maintenance operation. Repeat the TLBI operation 1368 one more time to fix the issue. 1369 1370 If unsure, say Y. 1371 1372config QCOM_QDF2400_ERRATUM_0065 1373 bool "QDF2400 E0065: Incorrect GITS_TYPER.ITT_Entry_size" 1374 default y 1375 help 1376 On Qualcomm Datacenter Technologies QDF2400 SoC, ITS hardware reports 1377 ITE size incorrectly. The GITS_TYPER.ITT_Entry_size field should have 1378 been indicated as 16Bytes (0xf), not 8Bytes (0x7). 1379 1380 If unsure, say Y. 1381 1382config QCOM_FALKOR_ERRATUM_E1041 1383 bool "Falkor E1041: Speculative instruction fetches might cause errant memory access" 1384 default y 1385 help 1386 Falkor CPU may speculatively fetch instructions from an improper 1387 memory location when MMU translation is changed from SCTLR_ELn[M]=1 1388 to SCTLR_ELn[M]=0. Prefix an ISB instruction to fix the problem. 1389 1390 If unsure, say Y. 1391 1392config ARM64_WORKAROUND_DISABLE_CNP 1393 bool 1394 1395config NVIDIA_CARMEL_CNP_ERRATUM 1396 bool "NVIDIA Carmel CNP: CNP on Carmel semantically different than ARM cores" 1397 default y 1398 select ARM64_WORKAROUND_DISABLE_CNP 1399 help 1400 If CNP is enabled on Carmel cores, non-sharable TLBIs on a core will not 1401 invalidate shared TLB entries installed by a different core, as it would 1402 on standard ARM cores. 1403 1404 If unsure, say Y. 1405 1406config NVIDIA_OLYMPUS_1027_ERRATUM 1407 bool "NVIDIA Olympus: device store/load ordering erratum" 1408 default y 1409 help 1410 This option adds an alternative code sequence to work around an 1411 NVIDIA Olympus core erratum where a Device-nGnR* store can be 1412 observed by a peripheral after a younger Device-nGnR* load to the 1413 same peripheral. This breaks the program order that drivers rely 1414 on for MMIO and can leave a device in an incorrect state. 1415 1416 The workaround inserts a DMB OSH immediately before raw MMIO loads. 1417 The erratum cannot occur when a DMB that orders loads appears 1418 between the store and load, preventing the younger load from being 1419 observed before the older store. 1420 1421 The alternatives framework patches in DMB OSH only when an affected 1422 CPU is detected. Other CPUs execute a NOP in its place. Disabling 1423 this option leaves the original MMIO read instruction stream 1424 unchanged. 1425 1426 If unsure, say Y. 1427 1428config RENESAS_ERRATUM_GEN4GICITS1 1429 bool "Renesas R-Car Gen4: GIC600 can not access physical addresses above 4 GiB" 1430 default y 1431 help 1432 The Renesas R-Car Gen4 S4/V4H/V4M GIC600 SoC integrations have AXI 1433 addressing limited to the first 32-bit of physical address space. 1434 1435 If unsure, say Y. 1436 1437config ROCKCHIP_ERRATUM_3568002 1438 bool "Rockchip 3568002: GIC600 can not access physical addresses higher than 4GB" 1439 default y 1440 help 1441 The Rockchip RK3566 and RK3568 GIC600 SoC integrations have AXI 1442 addressing limited to the first 32bit of physical address space. 1443 1444 If unsure, say Y. 1445 1446config ROCKCHIP_ERRATUM_3588001 1447 bool "Rockchip 3588001: GIC600 can not support shareability attributes" 1448 default y 1449 help 1450 The Rockchip RK3588 GIC600 SoC integration does not support ACE/ACE-lite. 1451 This means, that its sharability feature may not be used, even though it 1452 is supported by the IP itself. 1453 1454 If unsure, say Y. 1455 1456config SOCIONEXT_SYNQUACER_PREITS 1457 bool "Socionext Synquacer: Workaround for GICv3 pre-ITS" 1458 default y 1459 help 1460 Socionext Synquacer SoCs implement a separate h/w block to generate 1461 MSI doorbell writes with non-zero values for the device ID. 1462 1463 If unsure, say Y. 1464 1465endmenu # "ARM errata workarounds via the alternatives framework" 1466 1467choice 1468 prompt "Page size" 1469 default ARM64_4K_PAGES 1470 help 1471 Page size (translation granule) configuration. 1472 1473config ARM64_4K_PAGES 1474 bool "4KB" 1475 select HAVE_PAGE_SIZE_4KB 1476 help 1477 This feature enables 4KB pages support. 1478 1479config ARM64_16K_PAGES 1480 bool "16KB" 1481 select HAVE_PAGE_SIZE_16KB 1482 help 1483 The system will use 16KB pages support. AArch32 emulation 1484 requires applications compiled with 16K (or a multiple of 16K) 1485 aligned segments. 1486 1487config ARM64_64K_PAGES 1488 bool "64KB" 1489 select HAVE_PAGE_SIZE_64KB 1490 help 1491 This feature enables 64KB pages support (4KB by default) 1492 allowing only two levels of page tables and faster TLB 1493 look-up. AArch32 emulation requires applications compiled 1494 with 64K aligned segments. 1495 1496endchoice 1497 1498choice 1499 prompt "Virtual address space size" 1500 default ARM64_VA_BITS_52 1501 help 1502 Allows choosing one of multiple possible virtual address 1503 space sizes. The level of translation table is determined by 1504 a combination of page size and virtual address space size. 1505 1506config ARM64_VA_BITS_36 1507 bool "36-bit" if EXPERT 1508 depends on PAGE_SIZE_16KB 1509 1510config ARM64_VA_BITS_39 1511 bool "39-bit" 1512 depends on PAGE_SIZE_4KB 1513 1514config ARM64_VA_BITS_42 1515 bool "42-bit" 1516 depends on PAGE_SIZE_64KB 1517 1518config ARM64_VA_BITS_47 1519 bool "47-bit" 1520 depends on PAGE_SIZE_16KB 1521 1522config ARM64_VA_BITS_48 1523 bool "48-bit" 1524 1525config ARM64_VA_BITS_52 1526 bool "52-bit" 1527 help 1528 Enable 52-bit virtual addressing for userspace when explicitly 1529 requested via a hint to mmap(). The kernel will also use 52-bit 1530 virtual addresses for its own mappings (provided HW support for 1531 this feature is available, otherwise it reverts to 48-bit). 1532 1533 NOTE: Enabling 52-bit virtual addressing in conjunction with 1534 ARMv8.3 Pointer Authentication will result in the PAC being 1535 reduced from 7 bits to 3 bits, which may have a significant 1536 impact on its susceptibility to brute-force attacks. 1537 1538 If unsure, select 48-bit virtual addressing instead. 1539 1540endchoice 1541 1542config ARM64_FORCE_52BIT 1543 bool "Force 52-bit virtual addresses for userspace" 1544 depends on ARM64_VA_BITS_52 && EXPERT 1545 help 1546 For systems with 52-bit userspace VAs enabled, the kernel will attempt 1547 to maintain compatibility with older software by providing 48-bit VAs 1548 unless a hint is supplied to mmap. 1549 1550 This configuration option disables the 48-bit compatibility logic, and 1551 forces all userspace addresses to be 52-bit on HW that supports it. One 1552 should only enable this configuration option for stress testing userspace 1553 memory management code. If unsure say N here. 1554 1555config ARM64_VA_BITS 1556 int 1557 default 36 if ARM64_VA_BITS_36 1558 default 39 if ARM64_VA_BITS_39 1559 default 42 if ARM64_VA_BITS_42 1560 default 47 if ARM64_VA_BITS_47 1561 default 48 if ARM64_VA_BITS_48 1562 default 52 if ARM64_VA_BITS_52 1563 1564choice 1565 prompt "Physical address space size" 1566 default ARM64_PA_BITS_48 1567 help 1568 Choose the maximum physical address range that the kernel will 1569 support. 1570 1571config ARM64_PA_BITS_48 1572 bool "48-bit" 1573 depends on ARM64_64K_PAGES || !ARM64_VA_BITS_52 1574 1575config ARM64_PA_BITS_52 1576 bool "52-bit" 1577 depends on ARM64_64K_PAGES || ARM64_VA_BITS_52 1578 help 1579 Enable support for a 52-bit physical address space, introduced as 1580 part of the ARMv8.2-LPA extension. 1581 1582 With this enabled, the kernel will also continue to work on CPUs that 1583 do not support ARMv8.2-LPA, but with some added memory overhead (and 1584 minor performance overhead). 1585 1586endchoice 1587 1588config ARM64_PA_BITS 1589 int 1590 default 48 if ARM64_PA_BITS_48 1591 default 52 if ARM64_PA_BITS_52 1592 1593config ARM64_LPA2 1594 def_bool y 1595 depends on ARM64_PA_BITS_52 && !ARM64_64K_PAGES 1596 1597choice 1598 prompt "Endianness" 1599 default CPU_LITTLE_ENDIAN 1600 help 1601 Select the endianness of data accesses performed by the CPU. Userspace 1602 applications will need to be compiled and linked for the endianness 1603 that is selected here. 1604 1605config CPU_BIG_ENDIAN 1606 bool "Build big-endian kernel" 1607 depends on BROKEN 1608 help 1609 Say Y if you plan on running a kernel with a big-endian userspace. 1610 1611config CPU_LITTLE_ENDIAN 1612 bool "Build little-endian kernel" 1613 help 1614 Say Y if you plan on running a kernel with a little-endian userspace. 1615 This is usually the case for distributions targeting arm64. 1616 1617endchoice 1618 1619config NR_CPUS 1620 int "Maximum number of CPUs (2-4096)" 1621 range 2 4096 1622 default "512" 1623 1624config HOTPLUG_CPU 1625 bool "Support for hot-pluggable CPUs" 1626 select GENERIC_IRQ_MIGRATION 1627 help 1628 Say Y here to experiment with turning CPUs off and on. CPUs 1629 can be controlled through /sys/devices/system/cpu. 1630 1631# Common NUMA Features 1632config NUMA 1633 bool "NUMA Memory Allocation and Scheduler Support" 1634 select GENERIC_ARCH_NUMA 1635 select OF_NUMA 1636 select HAVE_SETUP_PER_CPU_AREA 1637 select NEED_PER_CPU_EMBED_FIRST_CHUNK 1638 select NEED_PER_CPU_PAGE_FIRST_CHUNK 1639 select USE_PERCPU_NUMA_NODE_ID 1640 help 1641 Enable NUMA (Non-Uniform Memory Access) support. 1642 1643 The kernel will try to allocate memory used by a CPU on the 1644 local memory of the CPU and add some more 1645 NUMA awareness to the kernel. 1646 1647config NODES_SHIFT 1648 int "Maximum NUMA Nodes (as a power of 2)" 1649 range 1 10 1650 default "4" 1651 depends on NUMA 1652 help 1653 Specify the maximum number of NUMA Nodes available on the target 1654 system. Increases memory reserved to accommodate various tables. 1655 1656source "kernel/Kconfig.hz" 1657 1658config ARCH_SPARSEMEM_ENABLE 1659 def_bool y 1660 select SPARSEMEM_VMEMMAP_ENABLE 1661 1662config HW_PERF_EVENTS 1663 def_bool y 1664 depends on ARM_PMU 1665 1666# Supported by clang >= 7.0 or GCC >= 12.0.0 1667config CC_HAVE_SHADOW_CALL_STACK 1668 def_bool $(cc-option, -fsanitize=shadow-call-stack -ffixed-x18) 1669 1670config PARAVIRT 1671 bool "Enable paravirtualization code" 1672 select HAVE_PV_STEAL_CLOCK_GEN 1673 help 1674 This changes the kernel so it can modify itself when it is run 1675 under a hypervisor, potentially improving performance significantly 1676 over full virtualization. 1677 1678config PARAVIRT_TIME_ACCOUNTING 1679 bool "Paravirtual steal time accounting" 1680 select PARAVIRT 1681 help 1682 Select this option to enable fine granularity task steal time 1683 accounting. Time spent executing other tasks in parallel with 1684 the current vCPU is discounted from the vCPU power. To account for 1685 that, there can be a small performance impact. 1686 1687 If in doubt, say N here. 1688 1689config ARCH_SUPPORTS_KEXEC 1690 def_bool PM_SLEEP_SMP 1691 1692config ARCH_SUPPORTS_KEXEC_FILE 1693 def_bool y 1694 1695config ARCH_SELECTS_KEXEC_FILE 1696 def_bool y 1697 depends on KEXEC_FILE 1698 select HAVE_IMA_KEXEC if IMA 1699 1700config ARCH_SUPPORTS_KEXEC_SIG 1701 def_bool y 1702 1703config ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG 1704 def_bool y 1705 1706config ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG 1707 def_bool y 1708 1709config ARCH_SUPPORTS_KEXEC_HANDOVER 1710 def_bool y 1711 1712config ARCH_SUPPORTS_CRASH_DUMP 1713 def_bool y 1714 1715config ARCH_DEFAULT_CRASH_DUMP 1716 def_bool y 1717 1718config ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION 1719 def_bool CRASH_RESERVE 1720 1721config TRANS_TABLE 1722 def_bool y 1723 depends on HIBERNATION || KEXEC_CORE 1724 1725config XEN_DOM0 1726 def_bool y 1727 depends on XEN 1728 1729config XEN 1730 bool "Xen guest support on ARM64" 1731 depends on ARM64 && OF 1732 select SWIOTLB_XEN 1733 select PARAVIRT 1734 help 1735 Say Y if you want to run Linux in a Virtual Machine on Xen on ARM64. 1736 1737# include/linux/mmzone.h requires the following to be true: 1738# 1739# MAX_PAGE_ORDER + PAGE_SHIFT <= SECTION_SIZE_BITS 1740# 1741# so the maximum value of MAX_PAGE_ORDER is SECTION_SIZE_BITS - PAGE_SHIFT: 1742# 1743# | SECTION_SIZE_BITS | PAGE_SHIFT | max MAX_PAGE_ORDER | default MAX_PAGE_ORDER | 1744# ----+-------------------+--------------+----------------------+-------------------------+ 1745# 4K | 27 | 12 | 15 | 10 | 1746# 16K | 27 | 14 | 13 | 11 | 1747# 64K | 29 | 16 | 13 | 13 | 1748config ARCH_FORCE_MAX_ORDER 1749 int 1750 default "13" if ARM64_64K_PAGES 1751 default "11" if ARM64_16K_PAGES 1752 default "10" 1753 help 1754 The kernel page allocator limits the size of maximal physically 1755 contiguous allocations. The limit is called MAX_PAGE_ORDER and it 1756 defines the maximal power of two of number of pages that can be 1757 allocated as a single contiguous block. This option allows 1758 overriding the default setting when ability to allocate very 1759 large blocks of physically contiguous memory is required. 1760 1761 The maximal size of allocation cannot exceed the size of the 1762 section, so the value of MAX_PAGE_ORDER should satisfy 1763 1764 MAX_PAGE_ORDER + PAGE_SHIFT <= SECTION_SIZE_BITS 1765 1766 Don't change if unsure. 1767 1768config UNMAP_KERNEL_AT_EL0 1769 bool "Unmap kernel when running in userspace (KPTI)" if EXPERT 1770 default y 1771 help 1772 Speculation attacks against some high-performance processors can 1773 be used to bypass MMU permission checks and leak kernel data to 1774 userspace. This can be defended against by unmapping the kernel 1775 when running in userspace, mapping it back in on exception entry 1776 via a trampoline page in the vector table. 1777 1778 If unsure, say Y. 1779 1780config MITIGATE_SPECTRE_BRANCH_HISTORY 1781 bool "Mitigate Spectre style attacks against branch history" if EXPERT 1782 default y 1783 help 1784 Speculation attacks against some high-performance processors can 1785 make use of branch history to influence future speculation. 1786 When taking an exception from user-space, a sequence of branches 1787 or a firmware call overwrites the branch history. 1788 1789config ARM64_SW_TTBR0_PAN 1790 bool "Emulate Privileged Access Never using TTBR0_EL1 switching" 1791 depends on !KCSAN 1792 help 1793 Enabling this option prevents the kernel from accessing 1794 user-space memory directly by pointing TTBR0_EL1 to a reserved 1795 zeroed area and reserved ASID. The user access routines 1796 restore the valid TTBR0_EL1 temporarily. 1797 1798config ARM64_TAGGED_ADDR_ABI 1799 bool "Enable the tagged user addresses syscall ABI" 1800 default y 1801 help 1802 When this option is enabled, user applications can opt in to a 1803 relaxed ABI via prctl() allowing tagged addresses to be passed 1804 to system calls as pointer arguments. For details, see 1805 Documentation/arch/arm64/tagged-address-abi.rst. 1806 1807menuconfig COMPAT 1808 bool "Kernel support for 32-bit EL0" 1809 depends on ARM64_4K_PAGES || EXPERT 1810 select HAVE_UID16 1811 select OLD_SIGSUSPEND3 1812 select COMPAT_OLD_SIGACTION 1813 help 1814 This option enables support for a 32-bit EL0 running under a 64-bit 1815 kernel at EL1. AArch32-specific components such as system calls, 1816 the user helper functions, VFP support and the ptrace interface are 1817 handled appropriately by the kernel. 1818 1819 If you use a page size other than 4KB (i.e, 16KB or 64KB), please be aware 1820 that you will only be able to execute AArch32 binaries that were compiled 1821 with page size aligned segments. 1822 1823 If you want to execute 32-bit userspace applications, say Y. 1824 1825if COMPAT 1826 1827config KUSER_HELPERS 1828 bool "Enable kuser helpers page for 32-bit applications" 1829 default y 1830 help 1831 Warning: disabling this option may break 32-bit user programs. 1832 1833 Provide kuser helpers to compat tasks. The kernel provides 1834 helper code to userspace in read only form at a fixed location 1835 to allow userspace to be independent of the CPU type fitted to 1836 the system. This permits binaries to be run on ARMv4 through 1837 to ARMv8 without modification. 1838 1839 See Documentation/arch/arm/kernel_user_helpers.rst for details. 1840 1841 However, the fixed address nature of these helpers can be used 1842 by ROP (return orientated programming) authors when creating 1843 exploits. 1844 1845 If all of the binaries and libraries which run on your platform 1846 are built specifically for your platform, and make no use of 1847 these helpers, then you can turn this option off to hinder 1848 such exploits. However, in that case, if a binary or library 1849 relying on those helpers is run, it will not function correctly. 1850 1851 Say N here only if you are absolutely certain that you do not 1852 need these helpers; otherwise, the safe option is to say Y. 1853 1854config COMPAT_VDSO 1855 bool "Enable vDSO for 32-bit applications" 1856 depends on !CPU_BIG_ENDIAN 1857 depends on (CC_IS_CLANG && LD_IS_LLD) || "$(CROSS_COMPILE_COMPAT)" != "" 1858 default y 1859 help 1860 Place in the process address space of 32-bit applications an 1861 ELF shared object providing fast implementations of gettimeofday 1862 and clock_gettime. 1863 1864 You must have a 32-bit build of glibc 2.22 or later for programs 1865 to seamlessly take advantage of this. 1866 1867config THUMB2_COMPAT_VDSO 1868 bool "Compile the 32-bit vDSO for Thumb-2 mode" if EXPERT 1869 depends on COMPAT_VDSO 1870 default y 1871 help 1872 Compile the compat vDSO with '-mthumb -fomit-frame-pointer' if y, 1873 otherwise with '-marm'. 1874 1875config COMPAT_ALIGNMENT_FIXUPS 1876 bool "Fix up misaligned multi-word loads and stores in user space" 1877 1878menuconfig ARMV8_DEPRECATED 1879 bool "Emulate deprecated/obsolete ARMv8 instructions" 1880 depends on SYSCTL 1881 help 1882 Legacy software support may require certain instructions 1883 that have been deprecated or obsoleted in the architecture. 1884 1885 Enable this config to enable selective emulation of these 1886 features. 1887 1888 If unsure, say Y 1889 1890if ARMV8_DEPRECATED 1891 1892config SWP_EMULATION 1893 bool "Emulate SWP/SWPB instructions" 1894 help 1895 ARMv8 obsoletes the use of A32 SWP/SWPB instructions such that 1896 they are always undefined. Say Y here to enable software 1897 emulation of these instructions for userspace using LDXR/STXR. 1898 This feature can be controlled at runtime with the abi.swp 1899 sysctl which is disabled by default. 1900 1901 In some older versions of glibc [<=2.8] SWP is used during futex 1902 trylock() operations with the assumption that the code will not 1903 be preempted. This invalid assumption may be more likely to fail 1904 with SWP emulation enabled, leading to deadlock of the user 1905 application. 1906 1907 NOTE: when accessing uncached shared regions, LDXR/STXR rely 1908 on an external transaction monitoring block called a global 1909 monitor to maintain update atomicity. If your system does not 1910 implement a global monitor, this option can cause programs that 1911 perform SWP operations to uncached memory to deadlock. 1912 1913 If unsure, say Y 1914 1915config CP15_BARRIER_EMULATION 1916 bool "Emulate CP15 Barrier instructions" 1917 help 1918 The CP15 barrier instructions - CP15ISB, CP15DSB, and 1919 CP15DMB - are deprecated in ARMv8 (and ARMv7). It is 1920 strongly recommended to use the ISB, DSB, and DMB 1921 instructions instead. 1922 1923 Say Y here to enable software emulation of these 1924 instructions for AArch32 userspace code. When this option is 1925 enabled, CP15 barrier usage is traced which can help 1926 identify software that needs updating. This feature can be 1927 controlled at runtime with the abi.cp15_barrier sysctl. 1928 1929 If unsure, say Y 1930 1931config SETEND_EMULATION 1932 bool "Emulate SETEND instruction" 1933 help 1934 The SETEND instruction alters the data-endianness of the 1935 AArch32 EL0, and is deprecated in ARMv8. 1936 1937 Say Y here to enable software emulation of the instruction 1938 for AArch32 userspace code. This feature can be controlled 1939 at runtime with the abi.setend sysctl. 1940 1941 Note: All the cpus on the system must have mixed endian support at EL0 1942 for this feature to be enabled. If a new CPU - which doesn't support mixed 1943 endian - is hotplugged in after this feature has been enabled, there could 1944 be unexpected results in the applications. 1945 1946 If unsure, say Y 1947endif # ARMV8_DEPRECATED 1948 1949endif # COMPAT 1950 1951menu "ARMv8.1 architectural features" 1952 1953config ARM64_HW_AFDBM 1954 bool "Support for hardware updates of the Access and Dirty page flags" 1955 default y 1956 help 1957 The ARMv8.1 architecture extensions introduce support for 1958 hardware updates of the access and dirty information in page 1959 table entries. When enabled in TCR_EL1 (HA and HD bits) on 1960 capable processors, accesses to pages with PTE_AF cleared will 1961 set this bit instead of raising an access flag fault. 1962 Similarly, writes to read-only pages with the DBM bit set will 1963 clear the read-only bit (AP[2]) instead of raising a 1964 permission fault. 1965 1966 Kernels built with this configuration option enabled continue 1967 to work on pre-ARMv8.1 hardware and the performance impact is 1968 minimal. If unsure, say Y. 1969 1970endmenu # "ARMv8.1 architectural features" 1971 1972menu "ARMv8.2 architectural features" 1973 1974config ARM64_PMEM 1975 bool "Enable support for persistent memory" 1976 select ARCH_HAS_PMEM_API 1977 select ARCH_HAS_UACCESS_FLUSHCACHE 1978 help 1979 Say Y to enable support for the persistent memory API based on the 1980 ARMv8.2 DCPoP feature. 1981 1982 The feature is detected at runtime, and the kernel will use DC CVAC 1983 operations if DC CVAP is not supported (following the behaviour of 1984 DC CVAP itself if the system does not define a point of persistence). 1985 1986config ARM64_RAS_EXTN 1987 bool "Enable support for RAS CPU Extensions" 1988 default y 1989 help 1990 CPUs that support the Reliability, Availability and Serviceability 1991 (RAS) Extensions, part of ARMv8.2 are able to track faults and 1992 errors, classify them and report them to software. 1993 1994 On CPUs with these extensions system software can use additional 1995 barriers to determine if faults are pending and read the 1996 classification from a new set of registers. 1997 1998 Selecting this feature will allow the kernel to use these barriers 1999 and access the new registers if the system supports the extension. 2000 Platform RAS features may additionally depend on firmware support. 2001 2002config ARM64_CNP 2003 bool "Enable support for Common Not Private (CNP) translations" 2004 default y 2005 help 2006 Common Not Private (CNP) allows translation table entries to 2007 be shared between different PEs in the same inner shareable 2008 domain, so the hardware can use this fact to optimise the 2009 caching of such entries in the TLB. 2010 2011 Selecting this option allows the CNP feature to be detected 2012 at runtime, and does not affect PEs that do not implement 2013 this feature. 2014 2015endmenu # "ARMv8.2 architectural features" 2016 2017menu "ARMv8.3 architectural features" 2018 2019config ARM64_PTR_AUTH 2020 bool "Enable support for pointer authentication" 2021 default y 2022 help 2023 Pointer authentication (part of the ARMv8.3 Extensions) provides 2024 instructions for signing and authenticating pointers against secret 2025 keys, which can be used to mitigate Return Oriented Programming (ROP) 2026 and other attacks. 2027 2028 This option enables these instructions at EL0 (i.e. for userspace). 2029 Choosing this option will cause the kernel to initialise secret keys 2030 for each process at exec() time, with these keys being 2031 context-switched along with the process. 2032 2033 The feature is detected at runtime. If the feature is not present in 2034 hardware it will not be advertised to userspace/KVM guest nor will it 2035 be enabled. 2036 2037 If the feature is present on the boot CPU but not on a late CPU, then 2038 the late CPU will be parked. Also, if the boot CPU does not have 2039 address auth and the late CPU has then the late CPU will still boot 2040 but with the feature disabled. On such a system, this option should 2041 not be selected. 2042 2043config ARM64_PTR_AUTH_KERNEL 2044 bool "Use pointer authentication for kernel" 2045 default y 2046 depends on ARM64_PTR_AUTH 2047 # Modern compilers insert a .note.gnu.property section note for PAC 2048 # which is only understood by binutils starting with version 2.33.1. 2049 depends on LD_IS_LLD || LD_VERSION >= 23301 || (CC_IS_GCC && GCC_VERSION < 90100) 2050 depends on !CC_IS_CLANG || AS_HAS_CFI_NEGATE_RA_STATE 2051 depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_ARGS) 2052 help 2053 If the compiler supports the -mbranch-protection or 2054 -msign-return-address flag (e.g. GCC 7 or later), then this option 2055 will cause the kernel itself to be compiled with return address 2056 protection. In this case, and if the target hardware is known to 2057 support pointer authentication, then CONFIG_STACKPROTECTOR can be 2058 disabled with minimal loss of protection. 2059 2060 This feature works with FUNCTION_GRAPH_TRACER option only if 2061 DYNAMIC_FTRACE_WITH_ARGS is enabled. 2062 2063config CC_HAS_BRANCH_PROT_PAC_RET 2064 # GCC 9 or later, clang 8 or later 2065 def_bool $(cc-option,-mbranch-protection=pac-ret+leaf) 2066 2067config AS_HAS_CFI_NEGATE_RA_STATE 2068 # binutils 2.34+ 2069 def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n) 2070 2071endmenu # "ARMv8.3 architectural features" 2072 2073menu "ARMv8.4 architectural features" 2074 2075config ARM64_AMU_EXTN 2076 bool "Enable support for the Activity Monitors Unit CPU extension" 2077 default y 2078 help 2079 The activity monitors extension is an optional extension introduced 2080 by the ARMv8.4 CPU architecture. This enables support for version 1 2081 of the activity monitors architecture, AMUv1. 2082 2083 To enable the use of this extension on CPUs that implement it, say Y. 2084 2085 Note that for architectural reasons, firmware _must_ implement AMU 2086 support when running on CPUs that present the activity monitors 2087 extension. The required support is present in: 2088 * Version 1.5 and later of the ARM Trusted Firmware 2089 2090 For kernels that have this configuration enabled but boot with broken 2091 firmware, you may need to say N here until the firmware is fixed. 2092 Otherwise you may experience firmware panics or lockups when 2093 accessing the counter registers. Even if you are not observing these 2094 symptoms, the values returned by the register reads might not 2095 correctly reflect reality. Most commonly, the value read will be 0, 2096 indicating that the counter is not enabled. 2097 2098config ARM64_TLB_RANGE 2099 bool "Enable support for tlbi range feature" 2100 default y 2101 help 2102 ARMv8.4-TLBI provides TLBI invalidation instruction that apply to a 2103 range of input addresses. 2104 2105config ARM64_MPAM 2106 bool "Enable support for MPAM" 2107 select ARM64_MPAM_DRIVER 2108 select ARCH_HAS_CPU_RESCTRL 2109 help 2110 Memory System Resource Partitioning and Monitoring (MPAM) is an 2111 optional extension to the Arm architecture that allows each 2112 transaction issued to the memory system to be labelled with a 2113 Partition identifier (PARTID) and Performance Monitoring Group 2114 identifier (PMG). 2115 2116 Memory system components, such as the caches, can be configured with 2117 policies to control how much of various physical resources (such as 2118 memory bandwidth or cache memory) the transactions labelled with each 2119 PARTID can consume. Depending on the capabilities of the hardware, 2120 the PARTID and PMG can also be used as filtering criteria to measure 2121 the memory system resource consumption of different parts of a 2122 workload. 2123 2124 Use of this extension requires CPU support, support in the 2125 Memory System Components (MSC), and a description from firmware 2126 of where the MSCs are in the address space. 2127 2128 MPAM is exposed to user-space via the resctrl pseudo filesystem. 2129 2130 This option enables the extra context switch code. 2131 2132endmenu # "ARMv8.4 architectural features" 2133 2134menu "ARMv8.5 architectural features" 2135 2136config AS_HAS_ARMV8_5 2137 def_bool $(cc-option,-Wa$(comma)-march=armv8.5-a) 2138 2139config ARM64_BTI 2140 bool "Branch Target Identification support" 2141 default y 2142 help 2143 Branch Target Identification (part of the ARMv8.5 Extensions) 2144 provides a mechanism to limit the set of locations to which computed 2145 branch instructions such as BR or BLR can jump. 2146 2147 To make use of BTI on CPUs that support it, say Y. 2148 2149 BTI is intended to provide complementary protection to other control 2150 flow integrity protection mechanisms, such as the Pointer 2151 authentication mechanism provided as part of the ARMv8.3 Extensions. 2152 For this reason, it does not make sense to enable this option without 2153 also enabling support for pointer authentication. Thus, when 2154 enabling this option you should also select ARM64_PTR_AUTH=y. 2155 2156 Userspace binaries must also be specifically compiled to make use of 2157 this mechanism. If you say N here or the hardware does not support 2158 BTI, such binaries can still run, but you get no additional 2159 enforcement of branch destinations. 2160 2161config ARM64_BTI_KERNEL 2162 bool "Use Branch Target Identification for kernel" 2163 default y 2164 depends on ARM64_BTI 2165 depends on ARM64_PTR_AUTH_KERNEL 2166 depends on CC_HAS_BRANCH_PROT_PAC_RET_BTI 2167 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94697 2168 depends on !CC_IS_GCC || GCC_VERSION >= 100100 2169 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106671 2170 depends on !CC_IS_GCC 2171 # https://github.com/llvm/llvm-project/issues/215547 2172 depends on !CC_IS_CLANG || CLANG_VERSION < 210000 2173 depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_ARGS) 2174 help 2175 Build the kernel with Branch Target Identification annotations 2176 and enable enforcement of this for kernel code. When this option 2177 is enabled and the system supports BTI all kernel code including 2178 modular code must have BTI enabled. 2179 2180config CC_HAS_BRANCH_PROT_PAC_RET_BTI 2181 # GCC 9 or later, clang 8 or later 2182 def_bool $(cc-option,-mbranch-protection=pac-ret+leaf+bti) 2183 2184config ARM64_E0PD 2185 bool "Enable support for E0PD" 2186 default y 2187 help 2188 E0PD (part of the ARMv8.5 extensions) allows us to ensure 2189 that EL0 accesses made via TTBR1 always fault in constant time, 2190 providing similar benefits to KASLR as those provided by KPTI, but 2191 with lower overhead and without disrupting legitimate access to 2192 kernel memory such as SPE. 2193 2194 This option enables E0PD for TTBR1 where available. 2195 2196config ARM64_AS_HAS_MTE 2197 # Initial support for MTE went in binutils 2.32.0, checked with 2198 # ".arch armv8.5-a+memtag" below. However, this was incomplete 2199 # as a late addition to the final architecture spec (LDGM/STGM) 2200 # is only supported in the newer 2.32.x and 2.33 binutils 2201 # versions, hence the extra "stgm" instruction check below. 2202 def_bool $(as-instr,.arch armv8.5-a+memtag\nstgm xzr$(comma)[x0]) 2203 2204config ARM64_MTE 2205 bool "Memory Tagging Extension support" 2206 default y 2207 depends on ARM64_AS_HAS_MTE && ARM64_TAGGED_ADDR_ABI 2208 depends on AS_HAS_ARMV8_5 2209 # Required for tag checking in the uaccess routines 2210 select ARCH_HAS_SUBPAGE_FAULTS 2211 select ARCH_USES_HIGH_VMA_FLAGS 2212 select ARCH_USES_PG_ARCH_2 2213 select ARCH_USES_PG_ARCH_3 2214 help 2215 Memory Tagging (part of the ARMv8.5 Extensions) provides 2216 architectural support for run-time, always-on detection of 2217 various classes of memory error to aid with software debugging 2218 to eliminate vulnerabilities arising from memory-unsafe 2219 languages. 2220 2221 This option enables the support for the Memory Tagging 2222 Extension at EL0 (i.e. for userspace). 2223 2224 Selecting this option allows the feature to be detected at 2225 runtime. Any secondary CPU not implementing this feature will 2226 not be allowed a late bring-up. 2227 2228 Userspace binaries that want to use this feature must 2229 explicitly opt in. The mechanism for the userspace is 2230 described in: 2231 2232 Documentation/arch/arm64/memory-tagging-extension.rst. 2233 2234endmenu # "ARMv8.5 architectural features" 2235 2236menu "ARMv8.7 architectural features" 2237 2238config ARM64_EPAN 2239 bool "Enable support for Enhanced Privileged Access Never (EPAN)" 2240 default y 2241 help 2242 Enhanced Privileged Access Never (EPAN) allows Privileged 2243 Access Never to be used with Execute-only mappings. 2244 2245 The feature is detected at runtime, and will remain disabled 2246 if the cpu does not implement the feature. 2247endmenu # "ARMv8.7 architectural features" 2248 2249config AS_HAS_MOPS 2250 def_bool $(as-instr,.arch_extension mops) 2251 2252menu "ARMv8.9 architectural features" 2253 2254config ARM64_POE 2255 prompt "Permission Overlay Extension" 2256 def_bool y 2257 select ARCH_USES_HIGH_VMA_FLAGS 2258 select ARCH_HAS_PKEYS 2259 help 2260 The Permission Overlay Extension is used to implement Memory 2261 Protection Keys. Memory Protection Keys provides a mechanism for 2262 enforcing page-based protections, but without requiring modification 2263 of the page tables when an application changes protection domains. 2264 2265 For details, see Documentation/core-api/protection-keys.rst 2266 2267 If unsure, say y. 2268 2269config ARCH_PKEY_BITS 2270 int 2271 default 3 2272 2273config ARM64_HAFT 2274 bool "Support for Hardware managed Access Flag for Table Descriptors" 2275 depends on ARM64_HW_AFDBM 2276 default y 2277 help 2278 The ARMv8.9/ARMv9.5 introduces the feature Hardware managed Access 2279 Flag for Table descriptors. When enabled an architectural executed 2280 memory access will update the Access Flag in each Table descriptor 2281 which is accessed during the translation table walk and for which 2282 the Access Flag is 0. The Access Flag of the Table descriptor use 2283 the same bit of PTE_AF. 2284 2285 The feature will only be enabled if all the CPUs in the system 2286 support this feature. If unsure, say Y. 2287 2288endmenu # "ARMv8.9 architectural features" 2289 2290menu "ARMv9.4 architectural features" 2291 2292config ARM64_GCS 2293 bool "Enable support for Guarded Control Stack (GCS)" 2294 default y 2295 select ARCH_HAS_USER_SHADOW_STACK 2296 select ARCH_USES_HIGH_VMA_FLAGS 2297 help 2298 Guarded Control Stack (GCS) provides support for a separate 2299 stack with restricted access which contains only return 2300 addresses. This can be used to harden against some attacks 2301 by comparing return address used by the program with what is 2302 stored in the GCS, and may also be used to efficiently obtain 2303 the call stack for applications such as profiling. 2304 2305 The feature is detected at runtime, and will remain disabled 2306 if the system does not implement the feature. 2307 2308endmenu # "ARMv9.4 architectural features" 2309 2310config AS_HAS_LSUI 2311 def_bool $(as-instr,.arch_extension lsui) 2312 help 2313 Supported by LLVM 20+ and binutils 2.45+. 2314 2315menu "ARMv9.6 architectural features" 2316 2317config ARM64_LSUI 2318 bool "Support Unprivileged Load Store Instructions (LSUI)" 2319 default y 2320 depends on AS_HAS_LSUI && !CPU_BIG_ENDIAN 2321 help 2322 The Unprivileged Load Store Instructions (LSUI) provides 2323 variants load/store instructions that access user-space memory 2324 from the kernel without clearing PSTATE.PAN bit. 2325 2326 This feature is supported by LLVM 20+ and binutils 2.45+. 2327 2328endmenu # "ARMv9.6 architectural feature" 2329 2330config ARM64_SVE 2331 bool "ARM Scalable Vector Extension support" 2332 default y 2333 help 2334 The Scalable Vector Extension (SVE) is an extension to the AArch64 2335 execution state which complements and extends the SIMD functionality 2336 of the base architecture to support much larger vectors and to enable 2337 additional vectorisation opportunities. 2338 2339 To enable use of this extension on CPUs that implement it, say Y. 2340 2341 On CPUs that support the SVE2 extensions, this option will enable 2342 those too. 2343 2344 Note that for architectural reasons, firmware _must_ implement SVE 2345 support when running on SVE capable hardware. The required support 2346 is present in: 2347 2348 * version 1.5 and later of the ARM Trusted Firmware 2349 * the AArch64 boot wrapper since commit 5e1261e08abf 2350 ("bootwrapper: SVE: Enable SVE for EL2 and below"). 2351 2352 For other firmware implementations, consult the firmware documentation 2353 or vendor. 2354 2355 If you need the kernel to boot on SVE-capable hardware with broken 2356 firmware, you may need to say N here until you get your firmware 2357 fixed. Otherwise, you may experience firmware panics or lockups when 2358 booting the kernel. If unsure and you are not observing these 2359 symptoms, you should assume that it is safe to say Y. 2360 2361config AS_HAS_SME 2362 # Supported by LLVM 13+ and binutils 2.38+ 2363 def_bool $(as-instr,.arch_extension sme) 2364 2365config ARM64_SME 2366 bool "ARM Scalable Matrix Extension support" 2367 default y 2368 depends on ARM64_SVE 2369 depends on AS_HAS_SME 2370 help 2371 The Scalable Matrix Extension (SME) is an extension to the AArch64 2372 execution state which utilises a substantial subset of the SVE 2373 instruction set, together with the addition of new architectural 2374 register state capable of holding two dimensional matrix tiles to 2375 enable various matrix operations. 2376 2377config ARM64_PSEUDO_NMI 2378 bool "Support for NMI-like interrupts" 2379 select ARM_GIC_V3 2380 help 2381 Adds support for mimicking Non-Maskable Interrupts through the use of 2382 GIC interrupt priority. This support requires version 3 or later of 2383 ARM GIC. 2384 2385 This high priority configuration for interrupts needs to be 2386 explicitly enabled by setting the kernel parameter 2387 "irqchip.gicv3_pseudo_nmi" to 1. 2388 2389 If unsure, say N 2390 2391if ARM64_PSEUDO_NMI 2392config ARM64_DEBUG_PRIORITY_MASKING 2393 bool "Debug interrupt priority masking" 2394 help 2395 This adds runtime checks to functions enabling/disabling 2396 interrupts when using priority masking. The additional checks verify 2397 the validity of ICC_PMR_EL1 when calling concerned functions. 2398 2399 If unsure, say N 2400endif # ARM64_PSEUDO_NMI 2401 2402config RELOCATABLE 2403 bool "Build a relocatable kernel image" if EXPERT 2404 select ARCH_HAS_RELR 2405 default y 2406 help 2407 This builds the kernel as a Position Independent Executable (PIE), 2408 which retains all relocation metadata required to relocate the 2409 kernel binary at runtime to a different virtual address than the 2410 address it was linked at. 2411 Since AArch64 uses the RELA relocation format, this requires a 2412 relocation pass at runtime even if the kernel is loaded at the 2413 same address it was linked at. 2414 2415config RANDOMIZE_BASE 2416 bool "Randomize the address of the kernel image" 2417 select RELOCATABLE 2418 help 2419 Randomizes the virtual address at which the kernel image is 2420 loaded, as a security feature that deters exploit attempts 2421 relying on knowledge of the location of kernel internals. 2422 2423 It is the bootloader's job to provide entropy, by passing a 2424 random u64 value in /chosen/kaslr-seed at kernel entry. 2425 2426 When booting via the UEFI stub, it will invoke the firmware's 2427 EFI_RNG_PROTOCOL implementation (if available) to supply entropy 2428 to the kernel proper. In addition, it will randomise the physical 2429 location of the kernel Image as well. 2430 2431 If unsure, say N. 2432 2433config RANDOMIZE_MODULE_REGION_FULL 2434 bool "Randomize the module region over a 2 GB range" 2435 depends on RANDOMIZE_BASE 2436 default y 2437 help 2438 Randomizes the location of the module region inside a 2 GB window 2439 covering the core kernel. This way, it is less likely for modules 2440 to leak information about the location of core kernel data structures 2441 but it does imply that function calls between modules and the core 2442 kernel will need to be resolved via veneers in the module PLT. 2443 2444 When this option is not set, the module region will be randomized over 2445 a limited range that contains the [_stext, _etext] interval of the 2446 core kernel, so branch relocations are almost always in range unless 2447 the region is exhausted. In this particular case of region 2448 exhaustion, modules might be able to fall back to a larger 2GB area. 2449 2450config CC_HAVE_STACKPROTECTOR_SYSREG 2451 def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0) 2452 2453config STACKPROTECTOR_PER_TASK 2454 def_bool y 2455 depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_SYSREG 2456 2457config UNWIND_PATCH_PAC_INTO_SCS 2458 bool "Enable shadow call stack dynamically using code patching" 2459 depends on CC_IS_CLANG 2460 depends on ARM64_PTR_AUTH_KERNEL && CC_HAS_BRANCH_PROT_PAC_RET 2461 depends on SHADOW_CALL_STACK 2462 select UNWIND_TABLES 2463 select DYNAMIC_SCS 2464 2465config ARM64_CONTPTE 2466 bool "Contiguous PTE mappings for user memory" if EXPERT 2467 depends on TRANSPARENT_HUGEPAGE 2468 default y 2469 help 2470 When enabled, user mappings are configured using the PTE contiguous 2471 bit, for any mappings that meet the size and alignment requirements. 2472 This reduces TLB pressure and improves performance. 2473 2474endmenu # "Kernel Features" 2475 2476menu "Boot options" 2477 2478config ARM64_ACPI_PARKING_PROTOCOL 2479 bool "Enable support for the ARM64 ACPI parking protocol" 2480 depends on ACPI 2481 help 2482 Enable support for the ARM64 ACPI parking protocol. If disabled 2483 the kernel will not allow booting through the ARM64 ACPI parking 2484 protocol even if the corresponding data is present in the ACPI 2485 MADT table. 2486 2487config CMDLINE 2488 string "Default kernel command string" 2489 default "" 2490 help 2491 Provide a set of default command-line options at build time by 2492 entering them here. As a minimum, you should specify the 2493 root device (e.g. root=/dev/nfs). 2494 2495choice 2496 prompt "Kernel command line type" 2497 depends on CMDLINE != "" 2498 default CMDLINE_FROM_BOOTLOADER 2499 help 2500 Choose how the kernel will handle the provided default kernel 2501 command line string. 2502 2503config CMDLINE_FROM_BOOTLOADER 2504 bool "Use bootloader kernel arguments if available" 2505 help 2506 Uses the command-line options passed by the boot loader. If 2507 the boot loader doesn't provide any, the default kernel command 2508 string provided in CMDLINE will be used. 2509 2510config CMDLINE_FORCE 2511 bool "Always use the default kernel command string" 2512 help 2513 Always use the default kernel command string, even if the boot 2514 loader passes other arguments to the kernel. 2515 This is useful if you cannot or don't want to change the 2516 command-line options your boot loader passes to the kernel. 2517 2518endchoice 2519 2520config EFI_STUB 2521 bool 2522 2523config EFI 2524 bool "UEFI runtime support" 2525 depends on OF && !CPU_BIG_ENDIAN 2526 depends on KERNEL_MODE_NEON 2527 select ARCH_SUPPORTS_ACPI 2528 select LIBFDT 2529 select UCS2_STRING 2530 select EFI_PARAMS_FROM_FDT 2531 select EFI_RUNTIME_WRAPPERS 2532 select EFI_STUB 2533 select EFI_GENERIC_STUB 2534 imply IMA_SECURE_AND_OR_TRUSTED_BOOT 2535 default y 2536 help 2537 This option provides support for runtime services provided 2538 by UEFI firmware (such as non-volatile variables, realtime 2539 clock, and platform reset). A UEFI stub is also provided to 2540 allow the kernel to be booted as an EFI application. This 2541 is only useful on systems that have UEFI firmware. 2542 2543config COMPRESSED_INSTALL 2544 bool "Install compressed image by default" 2545 help 2546 This makes the regular "make install" install the compressed 2547 image we built, not the legacy uncompressed one. 2548 2549 You can check that a compressed image works for you by doing 2550 "make zinstall" first, and verifying that everything is fine 2551 in your environment before making "make install" do this for 2552 you. 2553 2554config DMI 2555 bool "Enable support for SMBIOS (DMI) tables" 2556 depends on EFI 2557 default y 2558 help 2559 This enables SMBIOS/DMI feature for systems. 2560 2561 This option is only useful on systems that have UEFI firmware. 2562 However, even with this option, the resultant kernel should 2563 continue to boot on existing non-UEFI platforms. 2564 2565endmenu # "Boot options" 2566 2567menu "Power management options" 2568 2569source "kernel/power/Kconfig" 2570 2571config ARCH_HIBERNATION_POSSIBLE 2572 def_bool y 2573 depends on CPU_PM 2574 2575config ARCH_HIBERNATION_HEADER 2576 def_bool y 2577 depends on HIBERNATION 2578 2579config ARCH_SUSPEND_POSSIBLE 2580 def_bool y 2581 2582endmenu # "Power management options" 2583 2584menu "CPU Power Management" 2585 2586source "drivers/cpuidle/Kconfig" 2587 2588source "drivers/cpufreq/Kconfig" 2589 2590endmenu # "CPU Power Management" 2591 2592source "drivers/acpi/Kconfig" 2593 2594source "arch/arm64/kvm/Kconfig" 2595 2596source "kernel/livepatch/Kconfig" 2597