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