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