xref: /rk3399_ARM-atf/plat/mediatek/mt8183/drivers/emi_mpu/emi_mpu.h (revision 82d8d4ab59986b2747fd329405c57e21dcbf6055)
1*f25ea7e3Skenny liang /*
2*f25ea7e3Skenny liang  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*f25ea7e3Skenny liang  *
4*f25ea7e3Skenny liang  * SPDX-License-Identifier: BSD-3-Clause
5*f25ea7e3Skenny liang  */
6*f25ea7e3Skenny liang 
7*f25ea7e3Skenny liang #ifndef __EMI_MPU_H
8*f25ea7e3Skenny liang #define __EMI_MPU_H
9*f25ea7e3Skenny liang 
10*f25ea7e3Skenny liang #include <platform_def.h>
11*f25ea7e3Skenny liang 
12*f25ea7e3Skenny liang #define EMI_MPUP		(EMI_BASE + 0x01D8)
13*f25ea7e3Skenny liang #define EMI_MPUQ		(EMI_BASE + 0x01E0)
14*f25ea7e3Skenny liang #define EMI_MPUR		(EMI_BASE + 0x01E8)
15*f25ea7e3Skenny liang #define EMI_MPUS		(EMI_BASE + 0x01F0)
16*f25ea7e3Skenny liang #define EMI_MPUT		(EMI_BASE + 0x01F8)
17*f25ea7e3Skenny liang #define EMI_MPUY		(EMI_BASE + 0x0220)
18*f25ea7e3Skenny liang #define EMI_MPU_CTRL	(EMI_MPU_BASE + 0x0000)
19*f25ea7e3Skenny liang #define EMI_MPUD0_ST	(EMI_BASE + 0x0160)
20*f25ea7e3Skenny liang #define EMI_MPUD1_ST	(EMI_BASE + 0x0164)
21*f25ea7e3Skenny liang #define EMI_MPUD2_ST	(EMI_BASE + 0x0168)
22*f25ea7e3Skenny liang #define EMI_MPUD3_ST	(EMI_BASE + 0x016C)
23*f25ea7e3Skenny liang #define EMI_MPUD0_ST2	(EMI_BASE + 0x0200)
24*f25ea7e3Skenny liang #define EMI_MPUD1_ST2	(EMI_BASE + 0x0204)
25*f25ea7e3Skenny liang #define EMI_MPUD2_ST2	(EMI_BASE + 0x0208)
26*f25ea7e3Skenny liang #define EMI_MPUD3_ST2	(EMI_BASE + 0x020C)
27*f25ea7e3Skenny liang 
28*f25ea7e3Skenny liang #define EMI_PHY_OFFSET	(0x40000000UL)
29*f25ea7e3Skenny liang #define EIGHT_DOMAIN
30*f25ea7e3Skenny liang 
31*f25ea7e3Skenny liang #define NO_PROTECTION	(0)
32*f25ea7e3Skenny liang #define SEC_RW			(1)
33*f25ea7e3Skenny liang #define SEC_RW_NSEC_R	(2)
34*f25ea7e3Skenny liang #define SEC_RW_NSEC_W	(3)
35*f25ea7e3Skenny liang #define SEC_R_NSEC_R	(4)
36*f25ea7e3Skenny liang #define FORBIDDEN		(5)
37*f25ea7e3Skenny liang #define SEC_R_NSEC_RW	(6)
38*f25ea7e3Skenny liang 
39*f25ea7e3Skenny liang #define SECURE_OS_MPU_REGION_ID	(0)
40*f25ea7e3Skenny liang #define ATF_MPU_REGION_ID		(1)
41*f25ea7e3Skenny liang 
42*f25ea7e3Skenny liang #ifdef EIGHT_DOMAIN
43*f25ea7e3Skenny liang #define SET_ACCESS_PERMISSON(d7, d6, d5, d4, d3, d2, d1, d0) \
44*f25ea7e3Skenny liang 	(((d7) << 21) | ((d6) << 18) | ((d5) << 15) | ((d4) << 12) \
45*f25ea7e3Skenny liang 	| ((d3) << 9) | ((d2) << 6) | ((d1) << 3) | (d0))
46*f25ea7e3Skenny liang #else
47*f25ea7e3Skenny liang #define SET_ACCESS_PERMISSON(d3, d2, d1, d0) \
48*f25ea7e3Skenny liang 	(((d3) << 9) | ((d2) << 6) | ((d1) << 3) | (d0))
49*f25ea7e3Skenny liang #endif
50*f25ea7e3Skenny liang 
51*f25ea7e3Skenny liang //#define EMI_MPU_BASE                (0x1020E000U)
52*f25ea7e3Skenny liang 
53*f25ea7e3Skenny liang #define EMI_MPU_SA0                 (EMI_MPU_BASE + 0x100)
54*f25ea7e3Skenny liang #define EMI_MPU_SA1                 (EMI_MPU_BASE + 0x104)
55*f25ea7e3Skenny liang #define EMI_MPU_SA2                 (EMI_MPU_BASE + 0x108)
56*f25ea7e3Skenny liang #define EMI_MPU_SA3                 (EMI_MPU_BASE + 0x10C)
57*f25ea7e3Skenny liang #define EMI_MPU_SA4                 (EMI_MPU_BASE + 0x110)
58*f25ea7e3Skenny liang #define EMI_MPU_SA5                 (EMI_MPU_BASE + 0x114)
59*f25ea7e3Skenny liang #define EMI_MPU_SA6                 (EMI_MPU_BASE + 0x118)
60*f25ea7e3Skenny liang #define EMI_MPU_SA7                 (EMI_MPU_BASE + 0x11C)
61*f25ea7e3Skenny liang 
62*f25ea7e3Skenny liang #define EMI_MPU_EA0                 (EMI_MPU_BASE + 0x200)
63*f25ea7e3Skenny liang #define EMI_MPU_EA1                 (EMI_MPU_BASE + 0x204)
64*f25ea7e3Skenny liang #define EMI_MPU_EA2                 (EMI_MPU_BASE + 0x208)
65*f25ea7e3Skenny liang #define EMI_MPU_EA3                 (EMI_MPU_BASE + 0x20C)
66*f25ea7e3Skenny liang #define EMI_MPU_EA4                 (EMI_MPU_BASE + 0x210)
67*f25ea7e3Skenny liang #define EMI_MPU_EA5                 (EMI_MPU_BASE + 0x214)
68*f25ea7e3Skenny liang #define EMI_MPU_EA6                 (EMI_MPU_BASE + 0x218)
69*f25ea7e3Skenny liang #define EMI_MPU_EA7                 (EMI_MPU_BASE + 0x21C)
70*f25ea7e3Skenny liang 
71*f25ea7e3Skenny liang #define EMI_MPU_APC0                (EMI_MPU_BASE + 0x300)
72*f25ea7e3Skenny liang #define EMI_MPU_APC1                (EMI_MPU_BASE + 0x304)
73*f25ea7e3Skenny liang #define EMI_MPU_APC2                (EMI_MPU_BASE + 0x308)
74*f25ea7e3Skenny liang #define EMI_MPU_APC3                (EMI_MPU_BASE + 0x30C)
75*f25ea7e3Skenny liang #define EMI_MPU_APC4                (EMI_MPU_BASE + 0x310)
76*f25ea7e3Skenny liang #define EMI_MPU_APC5                (EMI_MPU_BASE + 0x314)
77*f25ea7e3Skenny liang #define EMI_MPU_APC6                (EMI_MPU_BASE + 0x318)
78*f25ea7e3Skenny liang #define EMI_MPU_APC7                (EMI_MPU_BASE + 0x31C)
79*f25ea7e3Skenny liang 
80*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D0             (EMI_MPU_BASE + 0x800)
81*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D1             (EMI_MPU_BASE + 0x804)
82*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D2             (EMI_MPU_BASE + 0x808)
83*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D3             (EMI_MPU_BASE + 0x80C)
84*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D4             (EMI_MPU_BASE + 0x810)
85*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D5             (EMI_MPU_BASE + 0x814)
86*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D6             (EMI_MPU_BASE + 0x818)
87*f25ea7e3Skenny liang #define EMI_MPU_CTRL_D7             (EMI_MPU_BASE + 0x81C)
88*f25ea7e3Skenny liang 
89*f25ea7e3Skenny liang #define EMI_MPU_MASK_D0             (EMI_MPU_BASE + 0x900)
90*f25ea7e3Skenny liang #define EMI_MPU_MASK_D1             (EMI_MPU_BASE + 0x904)
91*f25ea7e3Skenny liang #define EMI_MPU_MASK_D2             (EMI_MPU_BASE + 0x908)
92*f25ea7e3Skenny liang #define EMI_MPU_MASK_D3             (EMI_MPU_BASE + 0x90C)
93*f25ea7e3Skenny liang #define EMI_MPU_MASK_D4             (EMI_MPU_BASE + 0x910)
94*f25ea7e3Skenny liang #define EMI_MPU_MASK_D5             (EMI_MPU_BASE + 0x914)
95*f25ea7e3Skenny liang #define EMI_MPU_MASK_D6             (EMI_MPU_BASE + 0x918)
96*f25ea7e3Skenny liang #define EMI_MPU_MASK_D7             (EMI_MPU_BASE + 0x91C)
97*f25ea7e3Skenny liang 
98*f25ea7e3Skenny liang int emi_mpu_set_region_protection(
99*f25ea7e3Skenny liang 	unsigned long start, unsigned long end,
100*f25ea7e3Skenny liang 	int region,
101*f25ea7e3Skenny liang 	unsigned int access_permission);
102*f25ea7e3Skenny liang 
103*f25ea7e3Skenny liang void dump_emi_mpu_regions(void);
104*f25ea7e3Skenny liang void emi_mpu_init(void);
105*f25ea7e3Skenny liang 
106*f25ea7e3Skenny liang #endif  /* __EMI_MPU_H */
107