arch: arm: add new memory partition attributes
Add execution-allowed memory partition attributes for arch arm.
Signed-off-by: Chunlin Han <chunlin.han@linaro.org>
diff --git a/include/arch/arm/arch.h b/include/arch/arm/arch.h
index 66e485e..374b010 100644
--- a/include/arch/arm/arch.h
+++ b/include/arch/arm/arch.h
@@ -211,6 +211,11 @@
#define K_MEM_PARTITION_P_RW_U_NA (P_RW_U_NA | NOT_EXEC)
#define K_MEM_PARTITION_P_RO_U_RO (P_RO_U_RO | NOT_EXEC)
#define K_MEM_PARTITION_P_RO_U_NA (P_RO_U_NA | NOT_EXEC)
+
+/* Execution-allowed attributes */
+#define K_MEM_PARTITION_P_RWX_U_RWX (P_RW_U_RW)
+#define K_MEM_PARTITION_P_RWX_U_RX (P_RW_U_RO)
+#define K_MEM_PARTITION_P_RX_U_RX (P_RO_U_RO)
#endif /* _ASMLANGUAGE */
#define _ARCH_MEM_PARTITION_ALIGN_CHECK(start, size) \
BUILD_ASSERT_MSG(!(((size) & ((size) - 1))) && (size) >= 32 && \
@@ -230,6 +235,14 @@
#define K_MEM_PARTITION_P_RW_U_NA (MPU_REGION_SU_RW)
#define K_MEM_PARTITION_P_RO_U_RO (MPU_REGION_READ | MPU_REGION_SU)
#define K_MEM_PARTITION_P_RO_U_NA (MPU_REGION_SU_RX)
+
+/* Execution-allowed attributes */
+#define K_MEM_PARTITION_P_RWX_U_RWX (MPU_REGION_READ | MPU_REGION_WRITE | \
+ MPU_REGION_EXEC | MPU_REGION_SU)
+#define K_MEM_PARTITION_P_RWX_U_RX (MPU_REGION_READ | MPU_REGION_EXEC | \
+ MPU_REGION_SU_RWX)
+#define K_MEM_PARTITION_P_RX_U_RX (MPU_REGION_READ | MPU_REGION_EXEC | \
+ MPU_REGION_SU)
#endif /* _ASMLANGUAGE */
#define _ARCH_MEM_PARTITION_ALIGN_CHECK(start, size) \
BUILD_ASSERT_MSG((size) % 32 == 0 && (size) >= 32 && \
diff --git a/include/arch/arm/cortex_m/mpu/nxp_mpu.h b/include/arch/arm/cortex_m/mpu/nxp_mpu.h
index 84953ba..8403aaf 100644
--- a/include/arch/arm/cortex_m/mpu/nxp_mpu.h
+++ b/include/arch/arm/cortex_m/mpu/nxp_mpu.h
@@ -68,6 +68,11 @@
(SM_RW_ALLOW << BM2_SM_SHIFT) | \
(SM_RW_ALLOW << BM3_SM_SHIFT))
+#define MPU_REGION_SU_RWX ((SM_RWX_ALLOW << BM0_SM_SHIFT) | \
+ (SM_RWX_ALLOW << BM1_SM_SHIFT) | \
+ (SM_RWX_ALLOW << BM2_SM_SHIFT) | \
+ (SM_RWX_ALLOW << BM3_SM_SHIFT))
+
/* The ENDADDR field has the last 5 bit reserved and set to 1 */
#define ENDADDR_ROUND(x) (x - 0x1F)