# ARM Cortex-A and Cortex-R platform configuration options

# Copyright (c) 2018 Marvell
# Copyright (c) 2018 Lexmark International, Inc.
# Copyright (c) 2021 Weidmueller Interface GmbH & Co. KG
#
# SPDX-License-Identifier: Apache-2.0

# NOTE: We have the specific core implementations first and outside of the
# if CPU_AARCH32_CORTEX_A / if CPU_AARCH32_CORTEX_R block so that SoCs can
# select which core they are using without having to select all the options
# related to that core. Everything else is captured inside the if
# CPU_AARCH32_CORTEX_A / if CPU_AARCH32_CORTEX_R blocks so they are not
# exposed if one selects a different ARM Cortex Family (Cortex-M).

config CPU_CORTEX_A9
	bool
	select CPU_AARCH32_CORTEX_A
	select ARMV7_A
	help
	  This option signifies the use of a Cortex-A9 CPU.

if CPU_AARCH32_CORTEX_A

config ARMV7_A
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	select ISA_ARM

config ARMV7_EXCEPTION_STACK_SIZE
	int "Undefined Instruction and Abort stack size (in bytes)"
	default 256
	help
	  This option specifies the size of the stack used by the undefined
	  instruction and data abort exception handlers.

config ARMV7_FIQ_STACK_SIZE
	int "FIQ stack size (in bytes)"
	default 256
	help
	  This option specifies the size of the stack used by the FIQ handler.

config ARMV7_SVC_STACK_SIZE
	int "SVC stack size (in bytes)"
	default 512
	help
	  This option specifies the size of the stack used by the SVC handler.

config ARMV7_SYS_STACK_SIZE
	int "SYS stack size (in bytes)"
	default 1024
	help
	  This option specifies the size of the stack used by the system mode.

config RUNTIME_NMI
	default y

config GEN_ISR_TABLES
	default y

config GEN_IRQ_VECTOR_TABLE
	default n

endif # CPU_AARCH32_CORTEX_A

config CPU_CORTEX_R4
	bool
	select CPU_AARCH32_CORTEX_R
	select ARMV7_R
	select ARMV7_R_FP if CPU_HAS_FPU
	help
	  This option signifies the use of a Cortex-R4 CPU

config CPU_CORTEX_R5
	bool
	select CPU_AARCH32_CORTEX_R
	select ARMV7_R
	select ARMV7_R_FP if CPU_HAS_FPU
	help
	  This option signifies the use of a Cortex-R5 CPU

config CPU_CORTEX_R7
	bool
	select CPU_AARCH32_CORTEX_R
	select ARMV7_R
	select ARMV7_R_FP if CPU_HAS_FPU
	help
	  This option signifies the use of a Cortex-R7 CPU

config CPU_CORTEX_R52
	bool
	select CPU_AARCH32_CORTEX_R
	select AARCH32_ARMV8_R
	help
	  This option signifies the use of a Cortex-R52 CPU

if CPU_AARCH32_CORTEX_R

config ARMV7_R
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	select ISA_ARM
	select ISA_THUMB2
	help
	  This option signifies the use of an ARMv7-R processor
	  implementation.

	  From https://developer.arm.com/products/architecture/cpu-architecture/r-profile:
	  The Armv7-R architecture implements a traditional Arm architecture with
	  multiple modes and supports a Protected Memory System Architecture
	  (PMSA) based on a Memory Protection Unit (MPU). It supports the Arm (32)
	  and Thumb (T32) instruction sets.

config ARMV7_R_FP
	bool
	depends on ARMV7_R
	help
	  This option signifies the use of an ARMv7-R processor
	  implementation supporting the Floating-Point Extension.

config AARCH32_ARMV8_R
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	help
	  This option signifies the use of an ARMv8-R AArch32 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.

config ARMV7_EXCEPTION_STACK_SIZE
	int "Undefined Instruction and Abort stack size (in bytes)"
	default 256
	help
	  This option specifies the size of the stack used by the undefined
	  instruction and data abort exception handlers.

config ARMV7_FIQ_STACK_SIZE
	int "FIQ stack size (in bytes)"
	default 256
	help
	  This option specifies the size of the stack used by the FIQ handler.

config ARMV7_SVC_STACK_SIZE
	int "SVC stack size (in bytes)"
	default 512
	help
	  This option specifies the size of the stack used by the SVC handler.

config ARMV7_SYS_STACK_SIZE
	int "SYS stack size (in bytes)"
	default 1024
	help
	  This option specifies the size of the stack used by the system mode.

config RUNTIME_NMI
	default y

config GEN_ISR_TABLES
	default y

config GEN_IRQ_VECTOR_TABLE
	default n

config DISABLE_TCM_ECC
	bool "Disable ECC on TCM"
	help
	  This option disables ECC checks on Tightly Coupled Memory.

endif # CPU_AARCH32_CORTEX_R
