# ARM64 core configuration options

# Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
# SPDX-License-Identifier: Apache-2.0

config CPU_CORTEX_A
	bool
	select CPU_CORTEX
	select HAS_FLASH_LOAD_OFFSET
	select SCHED_IPI_SUPPORTED if SMP
	select CPU_HAS_FPU
	select ARCH_HAS_SINGLE_THREAD_SUPPORT
	select CPU_HAS_DCACHE
	select CPU_HAS_ICACHE
	imply FPU
	imply FPU_SHARING
	help
	  This option signifies the use of a CPU of the Cortex-A family.

config CPU_AARCH64_CORTEX_R
	bool
	select CPU_CORTEX
	select HAS_FLASH_LOAD_OFFSET
	select CPU_HAS_DCACHE
	select CPU_HAS_ICACHE
	select ARCH_HAS_STACK_PROTECTION
	select CPU_HAS_FPU
	imply FPU
	imply FPU_SHARING
	help
	  This option signifies the use of a CPU of the Cortex-R 64-bit family.

config CPU_CORTEX_A53
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A53 CPU

config CPU_CORTEX_A55
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A55 CPU

config CPU_CORTEX_A57
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A57 CPU

config CPU_CORTEX_A72
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A72 CPU

config CPU_CORTEX_A76
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A76 CPU

config CPU_CORTEX_A76_A55
	bool
	select CPU_CORTEX_A
	select ARMV8_A
	help
	  This option signifies the use of a Cortex-A76 and A55 big little CPU cluster

config CPU_CORTEX_R82
	bool
	select CPU_AARCH64_CORTEX_R
	select ARMV8_R
	help
	  This option signifies the use of a Cortex-R82 CPU

config HAS_ARM_SMCCC
	bool
	help
	  Include support for the Secure Monitor Call (SMC) and Hypervisor
	  Call (HVC) instructions on Armv7 and above architectures.

config NUM_IRQS
	int

config MAIN_STACK_SIZE
	default 4096

config IDLE_STACK_SIZE
	default 4096

config ISR_STACK_SIZE
	default 4096

config TEST_EXTRA_STACK_SIZE
	default 2048

config SYSTEM_WORKQUEUE_STACK_SIZE
	default 4096

config CMSIS_THREAD_MAX_STACK_SIZE
	default 4096

config CMSIS_V2_THREAD_MAX_STACK_SIZE
	default 4096

config CMSIS_V2_THREAD_DYNAMIC_STACK_SIZE
	default 4096

config IPM_CONSOLE_STACK_SIZE
	default 2048

config AARCH64_IMAGE_HEADER
	bool "Add image header"
	default y if ARM_MMU || ARM_MPU
	help
	  This option enables standard ARM64 boot image header used by Linux
	  and understood by loaders such as u-boot on Xen xl tool.

config PRIVILEGED_STACK_SIZE
	default 4096

config KOBJECT_TEXT_AREA
	default 512 if TEST

config WAIT_AT_RESET_VECTOR
	bool "Wait at reset vector"
	default n
	help
	  Spin at reset vector waiting for debugger to attach and resume
	  execution

config ARM64_SAFE_EXCEPTION_STACK
	bool "To enable the safe exception stack"
	help
	  The safe exception stack is used for checking whether the kernel stack
	  overflows during the exception happens from EL1. This stack is not
	  used for user stack overflow checking, because kernel stack support
	  the checking work.

config ARM64_ENABLE_FRAME_POINTER
	bool
	default y
	depends on OVERRIDE_FRAME_POINTER_DEFAULT && !OMIT_FRAME_POINTER
	help
	  Hidden option to simplify access to OVERRIDE_FRAME_POINTER_DEFAULT
	  and OMIT_FRAME_POINTER. It is automatically enabled when the frame
	  pointer unwinding is enabled.

config ARM64_SAFE_EXCEPTION_STACK_SIZE
	int "The stack size of the safe exception stack"
	default 4096
	depends on ARM64_SAFE_EXCEPTION_STACK
	help
	  The stack size of the safe exception stack. The safe exception stack
	  requires to be enough to do the stack overflow check.

config ARM64_FALLBACK_ON_RESERVED_CORES
	bool "To enable fallback on reserved cores"
	help
	  Give the ability to define more cores in the device tree than required
	  via CONFIG_MP_MAX_NUM_CPUS.  The extra cores in the device tree
	  become reserved.  If there is an issue powering on a core during boot
	  then that core will be skipped and the next core in the device tree
	  will be used.

config ARM64_STACK_PROTECTION
	bool
	default y if HW_STACK_PROTECTION
	depends on ARM_MPU
	select THREAD_STACK_INFO
	select ARM64_SAFE_EXCEPTION_STACK
	help
	  This option leverages the MMU or MPU to cause a system fatal error if
	  the bounds of the current process stack are overflowed. This is done
	  by preceding all stack areas with a fixed guard region.

if CPU_CORTEX_A

config ARMV8_A_NS
	bool "ARMv8-A Normal World (Non-Secure world of Trustzone)"
	help
	  This option signifies that Zephyr is entered in TrustZone
	  Non-Secure state

config ARMV8_A
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	select CPU_HAS_MMU
	select ARCH_HAS_USERSPACE if ARM_MMU
	select ARCH_HAS_NOCACHE_MEMORY_SUPPORT if ARM_MMU
	help
	  This option signifies the use of an ARMv8-A processor
	  implementation.

	  From https://developer.arm.com/products/architecture/cpu-architecture/a-profile:
	  The Armv8-A architecture introduces the ability to use 64-bit and
	  32-bit Execution states, known as AArch64 and AArch32 respectively.
	  The AArch64 Execution state supports the A64 instruction set, holds
	  addresses in 64-bit registers and allows instructions in the base
	  instruction set to use 64-bit registers for their processing. The AArch32
	  Execution state is a 32-bit Execution state that preserves backwards
	  compatibility with the Armv7-A architecture and enhances that profile
	  so that it can support some features included in the AArch64 state.
	  It supports the T32 and A32 instruction sets.

rsource "xen/Kconfig"

endif # CPU_CORTEX_A

if CPU_AARCH64_CORTEX_R

config ARMV8_R
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	select SCHED_IPI_SUPPORTED if SMP
	select ARCH_HAS_USERSPACE if ARM_MPU
	help
	  This option signifies the use of an ARMv8-R processor
	  implementation.

	  From https://developer.arm.com/products/architecture/cpu-architecture/r-profile:
	  The Armv8-R architecture targets at the Real-time profile. It introduces
	  virtualization at the highest security level while retaining the
	  Protected Memory System Architecture (PMSA) based on a Memory Protection
	  Unit (MPU). It supports the A32 and T32 instruction sets.

rsource "cortex_r/Kconfig"

endif # CPU_AARCH64_CORTEX_R

if CPU_CORTEX_A || CPU_AARCH64_CORTEX_R

config GEN_ISR_TABLES
	default y

config GEN_IRQ_VECTOR_TABLE
	default n

config ARM_MMU
	bool "ARM MMU Support"
	default n if CPU_AARCH64_CORTEX_R
	default y
	select MMU
	select SRAM_REGION_PERMISSIONS
	select ARCH_MEM_DOMAIN_SYNCHRONOUS_API if USERSPACE
	select ARCH_MEM_DOMAIN_DATA if USERSPACE
	help
	  Memory Management Unit support.

config EXCEPTION_DEBUG
	bool "Unhandled exception debugging information"
	default y
	depends on LOG
	help
	  Print human-readable information about exception vectors, cause codes,
	  and parameters, at a cost of code/data size for the human-readable
	  strings.

config XIP
	select AARCH64_IMAGE_HEADER

config ARM64_SET_VMPIDR_EL2
	bool "Set VMPIDR_EL2 at EL2 stage"
	help
	  VMPIDR_EL2 holds the value of the Virtualization Multiprocessor ID.
	  This is the value returned by EL1 reads of MPIDR_EL1.
	  This register may already be set by bootloader at the EL2 stage, if
	  not, Zephyr should set it.

if ARM_MMU

config MMU_PAGE_SIZE
	default 0x1000

choice ARM64_VA_BITS
	prompt "Virtual address space size"
	default ARM64_VA_BITS_32
	help
	  Allows choosing one of multiple possible virtual address
	  space sizes. The level of translation table is determined by
	  a combination of page size and virtual address space size.

config ARM64_VA_BITS_32
	bool "32-bit"

config ARM64_VA_BITS_36
	bool "36-bit"

config ARM64_VA_BITS_40
	bool "40-bit"

config ARM64_VA_BITS_42
	bool "42-bit"

config ARM64_VA_BITS_48
	bool "48-bit"
endchoice

config ARM64_VA_BITS
	int
	default 32 if ARM64_VA_BITS_32
	default 36 if ARM64_VA_BITS_36
	default 40 if ARM64_VA_BITS_40
	default 42 if ARM64_VA_BITS_42
	default 48 if ARM64_VA_BITS_48

choice ARM64_PA_BITS
	prompt "Physical address space size"
	default ARM64_PA_BITS_32
	help
	  Choose the maximum physical address range that the kernel will
	  support.

config ARM64_PA_BITS_32
	bool "32-bit"

config ARM64_PA_BITS_36
	bool "36-bit"

config ARM64_PA_BITS_40
	bool "40-bit"

config ARM64_PA_BITS_42
	bool "42-bit"

config ARM64_PA_BITS_48
	bool "48-bit"
endchoice

config ARM64_PA_BITS
	int
	default 32 if ARM64_PA_BITS_32
	default 36 if ARM64_PA_BITS_36
	default 40 if ARM64_PA_BITS_40
	default 42 if ARM64_PA_BITS_42
	default 48 if ARM64_PA_BITS_48

config MAX_XLAT_TABLES
	int "Maximum numbers of translation tables"
	default 20 if USERSPACE && (ARM64_VA_BITS >= 40)
	default 16 if USERSPACE
	default 12 if (ARM64_VA_BITS >= 40)
	default 8
	help
	  This option specifies the maximum numbers of translation tables.
	  Based on this, translation tables are allocated at compile time and
	  used at runtime as needed.  If the runtime need exceeds preallocated
	  numbers of translation tables, it will result in assert. Number of
	  translation tables required is decided based on how many discrete
	  memory regions (both normal and device memory) are present on given
	  platform and how much granularity is required while assigning
	  attributes to these memory regions.

endif # ARM_MMU

endif # CPU_CORTEX_A || CPU_AARCH64_CORTEX_R
