# Kconfig - ARM core configuration options

#
# Copyright (c) 2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

config CPU_CORTEX
	bool
	# Omit prompt to signify "hidden" option
	default n
	help
	This option signifies the use of a CPU of the Cortex family.

config CPU_CORTEX_M
	bool
	# Omit prompt to signify "hidden" option
	default n
	select CPU_CORTEX
	select ARCH_HAS_CUSTOM_SWAP_TO_MAIN
	select HAS_CMSIS
	select HAS_FLASH_LOAD_OFFSET
	select HAS_DTS
	select ARCH_HAS_STACK_PROTECTION if ARM_CORE_MPU
	select ARCH_HAS_USERSPACE if ARM_CORE_MPU
	help
	This option signifies the use of a CPU of the Cortex-M family.

config CPU_HAS_SYSTICK
	bool
	# Omit prompt to signify "hidden" option
	default n
	help
	This option is enabled when the CPU has systick timer implemented.

config CPU_HAS_MPU
	bool
	# Omit prompt to signify "hidden" option
	default n
	help
	  This option is enabled when the CPU has a Memory Protection Unit (MPU).

config CPU_HAS_FPU
	# Hidden config selected by CPU family
	bool
	default n
	help
	This option is enabled when the CPU has a hardware floating point
	unit.

config ARM_STACK_PROTECTION
	bool
	default y if HW_STACK_PROTECTION
	select MPU_STACK_GUARD if ARM_CORE_MPU
	help
	This option enables MPU stack guard to cause a system fatal error
	if the bounds of the current process stack are overflowed.

config ARM_USERSPACE
	bool
	default y if USERSPACE
	help
	This option enables APIs to drop a thread's privileges,	supporting
	user-level threads that are protected from each other and from
	crashing the kernel.

menu "Floating Point Options"
depends on CPU_HAS_FPU

config	FLOAT
	bool
	prompt "Floating point registers"
	default n
	help
	This option allows threads to use the floating point registers.
	By default, only a single thread may use the registers.

	Disabling this option means that any thread that uses a
	floating point register will get a fatal exception.

config	FP_SHARING
	bool
	prompt "Floating point register sharing"
	depends on FLOAT
	default n
	help
	This option allows multiple threads to use the floating point
	registers.

choice
	prompt "Floating point ABI"
	default FP_HARDABI
	depends on FLOAT

config FP_HARDABI
	bool "Floating point Hard ABI"
	depends on FLOAT
	help
	This option selects the Floating point ABI in which hardware floating
	point instructions are generated and uses FPU-specific calling
	conventions

config FP_SOFTABI
	bool "Floating point Soft ABI"
	depends on FLOAT
	help
	This option selects the Floating point ABI in which hardware floating
	point instructions are generated but soft-float calling conventions.

endchoice

endmenu

if CPU_CORTEX_M
source "arch/arm/core/cortex_m/Kconfig"
endif

if CPU_HAS_MPU
source "arch/arm/core/cortex_m/mpu/Kconfig"
endif
