| # 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 |
| 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_A72 |
| bool |
| select CPU_CORTEX_A |
| select ARMV8_A |
| help |
| This option signifies the use of a Cortex-A72 CPU |
| |
| 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_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. |
| |
| 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. |
| |
| 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 |
| 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 |
| 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 |