# 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 4
	default 2
	help
	  ARC MPU has several versions. For MPU v2, the minimum region is 2048 bytes;
	  For MPU v3, the minimum region is 32 bytes

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 = 2
	select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if ARC_MPU_VER = 2
	select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if ARC_MPU_VER = 3
	help
	  Target has ARC MPU (currently only works for EMSK 2.2/2.3 ARCEM7D)
