# General options signifying CPU capabilities of ARM SoCs

# Copyright (c) 2018 Nordic Semiconductor ASA.
# SPDX-License-Identifier: Apache-2.0

config CPU_HAS_ARM_MPU
	bool
	select CPU_HAS_MPU
	help
	  This option is enabled when the CPU has a Memory Protection Unit (MPU)
	  in ARM flavor.

config CPU_HAS_NXP_MPU
	bool
	select CPU_HAS_MPU
	help
	  This option is enabled when the CPU has a Memory Protection Unit (MPU)
	  in NXP flavor.

config CPU_HAS_ARM_SAU
	bool
	select CPU_HAS_TEE
	help
	  MCU implements the ARM Security Attribution Unit (SAU).

config CPU_HAS_NRF_IDAU
	bool
	depends on SOC_SERIES_NRF91X || SOC_NRF5340_CPUAPP
	select CPU_HAS_TEE
	help
	  MCU implements the nRF (vendor-specific) Security Attribution Unit.
	  (IDAU: "Implementation-Defined Attribution Unit", in accordance with
	  ARM terminology).

config CPU_HAS_FPU_DOUBLE_PRECISION
	bool
	depends on CPU_CORTEX_M7
	select CPU_HAS_FPU
	help
	  When enabled, indicates that the SoC has a double
	  floating point precision unit.

config HAS_SWO
	bool
	help
	  When enabled, indicates that SoC has an SWO output

config SOC_PART_NUMBER
	string
	help
	  This string holds the full part number of the SoC. It is a hidden option
	  that you should not set directly. The part number selection choice defines
	  the default value for this string.
