From 607c9aa3cd1fadbe565803f7faa55d687d68f09a Mon Sep 17 00:00:00 2001 From: Chunlin Han Date: Mon, 2 Oct 2017 17:14:03 +0800 Subject: [PATCH] arch: arm: add new memory partition attributes Add execution-allowed memory partition attributes for arch arm. Signed-off-by: Chunlin Han --- include/arch/arm/arch.h | 13 +++++++++++++ include/arch/arm/cortex_m/mpu/nxp_mpu.h | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/include/arch/arm/arch.h b/include/arch/arm/arch.h index 66e485e244b..374b0102d7c 100644 --- a/include/arch/arm/arch.h +++ b/include/arch/arm/arch.h @@ -211,6 +211,11 @@ extern "C" { #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 @@ extern "C" { #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 84953badc12..8403aafb855 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)