xref: /arm-trusted-firmware/plat/mediatek/mt8192/drivers/devapc/devapc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef DEVAPC_H
8*91f16700Schasinglulu #define DEVAPC_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stdint.h>
11*91f16700Schasinglulu #include <platform_def.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu /******************************************************************************
14*91f16700Schasinglulu  * FUNCTION DEFINITION
15*91f16700Schasinglulu  ******************************************************************************/
16*91f16700Schasinglulu void devapc_init(void);
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /******************************************************************************
19*91f16700Schasinglulu  * STRUCTURE DEFINITION
20*91f16700Schasinglulu  ******************************************************************************/
21*91f16700Schasinglulu enum DEVAPC_PERM_TYPE {
22*91f16700Schasinglulu 	NO_PROTECTION = 0,
23*91f16700Schasinglulu 	SEC_RW_ONLY,
24*91f16700Schasinglulu 	SEC_RW_NS_R,
25*91f16700Schasinglulu 	FORBIDDEN,
26*91f16700Schasinglulu 	PERM_NUM,
27*91f16700Schasinglulu };
28*91f16700Schasinglulu 
29*91f16700Schasinglulu enum DOMAIN_ID {
30*91f16700Schasinglulu 	DOMAIN_0 = 0,
31*91f16700Schasinglulu 	DOMAIN_1,
32*91f16700Schasinglulu 	DOMAIN_2,
33*91f16700Schasinglulu 	DOMAIN_3,
34*91f16700Schasinglulu 	DOMAIN_4,
35*91f16700Schasinglulu 	DOMAIN_5,
36*91f16700Schasinglulu 	DOMAIN_6,
37*91f16700Schasinglulu 	DOMAIN_7,
38*91f16700Schasinglulu 	DOMAIN_8,
39*91f16700Schasinglulu 	DOMAIN_9,
40*91f16700Schasinglulu 	DOMAIN_10,
41*91f16700Schasinglulu 	DOMAIN_11,
42*91f16700Schasinglulu 	DOMAIN_12,
43*91f16700Schasinglulu 	DOMAIN_13,
44*91f16700Schasinglulu 	DOMAIN_14,
45*91f16700Schasinglulu 	DOMAIN_15,
46*91f16700Schasinglulu };
47*91f16700Schasinglulu 
48*91f16700Schasinglulu /* Slave Type */
49*91f16700Schasinglulu enum DEVAPC_SLAVE_TYPE_SIMPLE {
50*91f16700Schasinglulu 	SLAVE_TYPE_INFRA = 0,
51*91f16700Schasinglulu 	SLAVE_TYPE_PERI,
52*91f16700Schasinglulu 	SLAVE_TYPE_PERI2,
53*91f16700Schasinglulu 	SLAVE_TYPE_PERI_PAR,
54*91f16700Schasinglulu };
55*91f16700Schasinglulu 
56*91f16700Schasinglulu enum DEVAPC_SYS_INDEX {
57*91f16700Schasinglulu 	DEVAPC_SYS0 = 0,
58*91f16700Schasinglulu 	DEVAPC_SYS1,
59*91f16700Schasinglulu 	DEVAPC_SYS2,
60*91f16700Schasinglulu };
61*91f16700Schasinglulu 
62*91f16700Schasinglulu enum DEVAPC_SLAVE_TYPE {
63*91f16700Schasinglulu 	SLAVE_TYPE_INFRA_AO_SYS0 = 0,
64*91f16700Schasinglulu 	SLAVE_TYPE_INFRA_AO_SYS1,
65*91f16700Schasinglulu 	SLAVE_TYPE_INFRA_AO_SYS2,
66*91f16700Schasinglulu 	SLAVE_TYPE_PERI_AO_SYS0,
67*91f16700Schasinglulu 	SLAVE_TYPE_PERI_AO_SYS1,
68*91f16700Schasinglulu 	SLAVE_TYPE_PERI_AO_SYS2,
69*91f16700Schasinglulu 	SLAVE_TYPE_PERI_AO2_SYS0,
70*91f16700Schasinglulu 	SLAVE_TYPE_PERI_PAR_AO_SYS0,
71*91f16700Schasinglulu };
72*91f16700Schasinglulu 
73*91f16700Schasinglulu /* Slave Num */
74*91f16700Schasinglulu enum DEVAPC_SLAVE_NUM {
75*91f16700Schasinglulu 	SLAVE_NUM_INFRA_AO_SYS0 = 23,
76*91f16700Schasinglulu 	SLAVE_NUM_INFRA_AO_SYS1 = 256,
77*91f16700Schasinglulu 	SLAVE_NUM_INFRA_AO_SYS2 = 70,
78*91f16700Schasinglulu 	SLAVE_NUM_PERI_AO_SYS0 = 105,
79*91f16700Schasinglulu 	SLAVE_NUM_PERI_AO_SYS1 = 66,
80*91f16700Schasinglulu 	SLAVE_NUM_PERI_AO_SYS2 = 1,
81*91f16700Schasinglulu 	SLAVE_NUM_PERI_AO2_SYS0 = 115,
82*91f16700Schasinglulu 	SLAVE_NUM_PERI_PAR_AO_SYS0 = 27,
83*91f16700Schasinglulu };
84*91f16700Schasinglulu 
85*91f16700Schasinglulu enum DEVAPC_SYS_DOM_NUM {
86*91f16700Schasinglulu 	DOM_NUM_INFRA_AO_SYS0 = 16,
87*91f16700Schasinglulu 	DOM_NUM_INFRA_AO_SYS1 = 4,
88*91f16700Schasinglulu 	DOM_NUM_INFRA_AO_SYS2 = 4,
89*91f16700Schasinglulu 	DOM_NUM_PERI_AO_SYS0 = 16,
90*91f16700Schasinglulu 	DOM_NUM_PERI_AO_SYS1 = 8,
91*91f16700Schasinglulu 	DOM_NUM_PERI_AO_SYS2 = 4,
92*91f16700Schasinglulu 	DOM_NUM_PERI_AO2_SYS0 = 16,
93*91f16700Schasinglulu 	DOM_NUM_PERI_PAR_AO_SYS0 = 16,
94*91f16700Schasinglulu };
95*91f16700Schasinglulu 
96*91f16700Schasinglulu enum DEVAPC_CFG_INDEX {
97*91f16700Schasinglulu 	DEVAPC_DEBUGSYS_INDEX = 57,
98*91f16700Schasinglulu };
99*91f16700Schasinglulu 
100*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_16 {
101*91f16700Schasinglulu 	unsigned char d0_permission;
102*91f16700Schasinglulu 	unsigned char d1_permission;
103*91f16700Schasinglulu 	unsigned char d2_permission;
104*91f16700Schasinglulu 	unsigned char d3_permission;
105*91f16700Schasinglulu 	unsigned char d4_permission;
106*91f16700Schasinglulu 	unsigned char d5_permission;
107*91f16700Schasinglulu 	unsigned char d6_permission;
108*91f16700Schasinglulu 	unsigned char d7_permission;
109*91f16700Schasinglulu 	unsigned char d8_permission;
110*91f16700Schasinglulu 	unsigned char d9_permission;
111*91f16700Schasinglulu 	unsigned char d10_permission;
112*91f16700Schasinglulu 	unsigned char d11_permission;
113*91f16700Schasinglulu 	unsigned char d12_permission;
114*91f16700Schasinglulu 	unsigned char d13_permission;
115*91f16700Schasinglulu 	unsigned char d14_permission;
116*91f16700Schasinglulu 	unsigned char d15_permission;
117*91f16700Schasinglulu };
118*91f16700Schasinglulu 
119*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_8 {
120*91f16700Schasinglulu 	unsigned char d0_permission;
121*91f16700Schasinglulu 	unsigned char d1_permission;
122*91f16700Schasinglulu 	unsigned char d2_permission;
123*91f16700Schasinglulu 	unsigned char d3_permission;
124*91f16700Schasinglulu 	unsigned char d4_permission;
125*91f16700Schasinglulu 	unsigned char d5_permission;
126*91f16700Schasinglulu 	unsigned char d6_permission;
127*91f16700Schasinglulu 	unsigned char d7_permission;
128*91f16700Schasinglulu };
129*91f16700Schasinglulu 
130*91f16700Schasinglulu struct APC_INFRA_PERI_DOM_4 {
131*91f16700Schasinglulu 	unsigned char d0_permission;
132*91f16700Schasinglulu 	unsigned char d1_permission;
133*91f16700Schasinglulu 	unsigned char d2_permission;
134*91f16700Schasinglulu 	unsigned char d3_permission;
135*91f16700Schasinglulu };
136*91f16700Schasinglulu 
137*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS0_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
138*91f16700Schasinglulu 		PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \
139*91f16700Schasinglulu 		PERM_ATTR6, PERM_ATTR7, PERM_ATTR8, PERM_ATTR9, \
140*91f16700Schasinglulu 		PERM_ATTR10, PERM_ATTR11, PERM_ATTR12, PERM_ATTR13, \
141*91f16700Schasinglulu 		PERM_ATTR14, PERM_ATTR15) \
142*91f16700Schasinglulu 	{(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
143*91f16700Schasinglulu 	(unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \
144*91f16700Schasinglulu 	(unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \
145*91f16700Schasinglulu 	(unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7, \
146*91f16700Schasinglulu 	(unsigned char)PERM_ATTR8, (unsigned char)PERM_ATTR9, \
147*91f16700Schasinglulu 	(unsigned char)PERM_ATTR10, (unsigned char)PERM_ATTR11, \
148*91f16700Schasinglulu 	(unsigned char)PERM_ATTR12, (unsigned char)PERM_ATTR13, \
149*91f16700Schasinglulu 	(unsigned char)PERM_ATTR14, (unsigned char)PERM_ATTR15}
150*91f16700Schasinglulu 
151*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS1_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
152*91f16700Schasinglulu 		PERM_ATTR2, PERM_ATTR3) \
153*91f16700Schasinglulu 	{(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
154*91f16700Schasinglulu 	(unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3}
155*91f16700Schasinglulu 
156*91f16700Schasinglulu #define DAPC_PERI_AO_SYS1_ATTR(DEV_NAME, PERM_ATTR0, PERM_ATTR1, \
157*91f16700Schasinglulu 		PERM_ATTR2, PERM_ATTR3, PERM_ATTR4, PERM_ATTR5, \
158*91f16700Schasinglulu 		PERM_ATTR6, PERM_ATTR7) \
159*91f16700Schasinglulu 	{(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
160*91f16700Schasinglulu 	(unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \
161*91f16700Schasinglulu 	(unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \
162*91f16700Schasinglulu 	(unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7}
163*91f16700Schasinglulu 
164*91f16700Schasinglulu #define DAPC_INFRA_AO_SYS2_ATTR(...)	DAPC_INFRA_AO_SYS1_ATTR(__VA_ARGS__)
165*91f16700Schasinglulu #define DAPC_PERI_AO_SYS0_ATTR(...)	DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__)
166*91f16700Schasinglulu #define DAPC_PERI_AO_SYS2_ATTR(...)	DAPC_INFRA_AO_SYS1_ATTR(__VA_ARGS__)
167*91f16700Schasinglulu #define DAPC_PERI_AO2_SYS0_ATTR(...)	DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__)
168*91f16700Schasinglulu #define DAPC_PERI_PAR_AO_SYS0_ATTR(...)	DAPC_INFRA_AO_SYS0_ATTR(__VA_ARGS__)
169*91f16700Schasinglulu 
170*91f16700Schasinglulu /******************************************************************************
171*91f16700Schasinglulu  * UTILITY DEFINITION
172*91f16700Schasinglulu  ******************************************************************************/
173*91f16700Schasinglulu #define devapc_writel(VAL, REG)		mmio_write_32((uintptr_t)REG, VAL)
174*91f16700Schasinglulu #define devapc_readl(REG)		mmio_read_32((uintptr_t)REG)
175*91f16700Schasinglulu 
176*91f16700Schasinglulu /******************************************************************************/
177*91f16700Schasinglulu /* Device APC AO for INFRA AO */
178*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS0_D0_APC_0		(DEVAPC_INFRA_AO_BASE + 0x0000)
179*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS1_D0_APC_0		(DEVAPC_INFRA_AO_BASE + 0x1000)
180*91f16700Schasinglulu #define DEVAPC_INFRA_AO_SYS2_D0_APC_0		(DEVAPC_INFRA_AO_BASE + 0x2000)
181*91f16700Schasinglulu 
182*91f16700Schasinglulu #define DEVAPC_INFRA_AO_MAS_SEC_0		(DEVAPC_INFRA_AO_BASE + 0x0A00)
183*91f16700Schasinglulu 
184*91f16700Schasinglulu /******************************************************************************/
185*91f16700Schasinglulu /* Device APC AO for PERI AO */
186*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS0_D0_APC_0		(DEVAPC_PERI_AO_BASE + 0x0000)
187*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS1_D0_APC_0		(DEVAPC_PERI_AO_BASE + 0x1000)
188*91f16700Schasinglulu #define DEVAPC_PERI_AO_SYS2_D0_APC_0		(DEVAPC_PERI_AO_BASE + 0x2000)
189*91f16700Schasinglulu 
190*91f16700Schasinglulu #define DEVAPC_PERI_AO_MAS_SEC_0		(DEVAPC_PERI_AO_BASE + 0x0A00)
191*91f16700Schasinglulu 
192*91f16700Schasinglulu /******************************************************************************/
193*91f16700Schasinglulu /* Device APC AO for PERI AO2 */
194*91f16700Schasinglulu #define DEVAPC_PERI_AO2_SYS0_D0_APC_0		(DEVAPC_PERI_AO2_BASE + 0x0000)
195*91f16700Schasinglulu 
196*91f16700Schasinglulu /******************************************************************************/
197*91f16700Schasinglulu /* Device APC AO for PERI PAR AO */
198*91f16700Schasinglulu #define DEVAPC_PERI_PAR_AO_SYS0_D0_APC_0	(DEVAPC_PERI_PAR_AO_BASE + 0x0000)
199*91f16700Schasinglulu 
200*91f16700Schasinglulu #define DEVAPC_PERI_PAR_AO_MAS_SEC_0		(DEVAPC_PERI_PAR_AO_BASE + 0x0A00)
201*91f16700Schasinglulu 
202*91f16700Schasinglulu /******************************************************************************/
203*91f16700Schasinglulu 
204*91f16700Schasinglulu 
205*91f16700Schasinglulu /******************************************************************************
206*91f16700Schasinglulu  * Variable DEFINITION
207*91f16700Schasinglulu  ******************************************************************************/
208*91f16700Schasinglulu #define MOD_NO_IN_1_DEVAPC              16
209*91f16700Schasinglulu 
210*91f16700Schasinglulu #endif /* DEVAPC_H */
211*91f16700Schasinglulu 
212