1 /* 2 * Copyright (c) 2017 Linaro Limited. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 #ifndef ZEPHYR_INCLUDE_ARCH_ARM_MPU_ARM_MPU_H_ 7 #define ZEPHYR_INCLUDE_ARCH_ARM_MPU_ARM_MPU_H_ 8 9 #if defined(CONFIG_CPU_CORTEX_M0PLUS) || defined(CONFIG_CPU_CORTEX_M3) || \ 10 defined(CONFIG_CPU_CORTEX_M4) || defined(CONFIG_CPU_CORTEX_M7) || defined(CONFIG_ARMV7_R) 11 #include <zephyr/arch/arm/mpu/arm_mpu_v7m.h> 12 #elif defined(CONFIG_CPU_CORTEX_M23) || defined(CONFIG_CPU_CORTEX_M33) || \ 13 defined(CONFIG_CPU_CORTEX_M55) || defined(CONFIG_CPU_CORTEX_M85) || \ 14 defined(CONFIG_AARCH32_ARMV8_R) 15 #include <zephyr/arch/arm/mpu/arm_mpu_v8.h> 16 #else 17 #error "Unsupported ARM CPU" 18 #endif 19 20 #ifndef _ASMLANGUAGE 21 22 /* Region definition data structure */ 23 struct arm_mpu_region { 24 /* Region Base Address */ 25 uint32_t base; 26 /* Region Name */ 27 const char *name; 28 #if defined(CONFIG_CPU_AARCH32_CORTEX_R) 29 /* Region Size */ 30 uint32_t size; 31 #endif 32 /* Region Attributes */ 33 arm_mpu_region_attr_t attr; 34 }; 35 36 /* MPU configuration data structure */ 37 struct arm_mpu_config { 38 /* Number of regions */ 39 uint32_t num_regions; 40 /* Regions */ 41 const struct arm_mpu_region *mpu_regions; 42 }; 43 44 #if defined(CONFIG_ARMV7_R) 45 #define MPU_REGION_ENTRY(_name, _base, _size, _attr) \ 46 { \ 47 .name = _name, \ 48 .base = _base, \ 49 .size = _size, \ 50 .attr = _attr, \ 51 } 52 #else 53 #define MPU_REGION_ENTRY(_name, _base, _attr) \ 54 { \ 55 .name = _name, \ 56 .base = _base, \ 57 .attr = _attr, \ 58 } 59 #endif 60 61 /* Reference to the MPU configuration. 62 * 63 * This struct is defined and populated for each SoC (in the SoC definition), 64 * and holds the build-time configuration information for the fixed MPU 65 * regions enabled during kernel initialization. Dynamic MPU regions (e.g. 66 * for Thread Stack, Stack Guards, etc.) are programmed during runtime, thus, 67 * not kept here. 68 */ 69 extern const struct arm_mpu_config mpu_config; 70 71 #endif /* _ASMLANGUAGE */ 72 73 #endif /* ZEPHYR_INCLUDE_ARCH_ARM_MPU_ARM_MPU_H_ */ 74