# Memory Protection Unit (MPU) configuration options

#Copyright (c) 2017 Linaro Limited.
#Copyright (c) 2021 Arm Limited (or its affiliates). All rights reserved.

# SPDX-License-Identifier: Apache-2.0

if CPU_HAS_MPU

config ARM_MPU
	bool "ARM MPU Support"
	select THREAD_STACK_INFO
	default y
	help
	  MPU implements Memory Protection Unit.

	  Notes:
	  The ARMv8-R MPU architecture requires a power-of-two alignment
	  of MPU region base address and size(64 bytes aligned).

	  The ARMv8-R MPU requires the active MPU regions be non-overlapping.
	  As a result of this, the ARMv8-R MPU needs to fully partition the
	  memory map when programming dynamic memory regions (e.g. PRIV stack
	  guard, user thread stack, and application memory domains), if the
	  system requires PRIV access policy different from the access policy
	  of the ARMv8-R background memory map. The application developer may
	  enforce full PRIV (kernel) memory partition by enabling the
	  CONFIG_MPU_GAP_FILLING option.
	  By not enforcing full partition, MPU may leave part of kernel
	  SRAM area covered only by the default ARMv8-R memory map. This
	  is fine for User Mode, since the background ARM map does not
	  allow nPRIV access at all. However, since the background map
	  policy allows instruction fetches by privileged code, forcing
	  this Kconfig option off prevents the system from directly
	  triggering MemManage exceptions upon accidental attempts to
	  execute code from SRAM in XIP builds.
	  Since this does not compromise User Mode, we make the skipping
	  of full partitioning the default behavior for the ARMv8-R MPU
	  driver.

config ARM_MPU_REGION_MIN_ALIGN_AND_SIZE
	int
	default 64 if ARM_MPU
	default 4
	help
	  Minimum size (and alignment) of an ARM MPU region. Use this
	  symbol to guarantee minimum size and alignment of MPU regions.
	  A minimum 4-byte alignment is enforced in ARM builds without
	  support for Memory Protection.

if ARM_MPU

config MPU_ALLOW_FLASH_WRITE
	bool "Add MPU access to write to flash"
	help
	  Enable this to allow MPU RWX access to flash memory

endif # ARM_MPU

endif # CPU_HAS_MPU
