# 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 6
	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.

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