162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ciconfig ARM
362306a36Sopenharmony_ci	bool
462306a36Sopenharmony_ci	default y
562306a36Sopenharmony_ci	select ARCH_32BIT_OFF_T
662306a36Sopenharmony_ci	select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE if HAVE_KRETPROBES && FRAME_POINTER && !ARM_UNWIND
762306a36Sopenharmony_ci	select ARCH_HAS_BINFMT_FLAT
862306a36Sopenharmony_ci	select ARCH_HAS_CPU_FINALIZE_INIT if MMU
962306a36Sopenharmony_ci	select ARCH_HAS_CURRENT_STACK_POINTER
1062306a36Sopenharmony_ci	select ARCH_HAS_DEBUG_VIRTUAL if MMU
1162306a36Sopenharmony_ci	select ARCH_HAS_DMA_WRITE_COMBINE if !ARM_DMA_MEM_BUFFERABLE
1262306a36Sopenharmony_ci	select ARCH_HAS_ELF_RANDOMIZE
1362306a36Sopenharmony_ci	select ARCH_HAS_FORTIFY_SOURCE
1462306a36Sopenharmony_ci	select ARCH_HAS_KEEPINITRD
1562306a36Sopenharmony_ci	select ARCH_HAS_KCOV
1662306a36Sopenharmony_ci	select ARCH_HAS_MEMBARRIER_SYNC_CORE
1762306a36Sopenharmony_ci	select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
1862306a36Sopenharmony_ci	select ARCH_HAS_PTE_SPECIAL if ARM_LPAE
1962306a36Sopenharmony_ci	select ARCH_HAS_SETUP_DMA_OPS
2062306a36Sopenharmony_ci	select ARCH_HAS_SET_MEMORY
2162306a36Sopenharmony_ci	select ARCH_STACKWALK
2262306a36Sopenharmony_ci	select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL
2362306a36Sopenharmony_ci	select ARCH_HAS_STRICT_MODULE_RWX if MMU
2462306a36Sopenharmony_ci	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
2562306a36Sopenharmony_ci	select ARCH_HAS_SYNC_DMA_FOR_CPU
2662306a36Sopenharmony_ci	select ARCH_HAS_TEARDOWN_DMA_OPS if MMU
2762306a36Sopenharmony_ci	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
2862306a36Sopenharmony_ci	select ARCH_HAVE_NMI_SAFE_CMPXCHG if CPU_V7 || CPU_V7M || CPU_V6K
2962306a36Sopenharmony_ci	select ARCH_HAS_GCOV_PROFILE_ALL
3062306a36Sopenharmony_ci	select ARCH_KEEP_MEMBLOCK
3162306a36Sopenharmony_ci	select ARCH_HAS_UBSAN_SANITIZE_ALL
3262306a36Sopenharmony_ci	select ARCH_MIGHT_HAVE_PC_PARPORT
3362306a36Sopenharmony_ci	select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
3462306a36Sopenharmony_ci	select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7
3562306a36Sopenharmony_ci	select ARCH_SUPPORTS_ATOMIC_RMW
3662306a36Sopenharmony_ci	select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE
3762306a36Sopenharmony_ci	select ARCH_USE_BUILTIN_BSWAP
3862306a36Sopenharmony_ci	select ARCH_USE_CMPXCHG_LOCKREF
3962306a36Sopenharmony_ci	select ARCH_USE_MEMTEST
4062306a36Sopenharmony_ci	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
4162306a36Sopenharmony_ci	select ARCH_WANT_GENERAL_HUGETLB
4262306a36Sopenharmony_ci	select ARCH_WANT_IPC_PARSE_VERSION
4362306a36Sopenharmony_ci	select ARCH_WANT_LD_ORPHAN_WARN
4462306a36Sopenharmony_ci	select BINFMT_FLAT_ARGVP_ENVP_ON_STACK
4562306a36Sopenharmony_ci	select BUILDTIME_TABLE_SORT if MMU
4662306a36Sopenharmony_ci	select COMMON_CLK if !(ARCH_RPC || ARCH_FOOTBRIDGE)
4762306a36Sopenharmony_ci	select CLONE_BACKWARDS
4862306a36Sopenharmony_ci	select CPU_PM if SUSPEND || CPU_IDLE
4962306a36Sopenharmony_ci	select DCACHE_WORD_ACCESS if HAVE_EFFICIENT_UNALIGNED_ACCESS
5062306a36Sopenharmony_ci	select DMA_DECLARE_COHERENT
5162306a36Sopenharmony_ci	select DMA_GLOBAL_POOL if !MMU
5262306a36Sopenharmony_ci	select DMA_OPS
5362306a36Sopenharmony_ci	select DMA_NONCOHERENT_MMAP if MMU
5462306a36Sopenharmony_ci	select EDAC_SUPPORT
5562306a36Sopenharmony_ci	select EDAC_ATOMIC_SCRUB
5662306a36Sopenharmony_ci	select GENERIC_ALLOCATOR
5762306a36Sopenharmony_ci	select GENERIC_ARCH_TOPOLOGY if ARM_CPU_TOPOLOGY
5862306a36Sopenharmony_ci	select GENERIC_ATOMIC64 if CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI
5962306a36Sopenharmony_ci	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
6062306a36Sopenharmony_ci	select GENERIC_IRQ_IPI if SMP
6162306a36Sopenharmony_ci	select GENERIC_CPU_AUTOPROBE
6262306a36Sopenharmony_ci	select GENERIC_EARLY_IOREMAP
6362306a36Sopenharmony_ci	select GENERIC_IDLE_POLL_SETUP
6462306a36Sopenharmony_ci	select GENERIC_IRQ_MULTI_HANDLER
6562306a36Sopenharmony_ci	select GENERIC_IRQ_PROBE
6662306a36Sopenharmony_ci	select GENERIC_IRQ_SHOW
6762306a36Sopenharmony_ci	select GENERIC_IRQ_SHOW_LEVEL
6862306a36Sopenharmony_ci	select GENERIC_LIB_DEVMEM_IS_ALLOWED
6962306a36Sopenharmony_ci	select GENERIC_PCI_IOMAP
7062306a36Sopenharmony_ci	select GENERIC_SCHED_CLOCK
7162306a36Sopenharmony_ci	select GENERIC_SMP_IDLE_THREAD
7262306a36Sopenharmony_ci	select HARDIRQS_SW_RESEND
7362306a36Sopenharmony_ci	select HAS_IOPORT
7462306a36Sopenharmony_ci	select HAVE_ARCH_AUDITSYSCALL if AEABI && !OABI_COMPAT
7562306a36Sopenharmony_ci	select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
7662306a36Sopenharmony_ci	select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
7762306a36Sopenharmony_ci	select HAVE_ARCH_KFENCE if MMU && !XIP_KERNEL
7862306a36Sopenharmony_ci	select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
7962306a36Sopenharmony_ci	select HAVE_ARCH_KASAN if MMU && !XIP_KERNEL
8062306a36Sopenharmony_ci	select HAVE_ARCH_KASAN_VMALLOC if HAVE_ARCH_KASAN
8162306a36Sopenharmony_ci	select HAVE_ARCH_MMAP_RND_BITS if MMU
8262306a36Sopenharmony_ci	select HAVE_ARCH_PFN_VALID
8362306a36Sopenharmony_ci	select HAVE_ARCH_SECCOMP
8462306a36Sopenharmony_ci	select HAVE_ARCH_SECCOMP_FILTER if AEABI && !OABI_COMPAT
8562306a36Sopenharmony_ci	select HAVE_ARCH_THREAD_STRUCT_WHITELIST
8662306a36Sopenharmony_ci	select HAVE_ARCH_TRACEHOOK
8762306a36Sopenharmony_ci	select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARM_LPAE
8862306a36Sopenharmony_ci	select HAVE_ARM_SMCCC if CPU_V7
8962306a36Sopenharmony_ci	select HAVE_EBPF_JIT if !CPU_ENDIAN_BE32
9062306a36Sopenharmony_ci	select HAVE_CONTEXT_TRACKING_USER
9162306a36Sopenharmony_ci	select HAVE_C_RECORDMCOUNT
9262306a36Sopenharmony_ci	select HAVE_BUILDTIME_MCOUNT_SORT
9362306a36Sopenharmony_ci	select HAVE_DEBUG_KMEMLEAK if !XIP_KERNEL
9462306a36Sopenharmony_ci	select HAVE_DMA_CONTIGUOUS if MMU
9562306a36Sopenharmony_ci	select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
9662306a36Sopenharmony_ci	select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
9762306a36Sopenharmony_ci	select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU
9862306a36Sopenharmony_ci	select HAVE_EXIT_THREAD
9962306a36Sopenharmony_ci	select HAVE_FAST_GUP if ARM_LPAE
10062306a36Sopenharmony_ci	select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
10162306a36Sopenharmony_ci	select HAVE_FUNCTION_ERROR_INJECTION
10262306a36Sopenharmony_ci	select HAVE_FUNCTION_GRAPH_TRACER
10362306a36Sopenharmony_ci	select HAVE_FUNCTION_TRACER if !XIP_KERNEL
10462306a36Sopenharmony_ci	select HAVE_GCC_PLUGINS
10562306a36Sopenharmony_ci	select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
10662306a36Sopenharmony_ci	select HAVE_IRQ_TIME_ACCOUNTING
10762306a36Sopenharmony_ci	select HAVE_KERNEL_GZIP
10862306a36Sopenharmony_ci	select HAVE_KERNEL_LZ4
10962306a36Sopenharmony_ci	select HAVE_KERNEL_LZMA
11062306a36Sopenharmony_ci	select HAVE_KERNEL_LZO
11162306a36Sopenharmony_ci	select HAVE_KERNEL_XZ
11262306a36Sopenharmony_ci	select HAVE_KPROBES if !XIP_KERNEL && !CPU_ENDIAN_BE32 && !CPU_V7M
11362306a36Sopenharmony_ci	select HAVE_KRETPROBES if HAVE_KPROBES
11462306a36Sopenharmony_ci	select HAVE_MOD_ARCH_SPECIFIC
11562306a36Sopenharmony_ci	select HAVE_NMI
11662306a36Sopenharmony_ci	select HAVE_OPTPROBES if !THUMB2_KERNEL
11762306a36Sopenharmony_ci	select HAVE_PCI if MMU
11862306a36Sopenharmony_ci	select HAVE_PERF_EVENTS
11962306a36Sopenharmony_ci	select HAVE_PERF_REGS
12062306a36Sopenharmony_ci	select HAVE_PERF_USER_STACK_DUMP
12162306a36Sopenharmony_ci	select MMU_GATHER_RCU_TABLE_FREE if SMP && ARM_LPAE
12262306a36Sopenharmony_ci	select HAVE_REGS_AND_STACK_ACCESS_API
12362306a36Sopenharmony_ci	select HAVE_RSEQ
12462306a36Sopenharmony_ci	select HAVE_STACKPROTECTOR
12562306a36Sopenharmony_ci	select HAVE_SYSCALL_TRACEPOINTS
12662306a36Sopenharmony_ci	select HAVE_UID16
12762306a36Sopenharmony_ci	select HAVE_VIRT_CPU_ACCOUNTING_GEN
12862306a36Sopenharmony_ci	select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU
12962306a36Sopenharmony_ci	select IRQ_FORCED_THREADING
13062306a36Sopenharmony_ci	select LOCK_MM_AND_FIND_VMA
13162306a36Sopenharmony_ci	select MODULES_USE_ELF_REL
13262306a36Sopenharmony_ci	select NEED_DMA_MAP_STATE
13362306a36Sopenharmony_ci	select OF_EARLY_FLATTREE if OF
13462306a36Sopenharmony_ci	select OLD_SIGACTION
13562306a36Sopenharmony_ci	select OLD_SIGSUSPEND3
13662306a36Sopenharmony_ci	select PCI_DOMAINS_GENERIC if PCI
13762306a36Sopenharmony_ci	select PCI_SYSCALL if PCI
13862306a36Sopenharmony_ci	select PERF_USE_VMALLOC
13962306a36Sopenharmony_ci	select RTC_LIB
14062306a36Sopenharmony_ci	select SPARSE_IRQ if !(ARCH_FOOTBRIDGE || ARCH_RPC)
14162306a36Sopenharmony_ci	select SYS_SUPPORTS_APM_EMULATION
14262306a36Sopenharmony_ci	select THREAD_INFO_IN_TASK
14362306a36Sopenharmony_ci	select TIMER_OF if OF
14462306a36Sopenharmony_ci	select HAVE_ARCH_VMAP_STACK if MMU && ARM_HAS_GROUP_RELOCS
14562306a36Sopenharmony_ci	select TRACE_IRQFLAGS_SUPPORT if !CPU_V7M
14662306a36Sopenharmony_ci	select USE_OF if !(ARCH_FOOTBRIDGE || ARCH_RPC || ARCH_SA1100)
14762306a36Sopenharmony_ci	# Above selects are sorted alphabetically; please add new ones
14862306a36Sopenharmony_ci	# according to that.  Thanks.
14962306a36Sopenharmony_ci	help
15062306a36Sopenharmony_ci	  The ARM series is a line of low-power-consumption RISC chip designs
15162306a36Sopenharmony_ci	  licensed by ARM Ltd and targeted at embedded applications and
15262306a36Sopenharmony_ci	  handhelds such as the Compaq IPAQ.  ARM-based PCs are no longer
15362306a36Sopenharmony_ci	  manufactured, but legacy ARM-based PC hardware remains popular in
15462306a36Sopenharmony_ci	  Europe.  There is an ARM Linux project with a web page at
15562306a36Sopenharmony_ci	  <http://www.arm.linux.org.uk/>.
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciconfig ARM_HAS_GROUP_RELOCS
15862306a36Sopenharmony_ci	def_bool y
15962306a36Sopenharmony_ci	depends on !LD_IS_LLD || LLD_VERSION >= 140000
16062306a36Sopenharmony_ci	depends on !COMPILE_TEST
16162306a36Sopenharmony_ci	help
16262306a36Sopenharmony_ci	  Whether or not to use R_ARM_ALU_PC_Gn or R_ARM_LDR_PC_Gn group
16362306a36Sopenharmony_ci	  relocations, which have been around for a long time, but were not
16462306a36Sopenharmony_ci	  supported in LLD until version 14. The combined range is -/+ 256 MiB,
16562306a36Sopenharmony_ci	  which is usually sufficient, but not for allyesconfig, so we disable
16662306a36Sopenharmony_ci	  this feature when doing compile testing.
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ciconfig ARM_DMA_USE_IOMMU
16962306a36Sopenharmony_ci	bool
17062306a36Sopenharmony_ci	select NEED_SG_DMA_LENGTH
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ciif ARM_DMA_USE_IOMMU
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ciconfig ARM_DMA_IOMMU_ALIGNMENT
17562306a36Sopenharmony_ci	int "Maximum PAGE_SIZE order of alignment for DMA IOMMU buffers"
17662306a36Sopenharmony_ci	range 4 9
17762306a36Sopenharmony_ci	default 8
17862306a36Sopenharmony_ci	help
17962306a36Sopenharmony_ci	  DMA mapping framework by default aligns all buffers to the smallest
18062306a36Sopenharmony_ci	  PAGE_SIZE order which is greater than or equal to the requested buffer
18162306a36Sopenharmony_ci	  size. This works well for buffers up to a few hundreds kilobytes, but
18262306a36Sopenharmony_ci	  for larger buffers it just a waste of address space. Drivers which has
18362306a36Sopenharmony_ci	  relatively small addressing window (like 64Mib) might run out of
18462306a36Sopenharmony_ci	  virtual space with just a few allocations.
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci	  With this parameter you can specify the maximum PAGE_SIZE order for
18762306a36Sopenharmony_ci	  DMA IOMMU buffers. Larger buffers will be aligned only to this
18862306a36Sopenharmony_ci	  specified order. The order is expressed as a power of two multiplied
18962306a36Sopenharmony_ci	  by the PAGE_SIZE.
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ciendif
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ciconfig SYS_SUPPORTS_APM_EMULATION
19462306a36Sopenharmony_ci	bool
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ciconfig HAVE_TCM
19762306a36Sopenharmony_ci	bool
19862306a36Sopenharmony_ci	select GENERIC_ALLOCATOR
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ciconfig HAVE_PROC_CPU
20162306a36Sopenharmony_ci	bool
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ciconfig NO_IOPORT_MAP
20462306a36Sopenharmony_ci	bool
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ciconfig SBUS
20762306a36Sopenharmony_ci	bool
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ciconfig STACKTRACE_SUPPORT
21062306a36Sopenharmony_ci	bool
21162306a36Sopenharmony_ci	default y
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ciconfig LOCKDEP_SUPPORT
21462306a36Sopenharmony_ci	bool
21562306a36Sopenharmony_ci	default y
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ciconfig ARCH_HAS_ILOG2_U32
21862306a36Sopenharmony_ci	bool
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ciconfig ARCH_HAS_ILOG2_U64
22162306a36Sopenharmony_ci	bool
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ciconfig ARCH_HAS_BANDGAP
22462306a36Sopenharmony_ci	bool
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ciconfig FIX_EARLYCON_MEM
22762306a36Sopenharmony_ci	def_bool y if MMU
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciconfig GENERIC_HWEIGHT
23062306a36Sopenharmony_ci	bool
23162306a36Sopenharmony_ci	default y
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ciconfig GENERIC_CALIBRATE_DELAY
23462306a36Sopenharmony_ci	bool
23562306a36Sopenharmony_ci	default y
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ciconfig ARCH_MAY_HAVE_PC_FDC
23862306a36Sopenharmony_ci	bool
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciconfig ARCH_SUPPORTS_UPROBES
24162306a36Sopenharmony_ci	def_bool y
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ciconfig GENERIC_ISA_DMA
24462306a36Sopenharmony_ci	bool
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ciconfig FIQ
24762306a36Sopenharmony_ci	bool
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ciconfig ARCH_MTD_XIP
25062306a36Sopenharmony_ci	bool
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciconfig ARM_PATCH_PHYS_VIRT
25362306a36Sopenharmony_ci	bool "Patch physical to virtual translations at runtime" if !ARCH_MULTIPLATFORM
25462306a36Sopenharmony_ci	default y
25562306a36Sopenharmony_ci	depends on MMU
25662306a36Sopenharmony_ci	help
25762306a36Sopenharmony_ci	  Patch phys-to-virt and virt-to-phys translation functions at
25862306a36Sopenharmony_ci	  boot and module load time according to the position of the
25962306a36Sopenharmony_ci	  kernel in system memory.
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	  This can only be used with non-XIP MMU kernels where the base
26262306a36Sopenharmony_ci	  of physical memory is at a 2 MiB boundary.
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci	  Only disable this option if you know that you do not require
26562306a36Sopenharmony_ci	  this feature (eg, building a kernel for a single machine) and
26662306a36Sopenharmony_ci	  you need to shrink the kernel to the minimal size.
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ciconfig NEED_MACH_IO_H
26962306a36Sopenharmony_ci	bool
27062306a36Sopenharmony_ci	help
27162306a36Sopenharmony_ci	  Select this when mach/io.h is required to provide special
27262306a36Sopenharmony_ci	  definitions for this platform.  The need for mach/io.h should
27362306a36Sopenharmony_ci	  be avoided when possible.
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ciconfig NEED_MACH_MEMORY_H
27662306a36Sopenharmony_ci	bool
27762306a36Sopenharmony_ci	help
27862306a36Sopenharmony_ci	  Select this when mach/memory.h is required to provide special
27962306a36Sopenharmony_ci	  definitions for this platform.  The need for mach/memory.h should
28062306a36Sopenharmony_ci	  be avoided when possible.
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ciconfig PHYS_OFFSET
28362306a36Sopenharmony_ci	hex "Physical address of main memory" if MMU
28462306a36Sopenharmony_ci	depends on !ARM_PATCH_PHYS_VIRT || !AUTO_ZRELADDR
28562306a36Sopenharmony_ci	default DRAM_BASE if !MMU
28662306a36Sopenharmony_ci	default 0x00000000 if ARCH_FOOTBRIDGE
28762306a36Sopenharmony_ci	default 0x10000000 if ARCH_OMAP1 || ARCH_RPC
28862306a36Sopenharmony_ci	default 0xa0000000 if ARCH_PXA
28962306a36Sopenharmony_ci	default 0xc0000000 if ARCH_EP93XX || ARCH_SA1100
29062306a36Sopenharmony_ci	default 0
29162306a36Sopenharmony_ci	help
29262306a36Sopenharmony_ci	  Please provide the physical address corresponding to the
29362306a36Sopenharmony_ci	  location of main memory in your system.
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ciconfig GENERIC_BUG
29662306a36Sopenharmony_ci	def_bool y
29762306a36Sopenharmony_ci	depends on BUG
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ciconfig PGTABLE_LEVELS
30062306a36Sopenharmony_ci	int
30162306a36Sopenharmony_ci	default 3 if ARM_LPAE
30262306a36Sopenharmony_ci	default 2
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_cimenu "System Type"
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ciconfig MMU
30762306a36Sopenharmony_ci	bool "MMU-based Paged Memory Management Support"
30862306a36Sopenharmony_ci	default y
30962306a36Sopenharmony_ci	help
31062306a36Sopenharmony_ci	  Select if you want MMU-based virtualised addressing space
31162306a36Sopenharmony_ci	  support by paged memory management. If unsure, say 'Y'.
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ciconfig ARM_SINGLE_ARMV7M
31462306a36Sopenharmony_ci	def_bool !MMU
31562306a36Sopenharmony_ci	select ARM_NVIC
31662306a36Sopenharmony_ci	select CPU_V7M
31762306a36Sopenharmony_ci	select NO_IOPORT_MAP
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ciconfig ARCH_MMAP_RND_BITS_MIN
32062306a36Sopenharmony_ci	default 8
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciconfig ARCH_MMAP_RND_BITS_MAX
32362306a36Sopenharmony_ci	default 14 if PAGE_OFFSET=0x40000000
32462306a36Sopenharmony_ci	default 15 if PAGE_OFFSET=0x80000000
32562306a36Sopenharmony_ci	default 16
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ciconfig ARCH_MULTIPLATFORM
32862306a36Sopenharmony_ci	bool "Require kernel to be portable to multiple machines" if EXPERT
32962306a36Sopenharmony_ci	depends on MMU && !(ARCH_FOOTBRIDGE || ARCH_RPC || ARCH_SA1100)
33062306a36Sopenharmony_ci	default y
33162306a36Sopenharmony_ci	help
33262306a36Sopenharmony_ci	  In general, all Arm machines can be supported in a single
33362306a36Sopenharmony_ci	  kernel image, covering either Armv4/v5 or Armv6/v7.
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ci	  However, some configuration options require hardcoding machine
33662306a36Sopenharmony_ci	  specific physical addresses or enable errata workarounds that may
33762306a36Sopenharmony_ci	  break other machines.
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci	  Selecting N here allows using those options, including
34062306a36Sopenharmony_ci	  DEBUG_UNCOMPRESS, XIP_KERNEL and ZBOOT_ROM. If unsure, say Y.
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_cimenu "Platform selection"
34362306a36Sopenharmony_ci	depends on MMU
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_cicomment "CPU Core family selection"
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ciconfig ARCH_MULTI_V4
34862306a36Sopenharmony_ci	bool "ARMv4 based platforms (FA526, StrongARM)"
34962306a36Sopenharmony_ci	depends on !ARCH_MULTI_V6_V7
35062306a36Sopenharmony_ci	# https://github.com/llvm/llvm-project/issues/50764
35162306a36Sopenharmony_ci	depends on !LD_IS_LLD || LLD_VERSION >= 160000
35262306a36Sopenharmony_ci	select ARCH_MULTI_V4_V5
35362306a36Sopenharmony_ci	select CPU_FA526 if !(CPU_SA110 || CPU_SA1100)
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ciconfig ARCH_MULTI_V4T
35662306a36Sopenharmony_ci	bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
35762306a36Sopenharmony_ci	depends on !ARCH_MULTI_V6_V7
35862306a36Sopenharmony_ci	# https://github.com/llvm/llvm-project/issues/50764
35962306a36Sopenharmony_ci	depends on !LD_IS_LLD || LLD_VERSION >= 160000
36062306a36Sopenharmony_ci	select ARCH_MULTI_V4_V5
36162306a36Sopenharmony_ci	select CPU_ARM920T if !(CPU_ARM7TDMI || CPU_ARM720T || \
36262306a36Sopenharmony_ci		CPU_ARM740T || CPU_ARM9TDMI || CPU_ARM922T || \
36362306a36Sopenharmony_ci		CPU_ARM925T || CPU_ARM940T)
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_ciconfig ARCH_MULTI_V5
36662306a36Sopenharmony_ci	bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
36762306a36Sopenharmony_ci	depends on !ARCH_MULTI_V6_V7
36862306a36Sopenharmony_ci	select ARCH_MULTI_V4_V5
36962306a36Sopenharmony_ci	select CPU_ARM926T if !(CPU_ARM946E || CPU_ARM1020 || \
37062306a36Sopenharmony_ci		CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
37162306a36Sopenharmony_ci		CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ciconfig ARCH_MULTI_V4_V5
37462306a36Sopenharmony_ci	bool
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ciconfig ARCH_MULTI_V6
37762306a36Sopenharmony_ci	bool "ARMv6 based platforms (ARM11)"
37862306a36Sopenharmony_ci	select ARCH_MULTI_V6_V7
37962306a36Sopenharmony_ci	select CPU_V6K
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ciconfig ARCH_MULTI_V7
38262306a36Sopenharmony_ci	bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)"
38362306a36Sopenharmony_ci	default y
38462306a36Sopenharmony_ci	select ARCH_MULTI_V6_V7
38562306a36Sopenharmony_ci	select CPU_V7
38662306a36Sopenharmony_ci	select HAVE_SMP
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ciconfig ARCH_MULTI_V6_V7
38962306a36Sopenharmony_ci	bool
39062306a36Sopenharmony_ci	select MIGHT_HAVE_CACHE_L2X0
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ciconfig ARCH_MULTI_CPU_AUTO
39362306a36Sopenharmony_ci	def_bool !(ARCH_MULTI_V4 || ARCH_MULTI_V4T || ARCH_MULTI_V6_V7)
39462306a36Sopenharmony_ci	select ARCH_MULTI_V5
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ciendmenu
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ciconfig ARCH_VIRT
39962306a36Sopenharmony_ci	bool "Dummy Virtual Machine"
40062306a36Sopenharmony_ci	depends on ARCH_MULTI_V7
40162306a36Sopenharmony_ci	select ARM_AMBA
40262306a36Sopenharmony_ci	select ARM_GIC
40362306a36Sopenharmony_ci	select ARM_GIC_V2M if PCI
40462306a36Sopenharmony_ci	select ARM_GIC_V3
40562306a36Sopenharmony_ci	select ARM_GIC_V3_ITS if PCI
40662306a36Sopenharmony_ci	select ARM_PSCI
40762306a36Sopenharmony_ci	select HAVE_ARM_ARCH_TIMER
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ciconfig ARCH_AIROHA
41062306a36Sopenharmony_ci	bool "Airoha SoC Support"
41162306a36Sopenharmony_ci	depends on ARCH_MULTI_V7
41262306a36Sopenharmony_ci	select ARM_AMBA
41362306a36Sopenharmony_ci	select ARM_GIC
41462306a36Sopenharmony_ci	select ARM_GIC_V3
41562306a36Sopenharmony_ci	select ARM_PSCI
41662306a36Sopenharmony_ci	select HAVE_ARM_ARCH_TIMER
41762306a36Sopenharmony_ci	help
41862306a36Sopenharmony_ci	  Support for Airoha EN7523 SoCs
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci#
42162306a36Sopenharmony_ci# This is sorted alphabetically by mach-* pathname.  However, plat-*
42262306a36Sopenharmony_ci# Kconfigs may be included either alphabetically (according to the
42362306a36Sopenharmony_ci# plat- suffix) or along side the corresponding mach-* source.
42462306a36Sopenharmony_ci#
42562306a36Sopenharmony_cisource "arch/arm/mach-actions/Kconfig"
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_cisource "arch/arm/mach-alpine/Kconfig"
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_cisource "arch/arm/mach-artpec/Kconfig"
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_cisource "arch/arm/mach-asm9260/Kconfig"
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_cisource "arch/arm/mach-aspeed/Kconfig"
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_cisource "arch/arm/mach-at91/Kconfig"
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_cisource "arch/arm/mach-axxia/Kconfig"
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_cisource "arch/arm/mach-bcm/Kconfig"
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_cisource "arch/arm/mach-berlin/Kconfig"
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_cisource "arch/arm/mach-clps711x/Kconfig"
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_cisource "arch/arm/mach-davinci/Kconfig"
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_cisource "arch/arm/mach-digicolor/Kconfig"
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_cisource "arch/arm/mach-dove/Kconfig"
45062306a36Sopenharmony_ci
45162306a36Sopenharmony_cisource "arch/arm/mach-ep93xx/Kconfig"
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_cisource "arch/arm/mach-exynos/Kconfig"
45462306a36Sopenharmony_ci
45562306a36Sopenharmony_cisource "arch/arm/mach-footbridge/Kconfig"
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_cisource "arch/arm/mach-gemini/Kconfig"
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_cisource "arch/arm/mach-highbank/Kconfig"
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_cisource "arch/arm/mach-hisi/Kconfig"
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_cisource "arch/arm/mach-hpe/Kconfig"
46462306a36Sopenharmony_ci
46562306a36Sopenharmony_cisource "arch/arm/mach-imx/Kconfig"
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_cisource "arch/arm/mach-ixp4xx/Kconfig"
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_cisource "arch/arm/mach-keystone/Kconfig"
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_cisource "arch/arm/mach-lpc32xx/Kconfig"
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_cisource "arch/arm/mach-mediatek/Kconfig"
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_cisource "arch/arm/mach-meson/Kconfig"
47662306a36Sopenharmony_ci
47762306a36Sopenharmony_cisource "arch/arm/mach-milbeaut/Kconfig"
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_cisource "arch/arm/mach-mmp/Kconfig"
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_cisource "arch/arm/mach-moxart/Kconfig"
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_cisource "arch/arm/mach-mstar/Kconfig"
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_cisource "arch/arm/mach-mv78xx0/Kconfig"
48662306a36Sopenharmony_ci
48762306a36Sopenharmony_cisource "arch/arm/mach-mvebu/Kconfig"
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_cisource "arch/arm/mach-mxs/Kconfig"
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_cisource "arch/arm/mach-nomadik/Kconfig"
49262306a36Sopenharmony_ci
49362306a36Sopenharmony_cisource "arch/arm/mach-npcm/Kconfig"
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_cisource "arch/arm/mach-nspire/Kconfig"
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_cisource "arch/arm/mach-omap1/Kconfig"
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_cisource "arch/arm/mach-omap2/Kconfig"
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_cisource "arch/arm/mach-orion5x/Kconfig"
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_cisource "arch/arm/mach-pxa/Kconfig"
50462306a36Sopenharmony_ci
50562306a36Sopenharmony_cisource "arch/arm/mach-qcom/Kconfig"
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_cisource "arch/arm/mach-rda/Kconfig"
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_cisource "arch/arm/mach-realtek/Kconfig"
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_cisource "arch/arm/mach-rpc/Kconfig"
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_cisource "arch/arm/mach-rockchip/Kconfig"
51462306a36Sopenharmony_ci
51562306a36Sopenharmony_cisource "arch/arm/mach-s3c/Kconfig"
51662306a36Sopenharmony_ci
51762306a36Sopenharmony_cisource "arch/arm/mach-s5pv210/Kconfig"
51862306a36Sopenharmony_ci
51962306a36Sopenharmony_cisource "arch/arm/mach-sa1100/Kconfig"
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_cisource "arch/arm/mach-shmobile/Kconfig"
52262306a36Sopenharmony_ci
52362306a36Sopenharmony_cisource "arch/arm/mach-socfpga/Kconfig"
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_cisource "arch/arm/mach-spear/Kconfig"
52662306a36Sopenharmony_ci
52762306a36Sopenharmony_cisource "arch/arm/mach-sti/Kconfig"
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_cisource "arch/arm/mach-stm32/Kconfig"
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_cisource "arch/arm/mach-sunplus/Kconfig"
53262306a36Sopenharmony_ci
53362306a36Sopenharmony_cisource "arch/arm/mach-sunxi/Kconfig"
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_cisource "arch/arm/mach-tegra/Kconfig"
53662306a36Sopenharmony_ci
53762306a36Sopenharmony_cisource "arch/arm/mach-uniphier/Kconfig"
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_cisource "arch/arm/mach-ux500/Kconfig"
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_cisource "arch/arm/mach-versatile/Kconfig"
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_cisource "arch/arm/mach-vt8500/Kconfig"
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_cisource "arch/arm/mach-zynq/Kconfig"
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_ci# ARMv7-M architecture
54862306a36Sopenharmony_ciconfig ARCH_LPC18XX
54962306a36Sopenharmony_ci	bool "NXP LPC18xx/LPC43xx"
55062306a36Sopenharmony_ci	depends on ARM_SINGLE_ARMV7M
55162306a36Sopenharmony_ci	select ARCH_HAS_RESET_CONTROLLER
55262306a36Sopenharmony_ci	select ARM_AMBA
55362306a36Sopenharmony_ci	select CLKSRC_LPC32XX
55462306a36Sopenharmony_ci	select PINCTRL
55562306a36Sopenharmony_ci	help
55662306a36Sopenharmony_ci	  Support for NXP's LPC18xx Cortex-M3 and LPC43xx Cortex-M4
55762306a36Sopenharmony_ci	  high performance microcontrollers.
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_ciconfig ARCH_MPS2
56062306a36Sopenharmony_ci	bool "ARM MPS2 platform"
56162306a36Sopenharmony_ci	depends on ARM_SINGLE_ARMV7M
56262306a36Sopenharmony_ci	select ARM_AMBA
56362306a36Sopenharmony_ci	select CLKSRC_MPS2
56462306a36Sopenharmony_ci	help
56562306a36Sopenharmony_ci	  Support for Cortex-M Prototyping System (or V2M-MPS2) which comes
56662306a36Sopenharmony_ci	  with a range of available cores like Cortex-M3/M4/M7.
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ci	  Please, note that depends which Application Note is used memory map
56962306a36Sopenharmony_ci	  for the platform may vary, so adjustment of RAM base might be needed.
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ci# Definitions to make life easier
57262306a36Sopenharmony_ciconfig ARCH_ACORN
57362306a36Sopenharmony_ci	bool
57462306a36Sopenharmony_ci
57562306a36Sopenharmony_ciconfig PLAT_ORION
57662306a36Sopenharmony_ci	bool
57762306a36Sopenharmony_ci	select CLKSRC_MMIO
57862306a36Sopenharmony_ci	select GENERIC_IRQ_CHIP
57962306a36Sopenharmony_ci	select IRQ_DOMAIN
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_ciconfig PLAT_ORION_LEGACY
58262306a36Sopenharmony_ci	bool
58362306a36Sopenharmony_ci	select PLAT_ORION
58462306a36Sopenharmony_ci
58562306a36Sopenharmony_ciconfig PLAT_VERSATILE
58662306a36Sopenharmony_ci	bool
58762306a36Sopenharmony_ci
58862306a36Sopenharmony_cisource "arch/arm/mm/Kconfig"
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ciconfig IWMMXT
59162306a36Sopenharmony_ci	bool "Enable iWMMXt support"
59262306a36Sopenharmony_ci	depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 || CPU_PJ4B
59362306a36Sopenharmony_ci	default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4 || CPU_PJ4B
59462306a36Sopenharmony_ci	help
59562306a36Sopenharmony_ci	  Enable support for iWMMXt context switching at run time if
59662306a36Sopenharmony_ci	  running on a CPU that supports it.
59762306a36Sopenharmony_ci
59862306a36Sopenharmony_ciif !MMU
59962306a36Sopenharmony_cisource "arch/arm/Kconfig-nommu"
60062306a36Sopenharmony_ciendif
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ciconfig PJ4B_ERRATA_4742
60362306a36Sopenharmony_ci	bool "PJ4B Errata 4742: IDLE Wake Up Commands can Cause the CPU Core to Cease Operation"
60462306a36Sopenharmony_ci	depends on CPU_PJ4B && MACH_ARMADA_370
60562306a36Sopenharmony_ci	default y
60662306a36Sopenharmony_ci	help
60762306a36Sopenharmony_ci	  When coming out of either a Wait for Interrupt (WFI) or a Wait for
60862306a36Sopenharmony_ci	  Event (WFE) IDLE states, a specific timing sensitivity exists between
60962306a36Sopenharmony_ci	  the retiring WFI/WFE instructions and the newly issued subsequent
61062306a36Sopenharmony_ci	  instructions.  This sensitivity can result in a CPU hang scenario.
61162306a36Sopenharmony_ci	  Workaround:
61262306a36Sopenharmony_ci	  The software must insert either a Data Synchronization Barrier (DSB)
61362306a36Sopenharmony_ci	  or Data Memory Barrier (DMB) command immediately after the WFI/WFE
61462306a36Sopenharmony_ci	  instruction
61562306a36Sopenharmony_ci
61662306a36Sopenharmony_ciconfig ARM_ERRATA_326103
61762306a36Sopenharmony_ci	bool "ARM errata: FSR write bit incorrect on a SWP to read-only memory"
61862306a36Sopenharmony_ci	depends on CPU_V6
61962306a36Sopenharmony_ci	help
62062306a36Sopenharmony_ci	  Executing a SWP instruction to read-only memory does not set bit 11
62162306a36Sopenharmony_ci	  of the FSR on the ARM 1136 prior to r1p0. This causes the kernel to
62262306a36Sopenharmony_ci	  treat the access as a read, preventing a COW from occurring and
62362306a36Sopenharmony_ci	  causing the faulting task to livelock.
62462306a36Sopenharmony_ci
62562306a36Sopenharmony_ciconfig ARM_ERRATA_411920
62662306a36Sopenharmony_ci	bool "ARM errata: Invalidation of the Instruction Cache operation can fail"
62762306a36Sopenharmony_ci	depends on CPU_V6 || CPU_V6K
62862306a36Sopenharmony_ci	help
62962306a36Sopenharmony_ci	  Invalidation of the Instruction Cache operation can
63062306a36Sopenharmony_ci	  fail. This erratum is present in 1136 (before r1p4), 1156 and 1176.
63162306a36Sopenharmony_ci	  It does not affect the MPCore. This option enables the ARM Ltd.
63262306a36Sopenharmony_ci	  recommended workaround.
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_ciconfig ARM_ERRATA_430973
63562306a36Sopenharmony_ci	bool "ARM errata: Stale prediction on replaced interworking branch"
63662306a36Sopenharmony_ci	depends on CPU_V7
63762306a36Sopenharmony_ci	help
63862306a36Sopenharmony_ci	  This option enables the workaround for the 430973 Cortex-A8
63962306a36Sopenharmony_ci	  r1p* erratum. If a code sequence containing an ARM/Thumb
64062306a36Sopenharmony_ci	  interworking branch is replaced with another code sequence at the
64162306a36Sopenharmony_ci	  same virtual address, whether due to self-modifying code or virtual
64262306a36Sopenharmony_ci	  to physical address re-mapping, Cortex-A8 does not recover from the
64362306a36Sopenharmony_ci	  stale interworking branch prediction. This results in Cortex-A8
64462306a36Sopenharmony_ci	  executing the new code sequence in the incorrect ARM or Thumb state.
64562306a36Sopenharmony_ci	  The workaround enables the BTB/BTAC operations by setting ACTLR.IBE
64662306a36Sopenharmony_ci	  and also flushes the branch target cache at every context switch.
64762306a36Sopenharmony_ci	  Note that setting specific bits in the ACTLR register may not be
64862306a36Sopenharmony_ci	  available in non-secure mode.
64962306a36Sopenharmony_ci
65062306a36Sopenharmony_ciconfig ARM_ERRATA_458693
65162306a36Sopenharmony_ci	bool "ARM errata: Processor deadlock when a false hazard is created"
65262306a36Sopenharmony_ci	depends on CPU_V7
65362306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
65462306a36Sopenharmony_ci	help
65562306a36Sopenharmony_ci	  This option enables the workaround for the 458693 Cortex-A8 (r2p0)
65662306a36Sopenharmony_ci	  erratum. For very specific sequences of memory operations, it is
65762306a36Sopenharmony_ci	  possible for a hazard condition intended for a cache line to instead
65862306a36Sopenharmony_ci	  be incorrectly associated with a different cache line. This false
65962306a36Sopenharmony_ci	  hazard might then cause a processor deadlock. The workaround enables
66062306a36Sopenharmony_ci	  the L1 caching of the NEON accesses and disables the PLD instruction
66162306a36Sopenharmony_ci	  in the ACTLR register. Note that setting specific bits in the ACTLR
66262306a36Sopenharmony_ci	  register may not be available in non-secure mode and thus is not
66362306a36Sopenharmony_ci	  available on a multiplatform kernel. This should be applied by the
66462306a36Sopenharmony_ci	  bootloader instead.
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_ciconfig ARM_ERRATA_460075
66762306a36Sopenharmony_ci	bool "ARM errata: Data written to the L2 cache can be overwritten with stale data"
66862306a36Sopenharmony_ci	depends on CPU_V7
66962306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
67062306a36Sopenharmony_ci	help
67162306a36Sopenharmony_ci	  This option enables the workaround for the 460075 Cortex-A8 (r2p0)
67262306a36Sopenharmony_ci	  erratum. Any asynchronous access to the L2 cache may encounter a
67362306a36Sopenharmony_ci	  situation in which recent store transactions to the L2 cache are lost
67462306a36Sopenharmony_ci	  and overwritten with stale memory contents from external memory. The
67562306a36Sopenharmony_ci	  workaround disables the write-allocate mode for the L2 cache via the
67662306a36Sopenharmony_ci	  ACTLR register. Note that setting specific bits in the ACTLR register
67762306a36Sopenharmony_ci	  may not be available in non-secure mode and thus is not available on
67862306a36Sopenharmony_ci	  a multiplatform kernel. This should be applied by the bootloader
67962306a36Sopenharmony_ci	  instead.
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ciconfig ARM_ERRATA_742230
68262306a36Sopenharmony_ci	bool "ARM errata: DMB operation may be faulty"
68362306a36Sopenharmony_ci	depends on CPU_V7 && SMP
68462306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
68562306a36Sopenharmony_ci	help
68662306a36Sopenharmony_ci	  This option enables the workaround for the 742230 Cortex-A9
68762306a36Sopenharmony_ci	  (r1p0..r2p2) erratum. Under rare circumstances, a DMB instruction
68862306a36Sopenharmony_ci	  between two write operations may not ensure the correct visibility
68962306a36Sopenharmony_ci	  ordering of the two writes. This workaround sets a specific bit in
69062306a36Sopenharmony_ci	  the diagnostic register of the Cortex-A9 which causes the DMB
69162306a36Sopenharmony_ci	  instruction to behave as a DSB, ensuring the correct behaviour of
69262306a36Sopenharmony_ci	  the two writes. Note that setting specific bits in the diagnostics
69362306a36Sopenharmony_ci	  register may not be available in non-secure mode and thus is not
69462306a36Sopenharmony_ci	  available on a multiplatform kernel. This should be applied by the
69562306a36Sopenharmony_ci	  bootloader instead.
69662306a36Sopenharmony_ci
69762306a36Sopenharmony_ciconfig ARM_ERRATA_742231
69862306a36Sopenharmony_ci	bool "ARM errata: Incorrect hazard handling in the SCU may lead to data corruption"
69962306a36Sopenharmony_ci	depends on CPU_V7 && SMP
70062306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
70162306a36Sopenharmony_ci	help
70262306a36Sopenharmony_ci	  This option enables the workaround for the 742231 Cortex-A9
70362306a36Sopenharmony_ci	  (r2p0..r2p2) erratum. Under certain conditions, specific to the
70462306a36Sopenharmony_ci	  Cortex-A9 MPCore micro-architecture, two CPUs working in SMP mode,
70562306a36Sopenharmony_ci	  accessing some data located in the same cache line, may get corrupted
70662306a36Sopenharmony_ci	  data due to bad handling of the address hazard when the line gets
70762306a36Sopenharmony_ci	  replaced from one of the CPUs at the same time as another CPU is
70862306a36Sopenharmony_ci	  accessing it. This workaround sets specific bits in the diagnostic
70962306a36Sopenharmony_ci	  register of the Cortex-A9 which reduces the linefill issuing
71062306a36Sopenharmony_ci	  capabilities of the processor. Note that setting specific bits in the
71162306a36Sopenharmony_ci	  diagnostics register may not be available in non-secure mode and thus
71262306a36Sopenharmony_ci	  is not available on a multiplatform kernel. This should be applied by
71362306a36Sopenharmony_ci	  the bootloader instead.
71462306a36Sopenharmony_ci
71562306a36Sopenharmony_ciconfig ARM_ERRATA_643719
71662306a36Sopenharmony_ci	bool "ARM errata: LoUIS bit field in CLIDR register is incorrect"
71762306a36Sopenharmony_ci	depends on CPU_V7 && SMP
71862306a36Sopenharmony_ci	default y
71962306a36Sopenharmony_ci	help
72062306a36Sopenharmony_ci	  This option enables the workaround for the 643719 Cortex-A9 (prior to
72162306a36Sopenharmony_ci	  r1p0) erratum. On affected cores the LoUIS bit field of the CLIDR
72262306a36Sopenharmony_ci	  register returns zero when it should return one. The workaround
72362306a36Sopenharmony_ci	  corrects this value, ensuring cache maintenance operations which use
72462306a36Sopenharmony_ci	  it behave as intended and avoiding data corruption.
72562306a36Sopenharmony_ci
72662306a36Sopenharmony_ciconfig ARM_ERRATA_720789
72762306a36Sopenharmony_ci	bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID"
72862306a36Sopenharmony_ci	depends on CPU_V7
72962306a36Sopenharmony_ci	help
73062306a36Sopenharmony_ci	  This option enables the workaround for the 720789 Cortex-A9 (prior to
73162306a36Sopenharmony_ci	  r2p0) erratum. A faulty ASID can be sent to the other CPUs for the
73262306a36Sopenharmony_ci	  broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS.
73362306a36Sopenharmony_ci	  As a consequence of this erratum, some TLB entries which should be
73462306a36Sopenharmony_ci	  invalidated are not, resulting in an incoherency in the system page
73562306a36Sopenharmony_ci	  tables. The workaround changes the TLB flushing routines to invalidate
73662306a36Sopenharmony_ci	  entries regardless of the ASID.
73762306a36Sopenharmony_ci
73862306a36Sopenharmony_ciconfig ARM_ERRATA_743622
73962306a36Sopenharmony_ci	bool "ARM errata: Faulty hazard checking in the Store Buffer may lead to data corruption"
74062306a36Sopenharmony_ci	depends on CPU_V7
74162306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
74262306a36Sopenharmony_ci	help
74362306a36Sopenharmony_ci	  This option enables the workaround for the 743622 Cortex-A9
74462306a36Sopenharmony_ci	  (r2p*) erratum. Under very rare conditions, a faulty
74562306a36Sopenharmony_ci	  optimisation in the Cortex-A9 Store Buffer may lead to data
74662306a36Sopenharmony_ci	  corruption. This workaround sets a specific bit in the diagnostic
74762306a36Sopenharmony_ci	  register of the Cortex-A9 which disables the Store Buffer
74862306a36Sopenharmony_ci	  optimisation, preventing the defect from occurring. This has no
74962306a36Sopenharmony_ci	  visible impact on the overall performance or power consumption of the
75062306a36Sopenharmony_ci	  processor. Note that setting specific bits in the diagnostics register
75162306a36Sopenharmony_ci	  may not be available in non-secure mode and thus is not available on a
75262306a36Sopenharmony_ci	  multiplatform kernel. This should be applied by the bootloader instead.
75362306a36Sopenharmony_ci
75462306a36Sopenharmony_ciconfig ARM_ERRATA_751472
75562306a36Sopenharmony_ci	bool "ARM errata: Interrupted ICIALLUIS may prevent completion of broadcasted operation"
75662306a36Sopenharmony_ci	depends on CPU_V7
75762306a36Sopenharmony_ci	depends on !ARCH_MULTIPLATFORM
75862306a36Sopenharmony_ci	help
75962306a36Sopenharmony_ci	  This option enables the workaround for the 751472 Cortex-A9 (prior
76062306a36Sopenharmony_ci	  to r3p0) erratum. An interrupted ICIALLUIS operation may prevent the
76162306a36Sopenharmony_ci	  completion of a following broadcasted operation if the second
76262306a36Sopenharmony_ci	  operation is received by a CPU before the ICIALLUIS has completed,
76362306a36Sopenharmony_ci	  potentially leading to corrupted entries in the cache or TLB.
76462306a36Sopenharmony_ci	  Note that setting specific bits in the diagnostics register may
76562306a36Sopenharmony_ci	  not be available in non-secure mode and thus is not available on
76662306a36Sopenharmony_ci	  a multiplatform kernel. This should be applied by the bootloader
76762306a36Sopenharmony_ci	  instead.
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_ciconfig ARM_ERRATA_754322
77062306a36Sopenharmony_ci	bool "ARM errata: possible faulty MMU translations following an ASID switch"
77162306a36Sopenharmony_ci	depends on CPU_V7
77262306a36Sopenharmony_ci	help
77362306a36Sopenharmony_ci	  This option enables the workaround for the 754322 Cortex-A9 (r2p*,
77462306a36Sopenharmony_ci	  r3p*) erratum. A speculative memory access may cause a page table walk
77562306a36Sopenharmony_ci	  which starts prior to an ASID switch but completes afterwards. This
77662306a36Sopenharmony_ci	  can populate the micro-TLB with a stale entry which may be hit with
77762306a36Sopenharmony_ci	  the new ASID. This workaround places two dsb instructions in the mm
77862306a36Sopenharmony_ci	  switching code so that no page table walks can cross the ASID switch.
77962306a36Sopenharmony_ci
78062306a36Sopenharmony_ciconfig ARM_ERRATA_754327
78162306a36Sopenharmony_ci	bool "ARM errata: no automatic Store Buffer drain"
78262306a36Sopenharmony_ci	depends on CPU_V7 && SMP
78362306a36Sopenharmony_ci	help
78462306a36Sopenharmony_ci	  This option enables the workaround for the 754327 Cortex-A9 (prior to
78562306a36Sopenharmony_ci	  r2p0) erratum. The Store Buffer does not have any automatic draining
78662306a36Sopenharmony_ci	  mechanism and therefore a livelock may occur if an external agent
78762306a36Sopenharmony_ci	  continuously polls a memory location waiting to observe an update.
78862306a36Sopenharmony_ci	  This workaround defines cpu_relax() as smp_mb(), preventing correctly
78962306a36Sopenharmony_ci	  written polling loops from denying visibility of updates to memory.
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_ciconfig ARM_ERRATA_364296
79262306a36Sopenharmony_ci	bool "ARM errata: Possible cache data corruption with hit-under-miss enabled"
79362306a36Sopenharmony_ci	depends on CPU_V6
79462306a36Sopenharmony_ci	help
79562306a36Sopenharmony_ci	  This options enables the workaround for the 364296 ARM1136
79662306a36Sopenharmony_ci	  r0p2 erratum (possible cache data corruption with
79762306a36Sopenharmony_ci	  hit-under-miss enabled). It sets the undocumented bit 31 in
79862306a36Sopenharmony_ci	  the auxiliary control register and the FI bit in the control
79962306a36Sopenharmony_ci	  register, thus disabling hit-under-miss without putting the
80062306a36Sopenharmony_ci	  processor into full low interrupt latency mode. ARM11MPCore
80162306a36Sopenharmony_ci	  is not affected.
80262306a36Sopenharmony_ci
80362306a36Sopenharmony_ciconfig ARM_ERRATA_764369
80462306a36Sopenharmony_ci	bool "ARM errata: Data cache line maintenance operation by MVA may not succeed"
80562306a36Sopenharmony_ci	depends on CPU_V7 && SMP
80662306a36Sopenharmony_ci	help
80762306a36Sopenharmony_ci	  This option enables the workaround for erratum 764369
80862306a36Sopenharmony_ci	  affecting Cortex-A9 MPCore with two or more processors (all
80962306a36Sopenharmony_ci	  current revisions). Under certain timing circumstances, a data
81062306a36Sopenharmony_ci	  cache line maintenance operation by MVA targeting an Inner
81162306a36Sopenharmony_ci	  Shareable memory region may fail to proceed up to either the
81262306a36Sopenharmony_ci	  Point of Coherency or to the Point of Unification of the
81362306a36Sopenharmony_ci	  system. This workaround adds a DSB instruction before the
81462306a36Sopenharmony_ci	  relevant cache maintenance functions and sets a specific bit
81562306a36Sopenharmony_ci	  in the diagnostic control register of the SCU.
81662306a36Sopenharmony_ci
81762306a36Sopenharmony_ciconfig ARM_ERRATA_764319
81862306a36Sopenharmony_ci	bool "ARM errata: Read to DBGPRSR and DBGOSLSR may generate Undefined instruction"
81962306a36Sopenharmony_ci	depends on CPU_V7
82062306a36Sopenharmony_ci	help
82162306a36Sopenharmony_ci	  This option enables the workaround for the 764319 Cortex A-9 erratum.
82262306a36Sopenharmony_ci	  CP14 read accesses to the DBGPRSR and DBGOSLSR registers generate an
82362306a36Sopenharmony_ci	  unexpected Undefined Instruction exception when the DBGSWENABLE
82462306a36Sopenharmony_ci	  external pin is set to 0, even when the CP14 accesses are performed
82562306a36Sopenharmony_ci	  from a privileged mode. This work around catches the exception in a
82662306a36Sopenharmony_ci	  way the kernel does not stop execution.
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ciconfig ARM_ERRATA_775420
82962306a36Sopenharmony_ci       bool "ARM errata: A data cache maintenance operation which aborts, might lead to deadlock"
83062306a36Sopenharmony_ci       depends on CPU_V7
83162306a36Sopenharmony_ci       help
83262306a36Sopenharmony_ci	 This option enables the workaround for the 775420 Cortex-A9 (r2p2,
83362306a36Sopenharmony_ci	 r2p6,r2p8,r2p10,r3p0) erratum. In case a data cache maintenance
83462306a36Sopenharmony_ci	 operation aborts with MMU exception, it might cause the processor
83562306a36Sopenharmony_ci	 to deadlock. This workaround puts DSB before executing ISB if
83662306a36Sopenharmony_ci	 an abort may occur on cache maintenance.
83762306a36Sopenharmony_ci
83862306a36Sopenharmony_ciconfig ARM_ERRATA_798181
83962306a36Sopenharmony_ci	bool "ARM errata: TLBI/DSB failure on Cortex-A15"
84062306a36Sopenharmony_ci	depends on CPU_V7 && SMP
84162306a36Sopenharmony_ci	help
84262306a36Sopenharmony_ci	  On Cortex-A15 (r0p0..r3p2) the TLBI*IS/DSB operations are not
84362306a36Sopenharmony_ci	  adequately shooting down all use of the old entries. This
84462306a36Sopenharmony_ci	  option enables the Linux kernel workaround for this erratum
84562306a36Sopenharmony_ci	  which sends an IPI to the CPUs that are running the same ASID
84662306a36Sopenharmony_ci	  as the one being invalidated.
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_ciconfig ARM_ERRATA_773022
84962306a36Sopenharmony_ci	bool "ARM errata: incorrect instructions may be executed from loop buffer"
85062306a36Sopenharmony_ci	depends on CPU_V7
85162306a36Sopenharmony_ci	help
85262306a36Sopenharmony_ci	  This option enables the workaround for the 773022 Cortex-A15
85362306a36Sopenharmony_ci	  (up to r0p4) erratum. In certain rare sequences of code, the
85462306a36Sopenharmony_ci	  loop buffer may deliver incorrect instructions. This
85562306a36Sopenharmony_ci	  workaround disables the loop buffer to avoid the erratum.
85662306a36Sopenharmony_ci
85762306a36Sopenharmony_ciconfig ARM_ERRATA_818325_852422
85862306a36Sopenharmony_ci	bool "ARM errata: A12: some seqs of opposed cond code instrs => deadlock or corruption"
85962306a36Sopenharmony_ci	depends on CPU_V7
86062306a36Sopenharmony_ci	help
86162306a36Sopenharmony_ci	  This option enables the workaround for:
86262306a36Sopenharmony_ci	  - Cortex-A12 818325: Execution of an UNPREDICTABLE STR or STM
86362306a36Sopenharmony_ci	    instruction might deadlock.  Fixed in r0p1.
86462306a36Sopenharmony_ci	  - Cortex-A12 852422: Execution of a sequence of instructions might
86562306a36Sopenharmony_ci	    lead to either a data corruption or a CPU deadlock.  Not fixed in
86662306a36Sopenharmony_ci	    any Cortex-A12 cores yet.
86762306a36Sopenharmony_ci	  This workaround for all both errata involves setting bit[12] of the
86862306a36Sopenharmony_ci	  Feature Register. This bit disables an optimisation applied to a
86962306a36Sopenharmony_ci	  sequence of 2 instructions that use opposing condition codes.
87062306a36Sopenharmony_ci
87162306a36Sopenharmony_ciconfig ARM_ERRATA_821420
87262306a36Sopenharmony_ci	bool "ARM errata: A12: sequence of VMOV to core registers might lead to a dead lock"
87362306a36Sopenharmony_ci	depends on CPU_V7
87462306a36Sopenharmony_ci	help
87562306a36Sopenharmony_ci	  This option enables the workaround for the 821420 Cortex-A12
87662306a36Sopenharmony_ci	  (all revs) erratum. In very rare timing conditions, a sequence
87762306a36Sopenharmony_ci	  of VMOV to Core registers instructions, for which the second
87862306a36Sopenharmony_ci	  one is in the shadow of a branch or abort, can lead to a
87962306a36Sopenharmony_ci	  deadlock when the VMOV instructions are issued out-of-order.
88062306a36Sopenharmony_ci
88162306a36Sopenharmony_ciconfig ARM_ERRATA_825619
88262306a36Sopenharmony_ci	bool "ARM errata: A12: DMB NSHST/ISHST mixed ... might cause deadlock"
88362306a36Sopenharmony_ci	depends on CPU_V7
88462306a36Sopenharmony_ci	help
88562306a36Sopenharmony_ci	  This option enables the workaround for the 825619 Cortex-A12
88662306a36Sopenharmony_ci	  (all revs) erratum. Within rare timing constraints, executing a
88762306a36Sopenharmony_ci	  DMB NSHST or DMB ISHST instruction followed by a mix of Cacheable
88862306a36Sopenharmony_ci	  and Device/Strongly-Ordered loads and stores might cause deadlock
88962306a36Sopenharmony_ci
89062306a36Sopenharmony_ciconfig ARM_ERRATA_857271
89162306a36Sopenharmony_ci	bool "ARM errata: A12: CPU might deadlock under some very rare internal conditions"
89262306a36Sopenharmony_ci	depends on CPU_V7
89362306a36Sopenharmony_ci	help
89462306a36Sopenharmony_ci	  This option enables the workaround for the 857271 Cortex-A12
89562306a36Sopenharmony_ci	  (all revs) erratum. Under very rare timing conditions, the CPU might
89662306a36Sopenharmony_ci	  hang. The workaround is expected to have a < 1% performance impact.
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_ciconfig ARM_ERRATA_852421
89962306a36Sopenharmony_ci	bool "ARM errata: A17: DMB ST might fail to create order between stores"
90062306a36Sopenharmony_ci	depends on CPU_V7
90162306a36Sopenharmony_ci	help
90262306a36Sopenharmony_ci	  This option enables the workaround for the 852421 Cortex-A17
90362306a36Sopenharmony_ci	  (r1p0, r1p1, r1p2) erratum. Under very rare timing conditions,
90462306a36Sopenharmony_ci	  execution of a DMB ST instruction might fail to properly order
90562306a36Sopenharmony_ci	  stores from GroupA and stores from GroupB.
90662306a36Sopenharmony_ci
90762306a36Sopenharmony_ciconfig ARM_ERRATA_852423
90862306a36Sopenharmony_ci	bool "ARM errata: A17: some seqs of opposed cond code instrs => deadlock or corruption"
90962306a36Sopenharmony_ci	depends on CPU_V7
91062306a36Sopenharmony_ci	help
91162306a36Sopenharmony_ci	  This option enables the workaround for:
91262306a36Sopenharmony_ci	  - Cortex-A17 852423: Execution of a sequence of instructions might
91362306a36Sopenharmony_ci	    lead to either a data corruption or a CPU deadlock.  Not fixed in
91462306a36Sopenharmony_ci	    any Cortex-A17 cores yet.
91562306a36Sopenharmony_ci	  This is identical to Cortex-A12 erratum 852422.  It is a separate
91662306a36Sopenharmony_ci	  config option from the A12 erratum due to the way errata are checked
91762306a36Sopenharmony_ci	  for and handled.
91862306a36Sopenharmony_ci
91962306a36Sopenharmony_ciconfig ARM_ERRATA_857272
92062306a36Sopenharmony_ci	bool "ARM errata: A17: CPU might deadlock under some very rare internal conditions"
92162306a36Sopenharmony_ci	depends on CPU_V7
92262306a36Sopenharmony_ci	help
92362306a36Sopenharmony_ci	  This option enables the workaround for the 857272 Cortex-A17 erratum.
92462306a36Sopenharmony_ci	  This erratum is not known to be fixed in any A17 revision.
92562306a36Sopenharmony_ci	  This is identical to Cortex-A12 erratum 857271.  It is a separate
92662306a36Sopenharmony_ci	  config option from the A12 erratum due to the way errata are checked
92762306a36Sopenharmony_ci	  for and handled.
92862306a36Sopenharmony_ci
92962306a36Sopenharmony_ciendmenu
93062306a36Sopenharmony_ci
93162306a36Sopenharmony_cisource "arch/arm/common/Kconfig"
93262306a36Sopenharmony_ci
93362306a36Sopenharmony_cimenu "Bus support"
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_ciconfig ISA
93662306a36Sopenharmony_ci	bool
93762306a36Sopenharmony_ci	help
93862306a36Sopenharmony_ci	  Find out whether you have ISA slots on your motherboard.  ISA is the
93962306a36Sopenharmony_ci	  name of a bus system, i.e. the way the CPU talks to the other stuff
94062306a36Sopenharmony_ci	  inside your box.  Other bus systems are PCI, EISA, MicroChannel
94162306a36Sopenharmony_ci	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
94262306a36Sopenharmony_ci	  newer boards don't support it.  If you have ISA, say Y, otherwise N.
94362306a36Sopenharmony_ci
94462306a36Sopenharmony_ci# Select ISA DMA interface
94562306a36Sopenharmony_ciconfig ISA_DMA_API
94662306a36Sopenharmony_ci	bool
94762306a36Sopenharmony_ci
94862306a36Sopenharmony_ciconfig ARM_ERRATA_814220
94962306a36Sopenharmony_ci	bool "ARM errata: Cache maintenance by set/way operations can execute out of order"
95062306a36Sopenharmony_ci	depends on CPU_V7
95162306a36Sopenharmony_ci	help
95262306a36Sopenharmony_ci	  The v7 ARM states that all cache and branch predictor maintenance
95362306a36Sopenharmony_ci	  operations that do not specify an address execute, relative to
95462306a36Sopenharmony_ci	  each other, in program order.
95562306a36Sopenharmony_ci	  However, because of this erratum, an L2 set/way cache maintenance
95662306a36Sopenharmony_ci	  operation can overtake an L1 set/way cache maintenance operation.
95762306a36Sopenharmony_ci	  This ERRATA only affected the Cortex-A7 and present in r0p2, r0p3,
95862306a36Sopenharmony_ci	  r0p4, r0p5.
95962306a36Sopenharmony_ci
96062306a36Sopenharmony_ciendmenu
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_cimenu "Kernel Features"
96362306a36Sopenharmony_ci
96462306a36Sopenharmony_ciconfig HAVE_SMP
96562306a36Sopenharmony_ci	bool
96662306a36Sopenharmony_ci	help
96762306a36Sopenharmony_ci	  This option should be selected by machines which have an SMP-
96862306a36Sopenharmony_ci	  capable CPU.
96962306a36Sopenharmony_ci
97062306a36Sopenharmony_ci	  The only effect of this option is to make the SMP-related
97162306a36Sopenharmony_ci	  options available to the user for configuration.
97262306a36Sopenharmony_ci
97362306a36Sopenharmony_ciconfig SMP
97462306a36Sopenharmony_ci	bool "Symmetric Multi-Processing"
97562306a36Sopenharmony_ci	depends on CPU_V6K || CPU_V7
97662306a36Sopenharmony_ci	depends on HAVE_SMP
97762306a36Sopenharmony_ci	depends on MMU || ARM_MPU
97862306a36Sopenharmony_ci	select IRQ_WORK
97962306a36Sopenharmony_ci	help
98062306a36Sopenharmony_ci	  This enables support for systems with more than one CPU. If you have
98162306a36Sopenharmony_ci	  a system with only one CPU, say N. If you have a system with more
98262306a36Sopenharmony_ci	  than one CPU, say Y.
98362306a36Sopenharmony_ci
98462306a36Sopenharmony_ci	  If you say N here, the kernel will run on uni- and multiprocessor
98562306a36Sopenharmony_ci	  machines, but will use only one CPU of a multiprocessor machine. If
98662306a36Sopenharmony_ci	  you say Y here, the kernel will run on many, but not all,
98762306a36Sopenharmony_ci	  uniprocessor machines. On a uniprocessor machine, the kernel
98862306a36Sopenharmony_ci	  will run faster if you say N here.
98962306a36Sopenharmony_ci
99062306a36Sopenharmony_ci	  See also <file:Documentation/arch/x86/i386/IO-APIC.rst>,
99162306a36Sopenharmony_ci	  <file:Documentation/admin-guide/lockup-watchdogs.rst> and the SMP-HOWTO available at
99262306a36Sopenharmony_ci	  <http://tldp.org/HOWTO/SMP-HOWTO.html>.
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_ci	  If you don't know what to do here, say N.
99562306a36Sopenharmony_ci
99662306a36Sopenharmony_ciconfig SMP_ON_UP
99762306a36Sopenharmony_ci	bool "Allow booting SMP kernel on uniprocessor systems"
99862306a36Sopenharmony_ci	depends on SMP && MMU
99962306a36Sopenharmony_ci	default y
100062306a36Sopenharmony_ci	help
100162306a36Sopenharmony_ci	  SMP kernels contain instructions which fail on non-SMP processors.
100262306a36Sopenharmony_ci	  Enabling this option allows the kernel to modify itself to make
100362306a36Sopenharmony_ci	  these instructions safe.  Disabling it allows about 1K of space
100462306a36Sopenharmony_ci	  savings.
100562306a36Sopenharmony_ci
100662306a36Sopenharmony_ci	  If you don't know what to do here, say Y.
100762306a36Sopenharmony_ci
100862306a36Sopenharmony_ci
100962306a36Sopenharmony_ciconfig CURRENT_POINTER_IN_TPIDRURO
101062306a36Sopenharmony_ci	def_bool y
101162306a36Sopenharmony_ci	depends on CPU_32v6K && !CPU_V6
101262306a36Sopenharmony_ci
101362306a36Sopenharmony_ciconfig IRQSTACKS
101462306a36Sopenharmony_ci	def_bool y
101562306a36Sopenharmony_ci	select HAVE_IRQ_EXIT_ON_IRQ_STACK
101662306a36Sopenharmony_ci	select HAVE_SOFTIRQ_ON_OWN_STACK
101762306a36Sopenharmony_ci
101862306a36Sopenharmony_ciconfig ARM_CPU_TOPOLOGY
101962306a36Sopenharmony_ci	bool "Support cpu topology definition"
102062306a36Sopenharmony_ci	depends on SMP && CPU_V7
102162306a36Sopenharmony_ci	default y
102262306a36Sopenharmony_ci	help
102362306a36Sopenharmony_ci	  Support ARM cpu topology definition. The MPIDR register defines
102462306a36Sopenharmony_ci	  affinity between processors which is then used to describe the cpu
102562306a36Sopenharmony_ci	  topology of an ARM System.
102662306a36Sopenharmony_ci
102762306a36Sopenharmony_ciconfig SCHED_MC
102862306a36Sopenharmony_ci	bool "Multi-core scheduler support"
102962306a36Sopenharmony_ci	depends on ARM_CPU_TOPOLOGY
103062306a36Sopenharmony_ci	help
103162306a36Sopenharmony_ci	  Multi-core scheduler support improves the CPU scheduler's decision
103262306a36Sopenharmony_ci	  making when dealing with multi-core CPU chips at a cost of slightly
103362306a36Sopenharmony_ci	  increased overhead in some places. If unsure say N here.
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ciconfig SCHED_SMT
103662306a36Sopenharmony_ci	bool "SMT scheduler support"
103762306a36Sopenharmony_ci	depends on ARM_CPU_TOPOLOGY
103862306a36Sopenharmony_ci	help
103962306a36Sopenharmony_ci	  Improves the CPU scheduler's decision making when dealing with
104062306a36Sopenharmony_ci	  MultiThreading at a cost of slightly increased overhead in some
104162306a36Sopenharmony_ci	  places. If unsure say N here.
104262306a36Sopenharmony_ci
104362306a36Sopenharmony_ciconfig HAVE_ARM_SCU
104462306a36Sopenharmony_ci	bool
104562306a36Sopenharmony_ci	help
104662306a36Sopenharmony_ci	  This option enables support for the ARM snoop control unit
104762306a36Sopenharmony_ci
104862306a36Sopenharmony_ciconfig HAVE_ARM_ARCH_TIMER
104962306a36Sopenharmony_ci	bool "Architected timer support"
105062306a36Sopenharmony_ci	depends on CPU_V7
105162306a36Sopenharmony_ci	select ARM_ARCH_TIMER
105262306a36Sopenharmony_ci	help
105362306a36Sopenharmony_ci	  This option enables support for the ARM architected timer
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_ciconfig HAVE_ARM_TWD
105662306a36Sopenharmony_ci	bool
105762306a36Sopenharmony_ci	help
105862306a36Sopenharmony_ci	  This options enables support for the ARM timer and watchdog unit
105962306a36Sopenharmony_ci
106062306a36Sopenharmony_ciconfig MCPM
106162306a36Sopenharmony_ci	bool "Multi-Cluster Power Management"
106262306a36Sopenharmony_ci	depends on CPU_V7 && SMP
106362306a36Sopenharmony_ci	help
106462306a36Sopenharmony_ci	  This option provides the common power management infrastructure
106562306a36Sopenharmony_ci	  for (multi-)cluster based systems, such as big.LITTLE based
106662306a36Sopenharmony_ci	  systems.
106762306a36Sopenharmony_ci
106862306a36Sopenharmony_ciconfig MCPM_QUAD_CLUSTER
106962306a36Sopenharmony_ci	bool
107062306a36Sopenharmony_ci	depends on MCPM
107162306a36Sopenharmony_ci	help
107262306a36Sopenharmony_ci	  To avoid wasting resources unnecessarily, MCPM only supports up
107362306a36Sopenharmony_ci	  to 2 clusters by default.
107462306a36Sopenharmony_ci	  Platforms with 3 or 4 clusters that use MCPM must select this
107562306a36Sopenharmony_ci	  option to allow the additional clusters to be managed.
107662306a36Sopenharmony_ci
107762306a36Sopenharmony_ciconfig BIG_LITTLE
107862306a36Sopenharmony_ci	bool "big.LITTLE support (Experimental)"
107962306a36Sopenharmony_ci	depends on CPU_V7 && SMP
108062306a36Sopenharmony_ci	select MCPM
108162306a36Sopenharmony_ci	help
108262306a36Sopenharmony_ci	  This option enables support selections for the big.LITTLE
108362306a36Sopenharmony_ci	  system architecture.
108462306a36Sopenharmony_ci
108562306a36Sopenharmony_ciconfig BL_SWITCHER
108662306a36Sopenharmony_ci	bool "big.LITTLE switcher support"
108762306a36Sopenharmony_ci	depends on BIG_LITTLE && MCPM && HOTPLUG_CPU && ARM_GIC
108862306a36Sopenharmony_ci	select CPU_PM
108962306a36Sopenharmony_ci	help
109062306a36Sopenharmony_ci	  The big.LITTLE "switcher" provides the core functionality to
109162306a36Sopenharmony_ci	  transparently handle transition between a cluster of A15's
109262306a36Sopenharmony_ci	  and a cluster of A7's in a big.LITTLE system.
109362306a36Sopenharmony_ci
109462306a36Sopenharmony_ciconfig BL_SWITCHER_DUMMY_IF
109562306a36Sopenharmony_ci	tristate "Simple big.LITTLE switcher user interface"
109662306a36Sopenharmony_ci	depends on BL_SWITCHER && DEBUG_KERNEL
109762306a36Sopenharmony_ci	help
109862306a36Sopenharmony_ci	  This is a simple and dummy char dev interface to control
109962306a36Sopenharmony_ci	  the big.LITTLE switcher core code.  It is meant for
110062306a36Sopenharmony_ci	  debugging purposes only.
110162306a36Sopenharmony_ci
110262306a36Sopenharmony_cichoice
110362306a36Sopenharmony_ci	prompt "Memory split"
110462306a36Sopenharmony_ci	depends on MMU
110562306a36Sopenharmony_ci	default VMSPLIT_3G
110662306a36Sopenharmony_ci	help
110762306a36Sopenharmony_ci	  Select the desired split between kernel and user memory.
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_ci	  If you are not absolutely sure what you are doing, leave this
111062306a36Sopenharmony_ci	  option alone!
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci	config VMSPLIT_3G
111362306a36Sopenharmony_ci		bool "3G/1G user/kernel split"
111462306a36Sopenharmony_ci	config VMSPLIT_3G_OPT
111562306a36Sopenharmony_ci		depends on !ARM_LPAE
111662306a36Sopenharmony_ci		bool "3G/1G user/kernel split (for full 1G low memory)"
111762306a36Sopenharmony_ci	config VMSPLIT_2G
111862306a36Sopenharmony_ci		bool "2G/2G user/kernel split"
111962306a36Sopenharmony_ci	config VMSPLIT_1G
112062306a36Sopenharmony_ci		bool "1G/3G user/kernel split"
112162306a36Sopenharmony_ciendchoice
112262306a36Sopenharmony_ci
112362306a36Sopenharmony_ciconfig PAGE_OFFSET
112462306a36Sopenharmony_ci	hex
112562306a36Sopenharmony_ci	default PHYS_OFFSET if !MMU
112662306a36Sopenharmony_ci	default 0x40000000 if VMSPLIT_1G
112762306a36Sopenharmony_ci	default 0x80000000 if VMSPLIT_2G
112862306a36Sopenharmony_ci	default 0xB0000000 if VMSPLIT_3G_OPT
112962306a36Sopenharmony_ci	default 0xC0000000
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ciconfig KASAN_SHADOW_OFFSET
113262306a36Sopenharmony_ci	hex
113362306a36Sopenharmony_ci	depends on KASAN
113462306a36Sopenharmony_ci	default 0x1f000000 if PAGE_OFFSET=0x40000000
113562306a36Sopenharmony_ci	default 0x5f000000 if PAGE_OFFSET=0x80000000
113662306a36Sopenharmony_ci	default 0x9f000000 if PAGE_OFFSET=0xC0000000
113762306a36Sopenharmony_ci	default 0x8f000000 if PAGE_OFFSET=0xB0000000
113862306a36Sopenharmony_ci	default 0xffffffff
113962306a36Sopenharmony_ci
114062306a36Sopenharmony_ciconfig NR_CPUS
114162306a36Sopenharmony_ci	int "Maximum number of CPUs (2-32)"
114262306a36Sopenharmony_ci	range 2 16 if DEBUG_KMAP_LOCAL
114362306a36Sopenharmony_ci	range 2 32 if !DEBUG_KMAP_LOCAL
114462306a36Sopenharmony_ci	depends on SMP
114562306a36Sopenharmony_ci	default "4"
114662306a36Sopenharmony_ci	help
114762306a36Sopenharmony_ci	  The maximum number of CPUs that the kernel can support.
114862306a36Sopenharmony_ci	  Up to 32 CPUs can be supported, or up to 16 if kmap_local()
114962306a36Sopenharmony_ci	  debugging is enabled, which uses half of the per-CPU fixmap
115062306a36Sopenharmony_ci	  slots as guard regions.
115162306a36Sopenharmony_ci
115262306a36Sopenharmony_ciconfig HOTPLUG_CPU
115362306a36Sopenharmony_ci	bool "Support for hot-pluggable CPUs"
115462306a36Sopenharmony_ci	depends on SMP
115562306a36Sopenharmony_ci	select GENERIC_IRQ_MIGRATION
115662306a36Sopenharmony_ci	help
115762306a36Sopenharmony_ci	  Say Y here to experiment with turning CPUs off and on.  CPUs
115862306a36Sopenharmony_ci	  can be controlled through /sys/devices/system/cpu.
115962306a36Sopenharmony_ci
116062306a36Sopenharmony_ciconfig ARM_PSCI
116162306a36Sopenharmony_ci	bool "Support for the ARM Power State Coordination Interface (PSCI)"
116262306a36Sopenharmony_ci	depends on HAVE_ARM_SMCCC
116362306a36Sopenharmony_ci	select ARM_PSCI_FW
116462306a36Sopenharmony_ci	help
116562306a36Sopenharmony_ci	  Say Y here if you want Linux to communicate with system firmware
116662306a36Sopenharmony_ci	  implementing the PSCI specification for CPU-centric power
116762306a36Sopenharmony_ci	  management operations described in ARM document number ARM DEN
116862306a36Sopenharmony_ci	  0022A ("Power State Coordination Interface System Software on
116962306a36Sopenharmony_ci	  ARM processors").
117062306a36Sopenharmony_ci
117162306a36Sopenharmony_ciconfig HZ_FIXED
117262306a36Sopenharmony_ci	int
117362306a36Sopenharmony_ci	default 128 if SOC_AT91RM9200
117462306a36Sopenharmony_ci	default 0
117562306a36Sopenharmony_ci
117662306a36Sopenharmony_cichoice
117762306a36Sopenharmony_ci	depends on HZ_FIXED = 0
117862306a36Sopenharmony_ci	prompt "Timer frequency"
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_ciconfig HZ_100
118162306a36Sopenharmony_ci	bool "100 Hz"
118262306a36Sopenharmony_ci
118362306a36Sopenharmony_ciconfig HZ_200
118462306a36Sopenharmony_ci	bool "200 Hz"
118562306a36Sopenharmony_ci
118662306a36Sopenharmony_ciconfig HZ_250
118762306a36Sopenharmony_ci	bool "250 Hz"
118862306a36Sopenharmony_ci
118962306a36Sopenharmony_ciconfig HZ_300
119062306a36Sopenharmony_ci	bool "300 Hz"
119162306a36Sopenharmony_ci
119262306a36Sopenharmony_ciconfig HZ_500
119362306a36Sopenharmony_ci	bool "500 Hz"
119462306a36Sopenharmony_ci
119562306a36Sopenharmony_ciconfig HZ_1000
119662306a36Sopenharmony_ci	bool "1000 Hz"
119762306a36Sopenharmony_ci
119862306a36Sopenharmony_ciendchoice
119962306a36Sopenharmony_ci
120062306a36Sopenharmony_ciconfig HZ
120162306a36Sopenharmony_ci	int
120262306a36Sopenharmony_ci	default HZ_FIXED if HZ_FIXED != 0
120362306a36Sopenharmony_ci	default 100 if HZ_100
120462306a36Sopenharmony_ci	default 200 if HZ_200
120562306a36Sopenharmony_ci	default 250 if HZ_250
120662306a36Sopenharmony_ci	default 300 if HZ_300
120762306a36Sopenharmony_ci	default 500 if HZ_500
120862306a36Sopenharmony_ci	default 1000
120962306a36Sopenharmony_ci
121062306a36Sopenharmony_ciconfig SCHED_HRTICK
121162306a36Sopenharmony_ci	def_bool HIGH_RES_TIMERS
121262306a36Sopenharmony_ci
121362306a36Sopenharmony_ciconfig THUMB2_KERNEL
121462306a36Sopenharmony_ci	bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
121562306a36Sopenharmony_ci	depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
121662306a36Sopenharmony_ci	default y if CPU_THUMBONLY
121762306a36Sopenharmony_ci	select ARM_UNWIND
121862306a36Sopenharmony_ci	help
121962306a36Sopenharmony_ci	  By enabling this option, the kernel will be compiled in
122062306a36Sopenharmony_ci	  Thumb-2 mode.
122162306a36Sopenharmony_ci
122262306a36Sopenharmony_ci	  If unsure, say N.
122362306a36Sopenharmony_ci
122462306a36Sopenharmony_ciconfig ARM_PATCH_IDIV
122562306a36Sopenharmony_ci	bool "Runtime patch udiv/sdiv instructions into __aeabi_{u}idiv()"
122662306a36Sopenharmony_ci	depends on CPU_32v7
122762306a36Sopenharmony_ci	default y
122862306a36Sopenharmony_ci	help
122962306a36Sopenharmony_ci	  The ARM compiler inserts calls to __aeabi_idiv() and
123062306a36Sopenharmony_ci	  __aeabi_uidiv() when it needs to perform division on signed
123162306a36Sopenharmony_ci	  and unsigned integers. Some v7 CPUs have support for the sdiv
123262306a36Sopenharmony_ci	  and udiv instructions that can be used to implement those
123362306a36Sopenharmony_ci	  functions.
123462306a36Sopenharmony_ci
123562306a36Sopenharmony_ci	  Enabling this option allows the kernel to modify itself to
123662306a36Sopenharmony_ci	  replace the first two instructions of these library functions
123762306a36Sopenharmony_ci	  with the sdiv or udiv plus "bx lr" instructions when the CPU
123862306a36Sopenharmony_ci	  it is running on supports them. Typically this will be faster
123962306a36Sopenharmony_ci	  and less power intensive than running the original library
124062306a36Sopenharmony_ci	  code to do integer division.
124162306a36Sopenharmony_ci
124262306a36Sopenharmony_ciconfig AEABI
124362306a36Sopenharmony_ci	bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && \
124462306a36Sopenharmony_ci		!CPU_V7M && !CPU_V6 && !CPU_V6K && !CC_IS_CLANG
124562306a36Sopenharmony_ci	default CPU_V7 || CPU_V7M || CPU_V6 || CPU_V6K || CC_IS_CLANG
124662306a36Sopenharmony_ci	help
124762306a36Sopenharmony_ci	  This option allows for the kernel to be compiled using the latest
124862306a36Sopenharmony_ci	  ARM ABI (aka EABI).  This is only useful if you are using a user
124962306a36Sopenharmony_ci	  space environment that is also compiled with EABI.
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_ci	  Since there are major incompatibilities between the legacy ABI and
125262306a36Sopenharmony_ci	  EABI, especially with regard to structure member alignment, this
125362306a36Sopenharmony_ci	  option also changes the kernel syscall calling convention to
125462306a36Sopenharmony_ci	  disambiguate both ABIs and allow for backward compatibility support
125562306a36Sopenharmony_ci	  (selected with CONFIG_OABI_COMPAT).
125662306a36Sopenharmony_ci
125762306a36Sopenharmony_ci	  To use this you need GCC version 4.0.0 or later.
125862306a36Sopenharmony_ci
125962306a36Sopenharmony_ciconfig OABI_COMPAT
126062306a36Sopenharmony_ci	bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
126162306a36Sopenharmony_ci	depends on AEABI && !THUMB2_KERNEL
126262306a36Sopenharmony_ci	help
126362306a36Sopenharmony_ci	  This option preserves the old syscall interface along with the
126462306a36Sopenharmony_ci	  new (ARM EABI) one. It also provides a compatibility layer to
126562306a36Sopenharmony_ci	  intercept syscalls that have structure arguments which layout
126662306a36Sopenharmony_ci	  in memory differs between the legacy ABI and the new ARM EABI
126762306a36Sopenharmony_ci	  (only for non "thumb" binaries). This option adds a tiny
126862306a36Sopenharmony_ci	  overhead to all syscalls and produces a slightly larger kernel.
126962306a36Sopenharmony_ci
127062306a36Sopenharmony_ci	  The seccomp filter system will not be available when this is
127162306a36Sopenharmony_ci	  selected, since there is no way yet to sensibly distinguish
127262306a36Sopenharmony_ci	  between calling conventions during filtering.
127362306a36Sopenharmony_ci
127462306a36Sopenharmony_ci	  If you know you'll be using only pure EABI user space then you
127562306a36Sopenharmony_ci	  can say N here. If this option is not selected and you attempt
127662306a36Sopenharmony_ci	  to execute a legacy ABI binary then the result will be
127762306a36Sopenharmony_ci	  UNPREDICTABLE (in fact it can be predicted that it won't work
127862306a36Sopenharmony_ci	  at all). If in doubt say N.
127962306a36Sopenharmony_ci
128062306a36Sopenharmony_ciconfig ARCH_SELECT_MEMORY_MODEL
128162306a36Sopenharmony_ci	def_bool y
128262306a36Sopenharmony_ci
128362306a36Sopenharmony_ciconfig ARCH_FLATMEM_ENABLE
128462306a36Sopenharmony_ci	def_bool !(ARCH_RPC || ARCH_SA1100)
128562306a36Sopenharmony_ci
128662306a36Sopenharmony_ciconfig ARCH_SPARSEMEM_ENABLE
128762306a36Sopenharmony_ci	def_bool !ARCH_FOOTBRIDGE
128862306a36Sopenharmony_ci	select SPARSEMEM_STATIC if SPARSEMEM
128962306a36Sopenharmony_ci
129062306a36Sopenharmony_ciconfig HIGHMEM
129162306a36Sopenharmony_ci	bool "High Memory Support"
129262306a36Sopenharmony_ci	depends on MMU
129362306a36Sopenharmony_ci	select KMAP_LOCAL
129462306a36Sopenharmony_ci	select KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
129562306a36Sopenharmony_ci	help
129662306a36Sopenharmony_ci	  The address space of ARM processors is only 4 Gigabytes large
129762306a36Sopenharmony_ci	  and it has to accommodate user address space, kernel address
129862306a36Sopenharmony_ci	  space as well as some memory mapped IO. That means that, if you
129962306a36Sopenharmony_ci	  have a large amount of physical memory and/or IO, not all of the
130062306a36Sopenharmony_ci	  memory can be "permanently mapped" by the kernel. The physical
130162306a36Sopenharmony_ci	  memory that is not permanently mapped is called "high memory".
130262306a36Sopenharmony_ci
130362306a36Sopenharmony_ci	  Depending on the selected kernel/user memory split, minimum
130462306a36Sopenharmony_ci	  vmalloc space and actual amount of RAM, you may not need this
130562306a36Sopenharmony_ci	  option which should result in a slightly faster kernel.
130662306a36Sopenharmony_ci
130762306a36Sopenharmony_ci	  If unsure, say n.
130862306a36Sopenharmony_ci
130962306a36Sopenharmony_ciconfig HIGHPTE
131062306a36Sopenharmony_ci	bool "Allocate 2nd-level pagetables from highmem" if EXPERT
131162306a36Sopenharmony_ci	depends on HIGHMEM
131262306a36Sopenharmony_ci	default y
131362306a36Sopenharmony_ci	help
131462306a36Sopenharmony_ci	  The VM uses one page of physical memory for each page table.
131562306a36Sopenharmony_ci	  For systems with a lot of processes, this can use a lot of
131662306a36Sopenharmony_ci	  precious low memory, eventually leading to low memory being
131762306a36Sopenharmony_ci	  consumed by page tables.  Setting this option will allow
131862306a36Sopenharmony_ci	  user-space 2nd level page tables to reside in high memory.
131962306a36Sopenharmony_ci
132062306a36Sopenharmony_ciconfig CPU_SW_DOMAIN_PAN
132162306a36Sopenharmony_ci	bool "Enable use of CPU domains to implement privileged no-access"
132262306a36Sopenharmony_ci	depends on MMU && !ARM_LPAE
132362306a36Sopenharmony_ci	default y
132462306a36Sopenharmony_ci	help
132562306a36Sopenharmony_ci	  Increase kernel security by ensuring that normal kernel accesses
132662306a36Sopenharmony_ci	  are unable to access userspace addresses.  This can help prevent
132762306a36Sopenharmony_ci	  use-after-free bugs becoming an exploitable privilege escalation
132862306a36Sopenharmony_ci	  by ensuring that magic values (such as LIST_POISON) will always
132962306a36Sopenharmony_ci	  fault when dereferenced.
133062306a36Sopenharmony_ci
133162306a36Sopenharmony_ci	  CPUs with low-vector mappings use a best-efforts implementation.
133262306a36Sopenharmony_ci	  Their lower 1MB needs to remain accessible for the vectors, but
133362306a36Sopenharmony_ci	  the remainder of userspace will become appropriately inaccessible.
133462306a36Sopenharmony_ci
133562306a36Sopenharmony_ciconfig HW_PERF_EVENTS
133662306a36Sopenharmony_ci	def_bool y
133762306a36Sopenharmony_ci	depends on ARM_PMU
133862306a36Sopenharmony_ci
133962306a36Sopenharmony_ciconfig ARM_MODULE_PLTS
134062306a36Sopenharmony_ci	bool "Use PLTs to allow module memory to spill over into vmalloc area"
134162306a36Sopenharmony_ci	depends on MODULES
134262306a36Sopenharmony_ci	select KASAN_VMALLOC if KASAN
134362306a36Sopenharmony_ci	default y
134462306a36Sopenharmony_ci	help
134562306a36Sopenharmony_ci	  Allocate PLTs when loading modules so that jumps and calls whose
134662306a36Sopenharmony_ci	  targets are too far away for their relative offsets to be encoded
134762306a36Sopenharmony_ci	  in the instructions themselves can be bounced via veneers in the
134862306a36Sopenharmony_ci	  module's PLT. This allows modules to be allocated in the generic
134962306a36Sopenharmony_ci	  vmalloc area after the dedicated module memory area has been
135062306a36Sopenharmony_ci	  exhausted. The modules will use slightly more memory, but after
135162306a36Sopenharmony_ci	  rounding up to page size, the actual memory footprint is usually
135262306a36Sopenharmony_ci	  the same.
135362306a36Sopenharmony_ci
135462306a36Sopenharmony_ci	  Disabling this is usually safe for small single-platform
135562306a36Sopenharmony_ci	  configurations. If unsure, say y.
135662306a36Sopenharmony_ci
135762306a36Sopenharmony_ciconfig ARCH_FORCE_MAX_ORDER
135862306a36Sopenharmony_ci	int "Order of maximal physically contiguous allocations"
135962306a36Sopenharmony_ci	default "11" if SOC_AM33XX
136062306a36Sopenharmony_ci	default "8" if SA1111
136162306a36Sopenharmony_ci	default "10"
136262306a36Sopenharmony_ci	help
136362306a36Sopenharmony_ci	  The kernel page allocator limits the size of maximal physically
136462306a36Sopenharmony_ci	  contiguous allocations. The limit is called MAX_ORDER and it
136562306a36Sopenharmony_ci	  defines the maximal power of two of number of pages that can be
136662306a36Sopenharmony_ci	  allocated as a single contiguous block. This option allows
136762306a36Sopenharmony_ci	  overriding the default setting when ability to allocate very
136862306a36Sopenharmony_ci	  large blocks of physically contiguous memory is required.
136962306a36Sopenharmony_ci
137062306a36Sopenharmony_ci	  Don't change if unsure.
137162306a36Sopenharmony_ci
137262306a36Sopenharmony_ciconfig ALIGNMENT_TRAP
137362306a36Sopenharmony_ci	def_bool CPU_CP15_MMU
137462306a36Sopenharmony_ci	select HAVE_PROC_CPU if PROC_FS
137562306a36Sopenharmony_ci	help
137662306a36Sopenharmony_ci	  ARM processors cannot fetch/store information which is not
137762306a36Sopenharmony_ci	  naturally aligned on the bus, i.e., a 4 byte fetch must start at an
137862306a36Sopenharmony_ci	  address divisible by 4. On 32-bit ARM processors, these non-aligned
137962306a36Sopenharmony_ci	  fetch/store instructions will be emulated in software if you say
138062306a36Sopenharmony_ci	  here, which has a severe performance impact. This is necessary for
138162306a36Sopenharmony_ci	  correct operation of some network protocols. With an IP-only
138262306a36Sopenharmony_ci	  configuration it is safe to say N, otherwise say Y.
138362306a36Sopenharmony_ci
138462306a36Sopenharmony_ciconfig UACCESS_WITH_MEMCPY
138562306a36Sopenharmony_ci	bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
138662306a36Sopenharmony_ci	depends on MMU
138762306a36Sopenharmony_ci	default y if CPU_FEROCEON
138862306a36Sopenharmony_ci	help
138962306a36Sopenharmony_ci	  Implement faster copy_to_user and clear_user methods for CPU
139062306a36Sopenharmony_ci	  cores where a 8-word STM instruction give significantly higher
139162306a36Sopenharmony_ci	  memory write throughput than a sequence of individual 32bit stores.
139262306a36Sopenharmony_ci
139362306a36Sopenharmony_ci	  A possible side effect is a slight increase in scheduling latency
139462306a36Sopenharmony_ci	  between threads sharing the same address space if they invoke
139562306a36Sopenharmony_ci	  such copy operations with large buffers.
139662306a36Sopenharmony_ci
139762306a36Sopenharmony_ci	  However, if the CPU data cache is using a write-allocate mode,
139862306a36Sopenharmony_ci	  this option is unlikely to provide any performance gain.
139962306a36Sopenharmony_ci
140062306a36Sopenharmony_ciconfig PARAVIRT
140162306a36Sopenharmony_ci	bool "Enable paravirtualization code"
140262306a36Sopenharmony_ci	help
140362306a36Sopenharmony_ci	  This changes the kernel so it can modify itself when it is run
140462306a36Sopenharmony_ci	  under a hypervisor, potentially improving performance significantly
140562306a36Sopenharmony_ci	  over full virtualization.
140662306a36Sopenharmony_ci
140762306a36Sopenharmony_ciconfig PARAVIRT_TIME_ACCOUNTING
140862306a36Sopenharmony_ci	bool "Paravirtual steal time accounting"
140962306a36Sopenharmony_ci	select PARAVIRT
141062306a36Sopenharmony_ci	help
141162306a36Sopenharmony_ci	  Select this option to enable fine granularity task steal time
141262306a36Sopenharmony_ci	  accounting. Time spent executing other tasks in parallel with
141362306a36Sopenharmony_ci	  the current vCPU is discounted from the vCPU power. To account for
141462306a36Sopenharmony_ci	  that, there can be a small performance impact.
141562306a36Sopenharmony_ci
141662306a36Sopenharmony_ci	  If in doubt, say N here.
141762306a36Sopenharmony_ci
141862306a36Sopenharmony_ciconfig XEN_DOM0
141962306a36Sopenharmony_ci	def_bool y
142062306a36Sopenharmony_ci	depends on XEN
142162306a36Sopenharmony_ci
142262306a36Sopenharmony_ciconfig XEN
142362306a36Sopenharmony_ci	bool "Xen guest support on ARM"
142462306a36Sopenharmony_ci	depends on ARM && AEABI && OF
142562306a36Sopenharmony_ci	depends on CPU_V7 && !CPU_V6
142662306a36Sopenharmony_ci	depends on !GENERIC_ATOMIC64
142762306a36Sopenharmony_ci	depends on MMU
142862306a36Sopenharmony_ci	select ARCH_DMA_ADDR_T_64BIT
142962306a36Sopenharmony_ci	select ARM_PSCI
143062306a36Sopenharmony_ci	select SWIOTLB
143162306a36Sopenharmony_ci	select SWIOTLB_XEN
143262306a36Sopenharmony_ci	select PARAVIRT
143362306a36Sopenharmony_ci	help
143462306a36Sopenharmony_ci	  Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
143562306a36Sopenharmony_ci
143662306a36Sopenharmony_ciconfig CC_HAVE_STACKPROTECTOR_TLS
143762306a36Sopenharmony_ci	def_bool $(cc-option,-mtp=cp15 -mstack-protector-guard=tls -mstack-protector-guard-offset=0)
143862306a36Sopenharmony_ci
143962306a36Sopenharmony_ciconfig STACKPROTECTOR_PER_TASK
144062306a36Sopenharmony_ci	bool "Use a unique stack canary value for each task"
144162306a36Sopenharmony_ci	depends on STACKPROTECTOR && CURRENT_POINTER_IN_TPIDRURO && !XIP_DEFLATED_DATA
144262306a36Sopenharmony_ci	depends on GCC_PLUGINS || CC_HAVE_STACKPROTECTOR_TLS
144362306a36Sopenharmony_ci	select GCC_PLUGIN_ARM_SSP_PER_TASK if !CC_HAVE_STACKPROTECTOR_TLS
144462306a36Sopenharmony_ci	default y
144562306a36Sopenharmony_ci	help
144662306a36Sopenharmony_ci	  Due to the fact that GCC uses an ordinary symbol reference from
144762306a36Sopenharmony_ci	  which to load the value of the stack canary, this value can only
144862306a36Sopenharmony_ci	  change at reboot time on SMP systems, and all tasks running in the
144962306a36Sopenharmony_ci	  kernel's address space are forced to use the same canary value for
145062306a36Sopenharmony_ci	  the entire duration that the system is up.
145162306a36Sopenharmony_ci
145262306a36Sopenharmony_ci	  Enable this option to switch to a different method that uses a
145362306a36Sopenharmony_ci	  different canary value for each task.
145462306a36Sopenharmony_ci
145562306a36Sopenharmony_ciendmenu
145662306a36Sopenharmony_ci
145762306a36Sopenharmony_cimenu "Boot options"
145862306a36Sopenharmony_ci
145962306a36Sopenharmony_ciconfig USE_OF
146062306a36Sopenharmony_ci	bool "Flattened Device Tree support"
146162306a36Sopenharmony_ci	select IRQ_DOMAIN
146262306a36Sopenharmony_ci	select OF
146362306a36Sopenharmony_ci	help
146462306a36Sopenharmony_ci	  Include support for flattened device tree machine descriptions.
146562306a36Sopenharmony_ci
146662306a36Sopenharmony_ciconfig ARCH_WANT_FLAT_DTB_INSTALL
146762306a36Sopenharmony_ci	def_bool y
146862306a36Sopenharmony_ci
146962306a36Sopenharmony_ciconfig ATAGS
147062306a36Sopenharmony_ci	bool "Support for the traditional ATAGS boot data passing"
147162306a36Sopenharmony_ci	default y
147262306a36Sopenharmony_ci	help
147362306a36Sopenharmony_ci	  This is the traditional way of passing data to the kernel at boot
147462306a36Sopenharmony_ci	  time. If you are solely relying on the flattened device tree (or
147562306a36Sopenharmony_ci	  the ARM_ATAG_DTB_COMPAT option) then you may unselect this option
147662306a36Sopenharmony_ci	  to remove ATAGS support from your kernel binary.
147762306a36Sopenharmony_ci
147862306a36Sopenharmony_ciconfig DEPRECATED_PARAM_STRUCT
147962306a36Sopenharmony_ci	bool "Provide old way to pass kernel parameters"
148062306a36Sopenharmony_ci	depends on ATAGS
148162306a36Sopenharmony_ci	help
148262306a36Sopenharmony_ci	  This was deprecated in 2001 and announced to live on for 5 years.
148362306a36Sopenharmony_ci	  Some old boot loaders still use this way.
148462306a36Sopenharmony_ci
148562306a36Sopenharmony_ci# Compressed boot loader in ROM.  Yes, we really want to ask about
148662306a36Sopenharmony_ci# TEXT and BSS so we preserve their values in the config files.
148762306a36Sopenharmony_ciconfig ZBOOT_ROM_TEXT
148862306a36Sopenharmony_ci	hex "Compressed ROM boot loader base address"
148962306a36Sopenharmony_ci	default 0x0
149062306a36Sopenharmony_ci	help
149162306a36Sopenharmony_ci	  The physical address at which the ROM-able zImage is to be
149262306a36Sopenharmony_ci	  placed in the target.  Platforms which normally make use of
149362306a36Sopenharmony_ci	  ROM-able zImage formats normally set this to a suitable
149462306a36Sopenharmony_ci	  value in their defconfig file.
149562306a36Sopenharmony_ci
149662306a36Sopenharmony_ci	  If ZBOOT_ROM is not enabled, this has no effect.
149762306a36Sopenharmony_ci
149862306a36Sopenharmony_ciconfig ZBOOT_ROM_BSS
149962306a36Sopenharmony_ci	hex "Compressed ROM boot loader BSS address"
150062306a36Sopenharmony_ci	default 0x0
150162306a36Sopenharmony_ci	help
150262306a36Sopenharmony_ci	  The base address of an area of read/write memory in the target
150362306a36Sopenharmony_ci	  for the ROM-able zImage which must be available while the
150462306a36Sopenharmony_ci	  decompressor is running. It must be large enough to hold the
150562306a36Sopenharmony_ci	  entire decompressed kernel plus an additional 128 KiB.
150662306a36Sopenharmony_ci	  Platforms which normally make use of ROM-able zImage formats
150762306a36Sopenharmony_ci	  normally set this to a suitable value in their defconfig file.
150862306a36Sopenharmony_ci
150962306a36Sopenharmony_ci	  If ZBOOT_ROM is not enabled, this has no effect.
151062306a36Sopenharmony_ci
151162306a36Sopenharmony_ciconfig ZBOOT_ROM
151262306a36Sopenharmony_ci	bool "Compressed boot loader in ROM/flash"
151362306a36Sopenharmony_ci	depends on ZBOOT_ROM_TEXT != ZBOOT_ROM_BSS
151462306a36Sopenharmony_ci	depends on !ARM_APPENDED_DTB && !XIP_KERNEL && !AUTO_ZRELADDR
151562306a36Sopenharmony_ci	help
151662306a36Sopenharmony_ci	  Say Y here if you intend to execute your compressed kernel image
151762306a36Sopenharmony_ci	  (zImage) directly from ROM or flash.  If unsure, say N.
151862306a36Sopenharmony_ci
151962306a36Sopenharmony_ciconfig ARM_APPENDED_DTB
152062306a36Sopenharmony_ci	bool "Use appended device tree blob to zImage (EXPERIMENTAL)"
152162306a36Sopenharmony_ci	depends on OF
152262306a36Sopenharmony_ci	help
152362306a36Sopenharmony_ci	  With this option, the boot code will look for a device tree binary
152462306a36Sopenharmony_ci	  (DTB) appended to zImage
152562306a36Sopenharmony_ci	  (e.g. cat zImage <filename>.dtb > zImage_w_dtb).
152662306a36Sopenharmony_ci
152762306a36Sopenharmony_ci	  This is meant as a backward compatibility convenience for those
152862306a36Sopenharmony_ci	  systems with a bootloader that can't be upgraded to accommodate
152962306a36Sopenharmony_ci	  the documented boot protocol using a device tree.
153062306a36Sopenharmony_ci
153162306a36Sopenharmony_ci	  Beware that there is very little in terms of protection against
153262306a36Sopenharmony_ci	  this option being confused by leftover garbage in memory that might
153362306a36Sopenharmony_ci	  look like a DTB header after a reboot if no actual DTB is appended
153462306a36Sopenharmony_ci	  to zImage.  Do not leave this option active in a production kernel
153562306a36Sopenharmony_ci	  if you don't intend to always append a DTB.  Proper passing of the
153662306a36Sopenharmony_ci	  location into r2 of a bootloader provided DTB is always preferable
153762306a36Sopenharmony_ci	  to this option.
153862306a36Sopenharmony_ci
153962306a36Sopenharmony_ciconfig ARM_ATAG_DTB_COMPAT
154062306a36Sopenharmony_ci	bool "Supplement the appended DTB with traditional ATAG information"
154162306a36Sopenharmony_ci	depends on ARM_APPENDED_DTB
154262306a36Sopenharmony_ci	help
154362306a36Sopenharmony_ci	  Some old bootloaders can't be updated to a DTB capable one, yet
154462306a36Sopenharmony_ci	  they provide ATAGs with memory configuration, the ramdisk address,
154562306a36Sopenharmony_ci	  the kernel cmdline string, etc.  Such information is dynamically
154662306a36Sopenharmony_ci	  provided by the bootloader and can't always be stored in a static
154762306a36Sopenharmony_ci	  DTB.  To allow a device tree enabled kernel to be used with such
154862306a36Sopenharmony_ci	  bootloaders, this option allows zImage to extract the information
154962306a36Sopenharmony_ci	  from the ATAG list and store it at run time into the appended DTB.
155062306a36Sopenharmony_ci
155162306a36Sopenharmony_cichoice
155262306a36Sopenharmony_ci	prompt "Kernel command line type" if ARM_ATAG_DTB_COMPAT
155362306a36Sopenharmony_ci	default ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER
155462306a36Sopenharmony_ci
155562306a36Sopenharmony_ciconfig ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER
155662306a36Sopenharmony_ci	bool "Use bootloader kernel arguments if available"
155762306a36Sopenharmony_ci	help
155862306a36Sopenharmony_ci	  Uses the command-line options passed by the boot loader instead of
155962306a36Sopenharmony_ci	  the device tree bootargs property. If the boot loader doesn't provide
156062306a36Sopenharmony_ci	  any, the device tree bootargs property will be used.
156162306a36Sopenharmony_ci
156262306a36Sopenharmony_ciconfig ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND
156362306a36Sopenharmony_ci	bool "Extend with bootloader kernel arguments"
156462306a36Sopenharmony_ci	help
156562306a36Sopenharmony_ci	  The command-line arguments provided by the boot loader will be
156662306a36Sopenharmony_ci	  appended to the the device tree bootargs property.
156762306a36Sopenharmony_ci
156862306a36Sopenharmony_ciendchoice
156962306a36Sopenharmony_ci
157062306a36Sopenharmony_ciconfig CMDLINE
157162306a36Sopenharmony_ci	string "Default kernel command string"
157262306a36Sopenharmony_ci	default ""
157362306a36Sopenharmony_ci	help
157462306a36Sopenharmony_ci	  On some architectures (e.g. CATS), there is currently no way
157562306a36Sopenharmony_ci	  for the boot loader to pass arguments to the kernel. For these
157662306a36Sopenharmony_ci	  architectures, you should supply some command-line options at build
157762306a36Sopenharmony_ci	  time by entering them here. As a minimum, you should specify the
157862306a36Sopenharmony_ci	  memory size and the root device (e.g., mem=64M root=/dev/nfs).
157962306a36Sopenharmony_ci
158062306a36Sopenharmony_cichoice
158162306a36Sopenharmony_ci	prompt "Kernel command line type" if CMDLINE != ""
158262306a36Sopenharmony_ci	default CMDLINE_FROM_BOOTLOADER
158362306a36Sopenharmony_ci
158462306a36Sopenharmony_ciconfig CMDLINE_FROM_BOOTLOADER
158562306a36Sopenharmony_ci	bool "Use bootloader kernel arguments if available"
158662306a36Sopenharmony_ci	help
158762306a36Sopenharmony_ci	  Uses the command-line options passed by the boot loader. If
158862306a36Sopenharmony_ci	  the boot loader doesn't provide any, the default kernel command
158962306a36Sopenharmony_ci	  string provided in CMDLINE will be used.
159062306a36Sopenharmony_ci
159162306a36Sopenharmony_ciconfig CMDLINE_EXTEND
159262306a36Sopenharmony_ci	bool "Extend bootloader kernel arguments"
159362306a36Sopenharmony_ci	help
159462306a36Sopenharmony_ci	  The command-line arguments provided by the boot loader will be
159562306a36Sopenharmony_ci	  appended to the default kernel command string.
159662306a36Sopenharmony_ci
159762306a36Sopenharmony_ciconfig CMDLINE_FORCE
159862306a36Sopenharmony_ci	bool "Always use the default kernel command string"
159962306a36Sopenharmony_ci	help
160062306a36Sopenharmony_ci	  Always use the default kernel command string, even if the boot
160162306a36Sopenharmony_ci	  loader passes other arguments to the kernel.
160262306a36Sopenharmony_ci	  This is useful if you cannot or don't want to change the
160362306a36Sopenharmony_ci	  command-line options your boot loader passes to the kernel.
160462306a36Sopenharmony_ciendchoice
160562306a36Sopenharmony_ci
160662306a36Sopenharmony_ciconfig XIP_KERNEL
160762306a36Sopenharmony_ci	bool "Kernel Execute-In-Place from ROM"
160862306a36Sopenharmony_ci	depends on !ARM_LPAE && !ARCH_MULTIPLATFORM
160962306a36Sopenharmony_ci	depends on !ARM_PATCH_IDIV && !ARM_PATCH_PHYS_VIRT && !SMP_ON_UP
161062306a36Sopenharmony_ci	help
161162306a36Sopenharmony_ci	  Execute-In-Place allows the kernel to run from non-volatile storage
161262306a36Sopenharmony_ci	  directly addressable by the CPU, such as NOR flash. This saves RAM
161362306a36Sopenharmony_ci	  space since the text section of the kernel is not loaded from flash
161462306a36Sopenharmony_ci	  to RAM.  Read-write sections, such as the data section and stack,
161562306a36Sopenharmony_ci	  are still copied to RAM.  The XIP kernel is not compressed since
161662306a36Sopenharmony_ci	  it has to run directly from flash, so it will take more space to
161762306a36Sopenharmony_ci	  store it.  The flash address used to link the kernel object files,
161862306a36Sopenharmony_ci	  and for storing it, is configuration dependent. Therefore, if you
161962306a36Sopenharmony_ci	  say Y here, you must know the proper physical address where to
162062306a36Sopenharmony_ci	  store the kernel image depending on your own flash memory usage.
162162306a36Sopenharmony_ci
162262306a36Sopenharmony_ci	  Also note that the make target becomes "make xipImage" rather than
162362306a36Sopenharmony_ci	  "make zImage" or "make Image".  The final kernel binary to put in
162462306a36Sopenharmony_ci	  ROM memory will be arch/arm/boot/xipImage.
162562306a36Sopenharmony_ci
162662306a36Sopenharmony_ci	  If unsure, say N.
162762306a36Sopenharmony_ci
162862306a36Sopenharmony_ciconfig XIP_PHYS_ADDR
162962306a36Sopenharmony_ci	hex "XIP Kernel Physical Location"
163062306a36Sopenharmony_ci	depends on XIP_KERNEL
163162306a36Sopenharmony_ci	default "0x00080000"
163262306a36Sopenharmony_ci	help
163362306a36Sopenharmony_ci	  This is the physical address in your flash memory the kernel will
163462306a36Sopenharmony_ci	  be linked for and stored to.  This address is dependent on your
163562306a36Sopenharmony_ci	  own flash usage.
163662306a36Sopenharmony_ci
163762306a36Sopenharmony_ciconfig XIP_DEFLATED_DATA
163862306a36Sopenharmony_ci	bool "Store kernel .data section compressed in ROM"
163962306a36Sopenharmony_ci	depends on XIP_KERNEL
164062306a36Sopenharmony_ci	select ZLIB_INFLATE
164162306a36Sopenharmony_ci	help
164262306a36Sopenharmony_ci	  Before the kernel is actually executed, its .data section has to be
164362306a36Sopenharmony_ci	  copied to RAM from ROM. This option allows for storing that data
164462306a36Sopenharmony_ci	  in compressed form and decompressed to RAM rather than merely being
164562306a36Sopenharmony_ci	  copied, saving some precious ROM space. A possible drawback is a
164662306a36Sopenharmony_ci	  slightly longer boot delay.
164762306a36Sopenharmony_ci
164862306a36Sopenharmony_ciconfig ARCH_SUPPORTS_KEXEC
164962306a36Sopenharmony_ci	def_bool (!SMP || PM_SLEEP_SMP) && MMU
165062306a36Sopenharmony_ci
165162306a36Sopenharmony_ciconfig ATAGS_PROC
165262306a36Sopenharmony_ci	bool "Export atags in procfs"
165362306a36Sopenharmony_ci	depends on ATAGS && KEXEC
165462306a36Sopenharmony_ci	default y
165562306a36Sopenharmony_ci	help
165662306a36Sopenharmony_ci	  Should the atags used to boot the kernel be exported in an "atags"
165762306a36Sopenharmony_ci	  file in procfs. Useful with kexec.
165862306a36Sopenharmony_ci
165962306a36Sopenharmony_ciconfig ARCH_SUPPORTS_CRASH_DUMP
166062306a36Sopenharmony_ci	def_bool y
166162306a36Sopenharmony_ci
166262306a36Sopenharmony_ciconfig AUTO_ZRELADDR
166362306a36Sopenharmony_ci	bool "Auto calculation of the decompressed kernel image address" if !ARCH_MULTIPLATFORM
166462306a36Sopenharmony_ci	default !(ARCH_FOOTBRIDGE || ARCH_RPC || ARCH_SA1100)
166562306a36Sopenharmony_ci	help
166662306a36Sopenharmony_ci	  ZRELADDR is the physical address where the decompressed kernel
166762306a36Sopenharmony_ci	  image will be placed. If AUTO_ZRELADDR is selected, the address
166862306a36Sopenharmony_ci	  will be determined at run-time, either by masking the current IP
166962306a36Sopenharmony_ci	  with 0xf8000000, or, if invalid, from the DTB passed in r2.
167062306a36Sopenharmony_ci	  This assumes the zImage being placed in the first 128MB from
167162306a36Sopenharmony_ci	  start of memory.
167262306a36Sopenharmony_ci
167362306a36Sopenharmony_ciconfig EFI_STUB
167462306a36Sopenharmony_ci	bool
167562306a36Sopenharmony_ci
167662306a36Sopenharmony_ciconfig EFI
167762306a36Sopenharmony_ci	bool "UEFI runtime support"
167862306a36Sopenharmony_ci	depends on OF && !CPU_BIG_ENDIAN && MMU && AUTO_ZRELADDR && !XIP_KERNEL
167962306a36Sopenharmony_ci	select UCS2_STRING
168062306a36Sopenharmony_ci	select EFI_PARAMS_FROM_FDT
168162306a36Sopenharmony_ci	select EFI_STUB
168262306a36Sopenharmony_ci	select EFI_GENERIC_STUB
168362306a36Sopenharmony_ci	select EFI_RUNTIME_WRAPPERS
168462306a36Sopenharmony_ci	help
168562306a36Sopenharmony_ci	  This option provides support for runtime services provided
168662306a36Sopenharmony_ci	  by UEFI firmware (such as non-volatile variables, realtime
168762306a36Sopenharmony_ci	  clock, and platform reset). A UEFI stub is also provided to
168862306a36Sopenharmony_ci	  allow the kernel to be booted as an EFI application. This
168962306a36Sopenharmony_ci	  is only useful for kernels that may run on systems that have
169062306a36Sopenharmony_ci	  UEFI firmware.
169162306a36Sopenharmony_ci
169262306a36Sopenharmony_ciconfig DMI
169362306a36Sopenharmony_ci	bool "Enable support for SMBIOS (DMI) tables"
169462306a36Sopenharmony_ci	depends on EFI
169562306a36Sopenharmony_ci	default y
169662306a36Sopenharmony_ci	help
169762306a36Sopenharmony_ci	  This enables SMBIOS/DMI feature for systems.
169862306a36Sopenharmony_ci
169962306a36Sopenharmony_ci	  This option is only useful on systems that have UEFI firmware.
170062306a36Sopenharmony_ci	  However, even with this option, the resultant kernel should
170162306a36Sopenharmony_ci	  continue to boot on existing non-UEFI platforms.
170262306a36Sopenharmony_ci
170362306a36Sopenharmony_ci	  NOTE: This does *NOT* enable or encourage the use of DMI quirks,
170462306a36Sopenharmony_ci	  i.e., the the practice of identifying the platform via DMI to
170562306a36Sopenharmony_ci	  decide whether certain workarounds for buggy hardware and/or
170662306a36Sopenharmony_ci	  firmware need to be enabled. This would require the DMI subsystem
170762306a36Sopenharmony_ci	  to be enabled much earlier than we do on ARM, which is non-trivial.
170862306a36Sopenharmony_ci
170962306a36Sopenharmony_ciendmenu
171062306a36Sopenharmony_ci
171162306a36Sopenharmony_cimenu "CPU Power Management"
171262306a36Sopenharmony_ci
171362306a36Sopenharmony_cisource "drivers/cpufreq/Kconfig"
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_cisource "drivers/cpuidle/Kconfig"
171662306a36Sopenharmony_ci
171762306a36Sopenharmony_ciendmenu
171862306a36Sopenharmony_ci
171962306a36Sopenharmony_cimenu "Floating point emulation"
172062306a36Sopenharmony_ci
172162306a36Sopenharmony_cicomment "At least one emulation must be selected"
172262306a36Sopenharmony_ci
172362306a36Sopenharmony_ciconfig FPE_NWFPE
172462306a36Sopenharmony_ci	bool "NWFPE math emulation"
172562306a36Sopenharmony_ci	depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
172662306a36Sopenharmony_ci	help
172762306a36Sopenharmony_ci	  Say Y to include the NWFPE floating point emulator in the kernel.
172862306a36Sopenharmony_ci	  This is necessary to run most binaries. Linux does not currently
172962306a36Sopenharmony_ci	  support floating point hardware so you need to say Y here even if
173062306a36Sopenharmony_ci	  your machine has an FPA or floating point co-processor podule.
173162306a36Sopenharmony_ci
173262306a36Sopenharmony_ci	  You may say N here if you are going to load the Acorn FPEmulator
173362306a36Sopenharmony_ci	  early in the bootup.
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ciconfig FPE_NWFPE_XP
173662306a36Sopenharmony_ci	bool "Support extended precision"
173762306a36Sopenharmony_ci	depends on FPE_NWFPE
173862306a36Sopenharmony_ci	help
173962306a36Sopenharmony_ci	  Say Y to include 80-bit support in the kernel floating-point
174062306a36Sopenharmony_ci	  emulator.  Otherwise, only 32 and 64-bit support is compiled in.
174162306a36Sopenharmony_ci	  Note that gcc does not generate 80-bit operations by default,
174262306a36Sopenharmony_ci	  so in most cases this option only enlarges the size of the
174362306a36Sopenharmony_ci	  floating point emulator without any good reason.
174462306a36Sopenharmony_ci
174562306a36Sopenharmony_ci	  You almost surely want to say N here.
174662306a36Sopenharmony_ci
174762306a36Sopenharmony_ciconfig FPE_FASTFPE
174862306a36Sopenharmony_ci	bool "FastFPE math emulation (EXPERIMENTAL)"
174962306a36Sopenharmony_ci	depends on (!AEABI || OABI_COMPAT) && !CPU_32v3
175062306a36Sopenharmony_ci	help
175162306a36Sopenharmony_ci	  Say Y here to include the FAST floating point emulator in the kernel.
175262306a36Sopenharmony_ci	  This is an experimental much faster emulator which now also has full
175362306a36Sopenharmony_ci	  precision for the mantissa.  It does not support any exceptions.
175462306a36Sopenharmony_ci	  It is very simple, and approximately 3-6 times faster than NWFPE.
175562306a36Sopenharmony_ci
175662306a36Sopenharmony_ci	  It should be sufficient for most programs.  It may be not suitable
175762306a36Sopenharmony_ci	  for scientific calculations, but you have to check this for yourself.
175862306a36Sopenharmony_ci	  If you do not feel you need a faster FP emulation you should better
175962306a36Sopenharmony_ci	  choose NWFPE.
176062306a36Sopenharmony_ci
176162306a36Sopenharmony_ciconfig VFP
176262306a36Sopenharmony_ci	bool "VFP-format floating point maths"
176362306a36Sopenharmony_ci	depends on CPU_V6 || CPU_V6K || CPU_ARM926T || CPU_V7 || CPU_FEROCEON
176462306a36Sopenharmony_ci	help
176562306a36Sopenharmony_ci	  Say Y to include VFP support code in the kernel. This is needed
176662306a36Sopenharmony_ci	  if your hardware includes a VFP unit.
176762306a36Sopenharmony_ci
176862306a36Sopenharmony_ci	  Please see <file:Documentation/arch/arm/vfp/release-notes.rst> for
176962306a36Sopenharmony_ci	  release notes and additional status information.
177062306a36Sopenharmony_ci
177162306a36Sopenharmony_ci	  Say N if your target does not have VFP hardware.
177262306a36Sopenharmony_ci
177362306a36Sopenharmony_ciconfig VFPv3
177462306a36Sopenharmony_ci	bool
177562306a36Sopenharmony_ci	depends on VFP
177662306a36Sopenharmony_ci	default y if CPU_V7
177762306a36Sopenharmony_ci
177862306a36Sopenharmony_ciconfig NEON
177962306a36Sopenharmony_ci	bool "Advanced SIMD (NEON) Extension support"
178062306a36Sopenharmony_ci	depends on VFPv3 && CPU_V7
178162306a36Sopenharmony_ci	help
178262306a36Sopenharmony_ci	  Say Y to include support code for NEON, the ARMv7 Advanced SIMD
178362306a36Sopenharmony_ci	  Extension.
178462306a36Sopenharmony_ci
178562306a36Sopenharmony_ciconfig KERNEL_MODE_NEON
178662306a36Sopenharmony_ci	bool "Support for NEON in kernel mode"
178762306a36Sopenharmony_ci	depends on NEON && AEABI
178862306a36Sopenharmony_ci	help
178962306a36Sopenharmony_ci	  Say Y to include support for NEON in kernel mode.
179062306a36Sopenharmony_ci
179162306a36Sopenharmony_ciendmenu
179262306a36Sopenharmony_ci
179362306a36Sopenharmony_cimenu "Power management options"
179462306a36Sopenharmony_ci
179562306a36Sopenharmony_cisource "kernel/power/Kconfig"
179662306a36Sopenharmony_ci
179762306a36Sopenharmony_ciconfig ARCH_SUSPEND_POSSIBLE
179862306a36Sopenharmony_ci	depends on CPU_ARM920T || CPU_ARM926T || CPU_FEROCEON || CPU_SA1100 || \
179962306a36Sopenharmony_ci		CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M || CPU_XSC3 || CPU_XSCALE || CPU_MOHAWK
180062306a36Sopenharmony_ci	def_bool y
180162306a36Sopenharmony_ci
180262306a36Sopenharmony_ciconfig ARM_CPU_SUSPEND
180362306a36Sopenharmony_ci	def_bool PM_SLEEP || BL_SWITCHER || ARM_PSCI_FW
180462306a36Sopenharmony_ci	depends on ARCH_SUSPEND_POSSIBLE
180562306a36Sopenharmony_ci
180662306a36Sopenharmony_ciconfig ARCH_HIBERNATION_POSSIBLE
180762306a36Sopenharmony_ci	bool
180862306a36Sopenharmony_ci	depends on MMU
180962306a36Sopenharmony_ci	default y if ARCH_SUSPEND_POSSIBLE
181062306a36Sopenharmony_ci
181162306a36Sopenharmony_ciendmenu
181262306a36Sopenharmony_ci
181362306a36Sopenharmony_cisource "arch/arm/Kconfig.assembler"
1814