51d482a5cd3926bc3657f045503da54a4a2f8778
[platform/kernel/u-boot.git] / arch / arm / include / asm / armv7m_mpu.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
4  * Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
5  */
6
7 enum region_number {
8         REGION_0 = 0,
9         REGION_1,
10         REGION_2,
11         REGION_3,
12         REGION_4,
13         REGION_5,
14         REGION_6,
15         REGION_7,
16 };
17
18 enum ap {
19         NO_ACCESS = 0,
20         PRIV_RW_USR_NO,
21         PRIV_RW_USR_RO,
22         PRIV_RW_USR_RW,
23         UNPREDICTABLE,
24         PRIV_RO_USR_NO,
25         PRIV_RO_USR_RO,
26 };
27
28 enum mr_attr {
29         STRONG_ORDER = 0,
30         SHARED_WRITE_BUFFERED,
31         O_I_WT_NO_WR_ALLOC,
32         O_I_WB_NO_WR_ALLOC,
33         O_I_NON_CACHEABLE,
34         O_I_WB_RD_WR_ALLOC,
35         DEVICE_NON_SHARED,
36 };
37 enum size {
38         REGION_8MB = 22,
39         REGION_16MB,
40         REGION_32MB,
41         REGION_64MB,
42         REGION_128MB,
43         REGION_256MB,
44         REGION_512MB,
45         REGION_1GB,
46         REGION_2GB,
47         REGION_4GB,
48 };
49
50 enum xn {
51         XN_DIS = 0,
52         XN_EN,
53 };
54
55 struct mpu_region_config {
56         uint32_t start_addr;
57         enum region_number region_no;
58         enum xn xn;
59         enum ap ap;
60         enum mr_attr mr_attr;
61         enum size reg_size;
62 };
63
64 void disable_mpu(void);
65 void enable_mpu(void);
66 void mpu_config(struct mpu_region_config *reg_config);