| # 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 |
| select MPU |
| select SRAM_REGION_PERMISSIONS |
| select ARCH_MEM_DOMAIN_SYNCHRONOUS_API if USERSPACE |
| 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 |