# Memory Protection Unit (MPU) configuration options

# Copyright (c) 2017 Synopsys
# SPDX-License-Identifier: Apache-2.0

config ARC_MPU_VER
	int "ARC MPU version"
	range 2 8
	default 2
	help
	  ARC MPU has several versions. For MPU v2, the minimum region is 2048 bytes;
	  For other versions, the minimum region is 32 bytes; v4 has secure features,
	  v6 supports up to 32 regions. Note: MPU v5 & v7 are not supported.

config ARC_CORE_MPU
	bool "ARC Core MPU functionalities"
	help
	  ARC core MPU functionalities

config MPU_STACK_GUARD
	bool "Thread Stack Guards"
	depends on ARC_CORE_MPU && ARC_MPU_VER !=2
	help
	  Enable thread stack guards via MPU. ARC supports built-in stack protection.
	  If your core supports that, it is preferred over MPU stack guard.
	  For ARC_MPU_VER == 2, it requires 2048 extra bytes and a strong start address
	  alignment, this will bring big waste of memory, so no support for it.

config ARC_MPU
	bool "ARC MPU Support"
	select MPU
	select SRAM_REGION_PERMISSIONS
	select ARC_CORE_MPU
	select THREAD_STACK_INFO
	select GEN_PRIV_STACKS if !(ARC_MPU_VER = 4 || ARC_MPU_VER = 8)
	select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if !(ARC_MPU_VER = 4 || ARC_MPU_VER = 8)
	select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if (ARC_MPU_VER = 4 || ARC_MPU_VER = 8)
	help
	  Target has ARC MPU
