Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
arc_mpu.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017 Synopsys.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef ZEPHYR_INCLUDE_ARCH_ARC_V2_MPU_ARC_MPU_H_
7#define ZEPHYR_INCLUDE_ARCH_ARC_V2_MPU_ARC_MPU_H_
8
9
10
11#define AUX_MPU_ATTR_UE 0x008 /* allow user execution */
12#define AUX_MPU_ATTR_UW 0x010 /* allow user write */
13#define AUX_MPU_ATTR_UR 0x020 /* allow user read */
14#define AUX_MPU_ATTR_KE 0x040 /* only allow kernel execution */
15#define AUX_MPU_ATTR_KW 0x080 /* only allow kernel write */
16#define AUX_MPU_ATTR_KR 0x100 /* only allow kernel read */
17#define AUX_MPU_ATTR_S 0x8000 /* secure */
18#define AUX_MPU_ATTR_N 0x0000 /* normal */
19
20
21/*
22 * a region is dynamic means it can be split into sub regions.
23 * This attribute is meaningful for ARC MPUv3 which does not support mpu
24 * entry overlap. For ARC MPUv2, this attribute will be ignored as it
25 * supports mpu overlap in hardware.
26 */
27#define REGION_DYNAMIC 0x800 /* dynamic flag */
28
29
30/* Some helper defines for common regions */
31
32#define REGION_KERNEL_RAM_ATTR \
33 (AUX_MPU_ATTR_KW | AUX_MPU_ATTR_KR)
34
35#define REGION_KERNEL_ROM_ATTR \
36 (AUX_MPU_ATTR_KE | AUX_MPU_ATTR_KR)
37
38#define REGION_RAM_ATTR \
39 (AUX_MPU_ATTR_UW | AUX_MPU_ATTR_UR | \
40 AUX_MPU_ATTR_KW | AUX_MPU_ATTR_KR)
41
42#define REGION_ROM_ATTR \
43 (AUX_MPU_ATTR_UE | AUX_MPU_ATTR_UR | \
44 AUX_MPU_ATTR_KE | AUX_MPU_ATTR_KR)
45
46#define REGION_IO_ATTR \
47 (AUX_MPU_ATTR_UW | AUX_MPU_ATTR_UR | \
48 AUX_MPU_ATTR_KW | AUX_MPU_ATTR_KR)
49
50#define REGION_ALL_ATTR \
51 (AUX_MPU_ATTR_UW | AUX_MPU_ATTR_UR | \
52 AUX_MPU_ATTR_KW | AUX_MPU_ATTR_KR | \
53 AUX_MPU_ATTR_KE | AUX_MPU_ATTR_UE)
54
55
56#define REGION_32B 0x200
57#define REGION_64B 0x201
58#define REGION_128B 0x202
59#define REGION_256B 0x203
60#define REGION_512B 0x400
61#define REGION_1K 0x401
62#define REGION_2K 0x402
63#define REGION_4K 0x403
64#define REGION_8K 0x600
65#define REGION_16K 0x601
66#define REGION_32K 0x602
67#define REGION_64K 0x603
68#define REGION_128K 0x800
69#define REGION_256K 0x801
70#define REGION_512K 0x802
71#define REGION_1M 0x803
72#define REGION_2M 0xA00
73#define REGION_4M 0xA01
74#define REGION_8M 0xA02
75#define REGION_16M 0xA03
76#define REGION_32M 0xC00
77#define REGION_64M 0xC01
78#define REGION_128M 0xC02
79#define REGION_256M 0xC03
80#define REGION_512M 0xE00
81#define REGION_1G 0xE01
82#define REGION_2G 0xE02
83#define REGION_4G 0xE03
84
85/* Region definition data structure */
87 /* Region Name */
88 const char *name;
89 /* Region Base Address */
92 /* Region Attributes */
94};
95
96#define MPU_REGION_ENTRY(_name, _base, _size, _attr) \
97 {\
98 .name = _name, \
99 .base = _base, \
100 .size = _size, \
101 .attr = _attr, \
102 }
103
104/* MPU configuration data structure */
106 /* Number of regions */
108 /* Regions */
110};
111
112/* Reference to the MPU configuration */
113extern struct arc_mpu_config mpu_config;
114
115#endif /* _ARC_CORE_MPU_H_ */
struct arc_mpu_config mpu_config
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Definition: arc_mpu.h:105
uint32_t num_regions
Definition: arc_mpu.h:107
struct arc_mpu_region * mpu_regions
Definition: arc_mpu.h:109
Definition: arc_mpu.h:86
uint32_t size
Definition: arc_mpu.h:91
uint32_t base
Definition: arc_mpu.h:90
const char * name
Definition: arc_mpu.h:88
uint32_t attr
Definition: arc_mpu.h:93