# ARM Cortex-R platform configuration options

# Copyright (c) 2018 Marvell
# Copyright (c) 2018 Lexmark International, Inc.
# SPDX-License-Identifier: Apache-2.0

# NOTE: We have the specific core implementations first and outside of the
# if CPU_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_CORTEX_R block so they are not exposed
# if one selects a different ARM Cortex Family (Cortex-A or Cortex-M)


config CPU_CORTEX_R4
	bool
	select CPU_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_CORTEX_R
	select ARMV7_R
	select ARMV7_R_FP if CPU_HAS_FPU
	help
	  This option signifies the use of a Cortex-R5 CPU

if CPU_CORTEX_R

config ARMV7_R
	bool
	select ATOMIC_OPERATIONS_BUILTIN
	select ISA_ARM
	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 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.

if CPU_CORTEX_R

config RUNTIME_NMI
	default y

config GEN_ISR_TABLES
	default y

config GEN_IRQ_VECTOR_TABLE
	default n

endif # CPU_CORTEX_R

endif # CPU_CORTEX_R
