6#ifndef ZEPHYR_INCLUDE_ARCH_ARM_MPU_NXP_MPU_H_
7#define ZEPHYR_INCLUDE_ARCH_ARM_MPU_NXP_MPU_H_
11#define NXP_MPU_REGION_NUMBER 12
20#define BM2_UM_SHIFT 12
21#define BM3_UM_SHIFT 18
27#define SM_SAME_AS_UM 3
31#define BM2_SM_SHIFT 15
32#define BM3_SM_SHIFT 21
34#define BM4_WE_SHIFT 24
35#define BM4_RE_SHIFT 25
37#if CONFIG_USB_KINETIS || CONFIG_UDC_KINETIS
38#define BM4_PERMISSIONS ((1 << BM4_RE_SHIFT) | (1 << BM4_WE_SHIFT))
40#define BM4_PERMISSIONS 0
44#define MPU_REGION_READ \
45 ((UM_READ << BM0_UM_SHIFT) | (UM_READ << BM1_UM_SHIFT) | (UM_READ << BM2_UM_SHIFT) | \
46 (UM_READ << BM3_UM_SHIFT))
44#define MPU_REGION_READ \ …
49#define MPU_REGION_WRITE \
50 ((UM_WRITE << BM0_UM_SHIFT) | (UM_WRITE << BM1_UM_SHIFT) | (UM_WRITE << BM2_UM_SHIFT) | \
51 (UM_WRITE << BM3_UM_SHIFT))
49#define MPU_REGION_WRITE \ …
54#define MPU_REGION_EXEC \
55 ((UM_EXEC << BM0_UM_SHIFT) | (UM_EXEC << BM1_UM_SHIFT) | (UM_EXEC << BM2_UM_SHIFT) | \
56 (UM_EXEC << BM3_UM_SHIFT))
54#define MPU_REGION_EXEC \ …
59#define MPU_REGION_SU \
60 ((SM_SAME_AS_UM << BM0_SM_SHIFT) | (SM_SAME_AS_UM << BM1_SM_SHIFT) | \
61 (SM_SAME_AS_UM << BM2_SM_SHIFT) | (SM_SAME_AS_UM << BM3_SM_SHIFT))
59#define MPU_REGION_SU \ …
63#define MPU_REGION_SU_RX \
64 ((SM_RX_ALLOW << BM0_SM_SHIFT) | (SM_RX_ALLOW << BM1_SM_SHIFT) | \
65 (SM_RX_ALLOW << BM2_SM_SHIFT) | (SM_RX_ALLOW << BM3_SM_SHIFT))
63#define MPU_REGION_SU_RX \ …
67#define MPU_REGION_SU_RW \
68 ((SM_RW_ALLOW << BM0_SM_SHIFT) | (SM_RW_ALLOW << BM1_SM_SHIFT) | \
69 (SM_RW_ALLOW << BM2_SM_SHIFT) | (SM_RW_ALLOW << BM3_SM_SHIFT))
67#define MPU_REGION_SU_RW \ …
71#define MPU_REGION_SU_RWX \
72 ((SM_RWX_ALLOW << BM0_SM_SHIFT) | (SM_RWX_ALLOW << BM1_SM_SHIFT) | \
73 (SM_RWX_ALLOW << BM2_SM_SHIFT) | (SM_RWX_ALLOW << BM3_SM_SHIFT))
71#define MPU_REGION_SU_RWX \ …
76#define ENDADDR_ROUND(x) (x - 0x1F)
78#define REGION_USER_MODE_ATTR {(MPU_REGION_READ | MPU_REGION_WRITE | MPU_REGION_SU)}
81#if defined(CONFIG_MPU_ALLOW_FLASH_WRITE)
82#define REGION_RAM_ATTR \
83 {((MPU_REGION_SU_RWX) | ((UM_READ | UM_WRITE | UM_EXEC) << BM3_UM_SHIFT) | \
86#define REGION_FLASH_ATTR {(MPU_REGION_SU_RWX)}
89#define REGION_RAM_ATTR \
90 {((MPU_REGION_SU_RW) | ((UM_READ | UM_WRITE) << BM3_UM_SHIFT) | (BM4_PERMISSIONS))}
89#define REGION_RAM_ATTR \ …
92#define REGION_FLASH_ATTR {(MPU_REGION_READ | MPU_REGION_EXEC | MPU_REGION_SU)}
95#define REGION_IO_ATTR {(MPU_REGION_READ | MPU_REGION_WRITE | MPU_REGION_EXEC | MPU_REGION_SU)}
97#define REGION_RO_ATTR {(MPU_REGION_READ | MPU_REGION_SU)}
99#define REGION_USER_RO_ATTR {(MPU_REGION_READ | MPU_REGION_SU)}
104#define REGION_DEBUGGER_AND_DEVICE_ATTR \
105 {((MPU_REGION_SU) | ((UM_READ | UM_WRITE) << BM3_UM_SHIFT) | (BM4_PERMISSIONS))}
104#define REGION_DEBUGGER_AND_DEVICE_ATTR \ …
107#define REGION_DEBUG_ATTR {MPU_REGION_SU}
109#define REGION_BACKGROUND_ATTR {MPU_REGION_SU_RW}
131#define K_MEM_PARTITION_P_NA_U_NA ((k_mem_partition_attr_t){(MPU_REGION_SU)})
132#define K_MEM_PARTITION_P_RW_U_RW \
133 ((k_mem_partition_attr_t){(MPU_REGION_READ | MPU_REGION_WRITE | MPU_REGION_SU)})
132#define K_MEM_PARTITION_P_RW_U_RW \ …
134#define K_MEM_PARTITION_P_RW_U_RO ((k_mem_partition_attr_t){(MPU_REGION_READ | MPU_REGION_SU_RW)})
135#define K_MEM_PARTITION_P_RW_U_NA ((k_mem_partition_attr_t){(MPU_REGION_SU_RW)})
136#define K_MEM_PARTITION_P_RO_U_RO ((k_mem_partition_attr_t){(MPU_REGION_READ | MPU_REGION_SU)})
137#define K_MEM_PARTITION_P_RO_U_NA ((k_mem_partition_attr_t){(MPU_REGION_SU_RX)})
140#define K_MEM_PARTITION_P_RWX_U_RWX \
141 ((k_mem_partition_attr_t){ \
142 (MPU_REGION_READ | MPU_REGION_WRITE | MPU_REGION_EXEC | MPU_REGION_SU)})
140#define K_MEM_PARTITION_P_RWX_U_RWX \ …
143#define K_MEM_PARTITION_P_RWX_U_RX \
144 ((k_mem_partition_attr_t){(MPU_REGION_READ | MPU_REGION_EXEC | MPU_REGION_SU_RWX)})
143#define K_MEM_PARTITION_P_RWX_U_RX \ …
145#define K_MEM_PARTITION_P_RX_U_RX \
146 ((k_mem_partition_attr_t){(MPU_REGION_READ | MPU_REGION_EXEC | MPU_REGION_SU)})
145#define K_MEM_PARTITION_P_RX_U_RX \ …
156#define K_MEM_PARTITION_IS_WRITABLE(attr) \
158 int __is_writable__; \
159 switch (attr.ap_attr) { \
160 case MPU_REGION_WRITE: \
161 case MPU_REGION_SU_RW: \
162 __is_writable__ = 1; \
165 __is_writable__ = 0; \
156#define K_MEM_PARTITION_IS_WRITABLE(attr) \ …
179#define K_MEM_PARTITION_IS_EXECUTABLE(attr) \
181 int __is_executable__; \
182 switch (attr.ap_attr) { \
183 case MPU_REGION_SU_RX: \
184 case MPU_REGION_EXEC: \
185 __is_executable__ = 1; \
188 __is_executable__ = 0; \
179#define K_MEM_PARTITION_IS_EXECUTABLE(attr) \ …
205#define MPU_REGION_ENTRY(_name, _base, _end, _attr) \
205#define MPU_REGION_ENTRY(_name, _base, _end, _attr) \ …
235#define _ARCH_MEM_PARTITION_ALIGN_CHECK(start, size) \
237 (size) % CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE == 0 && \
238 (size) >= CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE && \
239 (uint32_t)(start) % CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE == 0, \
240 "The size of the partition must align with minimum MPU region size" \
241 " and greater than or equal to minimum MPU region size.\n" \
242 "The start address of the partition must align with minimum MPU region size.")
uint32_t k_mem_partition_attr_t
Definition arch.h:346
const struct nxp_mpu_config mpu_config
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
uint32_t ap_attr
Definition nxp_mpu.h:120
uint32_t sram_region
Definition nxp_mpu.h:220
const struct nxp_mpu_region * mpu_regions
Definition nxp_mpu.h:218
uint32_t num_regions
Definition nxp_mpu.h:216
uint32_t attr
Definition nxp_mpu.h:113
uint32_t base
Definition nxp_mpu.h:196
const char * name
Definition nxp_mpu.h:200
uint32_t end
Definition nxp_mpu.h:198
nxp_mpu_region_attr_t attr
Definition nxp_mpu.h:202