xref: /rk3399_ARM-atf/plat/mediatek/mt8192/drivers/apusys/mtk_apusys_apc.c (revision 8d4aa7d95b53f707ce5094493f94e184094a886c)
1*f46e1f18SFlora Fu /*
2*f46e1f18SFlora Fu  * Copyright (c) 2021, MediaTek Inc. All rights reserved.
3*f46e1f18SFlora Fu  *
4*f46e1f18SFlora Fu  * SPDX-License-Identifier: BSD-3-Clause
5*f46e1f18SFlora Fu  */
6*f46e1f18SFlora Fu 
7*f46e1f18SFlora Fu #include <common/debug.h>
8*f46e1f18SFlora Fu #include <mtk_apusys_apc.h>
9*f46e1f18SFlora Fu #include <mtk_apusys_apc_def.h>
10*f46e1f18SFlora Fu #include <mtk_plat_common.h>
11*f46e1f18SFlora Fu #include <platform_def.h>
12*f46e1f18SFlora Fu 
13*f46e1f18SFlora Fu static const struct APC_DOM_16 APUSYS_NOC_DAPC_AO[] = {
14*f46e1f18SFlora Fu /* 0~3 */
15*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv07-0",
16*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
17*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
18*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
19*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
20*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv07-1",
21*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
22*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
23*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
24*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
25*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv07-2",
26*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
27*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
28*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
29*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
30*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv07-3",
31*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
32*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
33*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
34*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
35*f46e1f18SFlora Fu 
36*f46e1f18SFlora Fu /* 16~18 */
37*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv01-0",
38*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
39*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
40*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
41*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
42*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv01-1",
43*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
44*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
45*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
46*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
47*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv01-2",
48*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
49*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
50*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
51*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
52*f46e1f18SFlora Fu 
53*f46e1f18SFlora Fu /* 19~21 */
54*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv00-0",
55*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
56*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
57*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
58*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
59*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv00-1",
60*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
61*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
62*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
63*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
64*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv00-2",
65*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
66*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
67*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
68*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
69*f46e1f18SFlora Fu 
70*f46e1f18SFlora Fu /* 22~26 */
71*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv02-0",
72*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
73*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
74*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
75*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
76*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv02-1",
77*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
78*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
79*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
80*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
81*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv02-2",
82*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
83*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
84*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
85*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
86*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv02-3",
87*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
88*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
89*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
90*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
91*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("slv02-4",
92*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
93*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
94*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION,
95*f46e1f18SFlora Fu 		NO_PROTECTION, NO_PROTECTION, NO_PROTECTION, NO_PROTECTION),
96*f46e1f18SFlora Fu };
97*f46e1f18SFlora Fu 
set_slave_noc_dapc(uint32_t slave,enum APUSYS_APC_DOMAIN_ID domain_id,enum APUSYS_APC_PERM_TYPE perm)98*f46e1f18SFlora Fu static int32_t set_slave_noc_dapc(uint32_t slave,
99*f46e1f18SFlora Fu 				  enum APUSYS_APC_DOMAIN_ID domain_id,
100*f46e1f18SFlora Fu 				  enum APUSYS_APC_PERM_TYPE perm)
101*f46e1f18SFlora Fu {
102*f46e1f18SFlora Fu 	uint32_t apc_register_index;
103*f46e1f18SFlora Fu 	uint32_t apc_set_index;
104*f46e1f18SFlora Fu 	uintptr_t base;
105*f46e1f18SFlora Fu 	uint32_t clr_bit;
106*f46e1f18SFlora Fu 	uint32_t set_bit;
107*f46e1f18SFlora Fu 	int32_t ret;
108*f46e1f18SFlora Fu 
109*f46e1f18SFlora Fu 	if (perm >= PERM_NUM) {
110*f46e1f18SFlora Fu 		ERROR("[NOC_DAPC] perm type:0x%x is not supported!\n", perm);
111*f46e1f18SFlora Fu 		ret = APUSYS_APC_ERR_PERMISSION_NOT_SUPPORTED;
112*f46e1f18SFlora Fu 		goto exit;
113*f46e1f18SFlora Fu 	}
114*f46e1f18SFlora Fu 
115*f46e1f18SFlora Fu 	apc_register_index = slave / APUSYS_NOC_DAPC_AO_SLAVE_NUM_IN_1_DOM;
116*f46e1f18SFlora Fu 	apc_set_index = slave % APUSYS_NOC_DAPC_AO_SLAVE_NUM_IN_1_DOM;
117*f46e1f18SFlora Fu 
118*f46e1f18SFlora Fu 	clr_bit = 0xFFFFFFFF ^ (0x3U << (apc_set_index * 2));
119*f46e1f18SFlora Fu 	set_bit = perm << (apc_set_index * 2);
120*f46e1f18SFlora Fu 
121*f46e1f18SFlora Fu 	if ((slave < APUSYS_NOC_DAPC_AO_SLAVE_NUM) &&
122*f46e1f18SFlora Fu 	    (domain_id < APUSYS_NOC_DAPC_AO_DOM_NUM)) {
123*f46e1f18SFlora Fu 		base = APUSYS_NOC_DAPC_AO_BASE +
124*f46e1f18SFlora Fu 		       (domain_id * 0x40) + (apc_register_index * 4);
125*f46e1f18SFlora Fu 		apuapc_writel(apuapc_readl(base) & clr_bit, base);
126*f46e1f18SFlora Fu 		apuapc_writel(apuapc_readl(base) | set_bit, base);
127*f46e1f18SFlora Fu 		ret = APUSYS_APC_OK;
128*f46e1f18SFlora Fu 	} else {
129*f46e1f18SFlora Fu 		ERROR("[NOC_DAPC] %s: %s, %s:0x%x, %s:0x%x\n",
130*f46e1f18SFlora Fu 		      __func__, "out of boundary",
131*f46e1f18SFlora Fu 		      "slave", slave,
132*f46e1f18SFlora Fu 		      "domain_id", domain_id);
133*f46e1f18SFlora Fu 		ret = APUSYS_APC_ERR_OUT_OF_BOUNDARY;
134*f46e1f18SFlora Fu 	}
135*f46e1f18SFlora Fu 
136*f46e1f18SFlora Fu exit:
137*f46e1f18SFlora Fu 	return ret;
138*f46e1f18SFlora Fu }
139*f46e1f18SFlora Fu 
dump_apusys_noc_dapc(void)140*f46e1f18SFlora Fu static void dump_apusys_noc_dapc(void)
141*f46e1f18SFlora Fu {
142*f46e1f18SFlora Fu 	uint32_t reg_num;
143*f46e1f18SFlora Fu 	uint32_t d, i;
144*f46e1f18SFlora Fu 
145*f46e1f18SFlora Fu 	reg_num = APUSYS_NOC_DAPC_AO_SLAVE_NUM /
146*f46e1f18SFlora Fu 		  APUSYS_NOC_DAPC_AO_SLAVE_NUM_IN_1_DOM;
147*f46e1f18SFlora Fu 	for (d = 0U; d < APUSYS_NOC_DAPC_AO_DOM_NUM; d++) {
148*f46e1f18SFlora Fu 		for (i = 0U; i <= reg_num; i++) {
149*f46e1f18SFlora Fu 			INFO("[NOCDAPC] D%d_APC_%d: 0x%x\n", d, i,
150*f46e1f18SFlora Fu 			     apuapc_readl(APUSYS_NOC_DAPC_AO_BASE +
151*f46e1f18SFlora Fu 			     (d * 0x40) + (i * 4)));
152*f46e1f18SFlora Fu 		}
153*f46e1f18SFlora Fu 	}
154*f46e1f18SFlora Fu 
155*f46e1f18SFlora Fu 	INFO("[NOCDAPC] APC_CON: 0x%x\n", apuapc_readl(APUSYS_NOC_DAPC_CON));
156*f46e1f18SFlora Fu }
157*f46e1f18SFlora Fu 
158*f46e1f18SFlora Fu static const struct APC_DOM_16 APUSYS_AO_Devices[] = {
159*f46e1f18SFlora Fu 
160*f46e1f18SFlora Fu /* 0 */
161*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-0",
162*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
163*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
164*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
165*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
166*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-1",
167*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
168*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
169*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
170*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
171*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-2",
172*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
173*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
174*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
175*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
176*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-3",
177*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
178*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
179*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
180*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
181*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-4",
182*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
183*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
184*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
185*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
186*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apusys_ao-5",
187*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
188*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
189*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
190*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
191*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("md32_apb_s-0",
192*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
193*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
194*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
195*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
196*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("md32_apb_s-1",
197*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
198*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
199*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
200*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
201*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("md32_apb_s-2",
202*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
203*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
204*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
205*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
206*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("md32_debug_apb",
207*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
208*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
209*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
210*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
211*f46e1f18SFlora Fu 
212*f46e1f18SFlora Fu /* 10 */
213*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_conn_config",
214*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
215*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
216*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
217*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
218*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_sctrl_reviser",
219*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
220*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
221*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
222*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
223*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_sema_stimer",
224*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
225*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
226*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
227*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
228*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_emi_config",
229*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
230*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
231*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
232*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
233*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_adl",
234*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
235*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
236*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
237*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
238*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_edma_lite0",
239*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
240*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
241*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
242*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
243*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_edma_lite1",
244*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
245*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
246*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
247*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
248*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_edma0",
249*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
250*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
251*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
252*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
253*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_edma0",
254*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
255*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
256*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
257*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
258*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_dapc_ao",
259*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
260*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
261*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
262*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
263*f46e1f18SFlora Fu 
264*f46e1f18SFlora Fu /* 20 */
265*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_dapc",
266*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
267*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
268*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
269*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
270*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("infra_bcrm",
271*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
272*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
273*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
274*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
275*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apb_dbg_ctl",
276*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
277*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
278*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
279*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
280*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("noc_dapc",
281*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
282*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
283*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
284*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
285*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_noc_bcrm",
286*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
287*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
288*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
289*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
290*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_noc_config",
291*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
292*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
293*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
294*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
295*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vpu_core0_config-0",
296*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
297*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
298*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
299*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
300*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vpu_core0_config-1",
301*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
302*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
303*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
304*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
305*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vpu_core1_config-0",
306*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
307*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
308*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
309*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
310*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vpu_core1_config-1",
311*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
312*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
313*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
314*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
315*f46e1f18SFlora Fu 
316*f46e1f18SFlora Fu /* 30 */
317*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("mdla0_apb-0",
318*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
319*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
320*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
321*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
322*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("mdla0_apb-1",
323*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
324*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
325*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
326*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
327*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("mdla0_apb-2",
328*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
329*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
330*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
331*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
332*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("mdla0_apb-3",
333*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
334*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
335*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
336*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
337*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_iommu0_r0",
338*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
339*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
340*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
341*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
342*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_iommu0_r1",
343*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
344*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
345*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
346*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
347*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_iommu0_r2",
348*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
349*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
350*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
351*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
352*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_iommu0_r3",
353*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
354*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
355*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
356*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
357*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_iommu0_r4",
358*f46e1f18SFlora Fu 		SEC_RW_ONLY,   FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
359*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
360*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
361*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
362*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_rsi2_config",
363*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
364*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
365*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
366*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
367*f46e1f18SFlora Fu 
368*f46e1f18SFlora Fu /* 40 */
369*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("apu_ssc2_config",
370*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
371*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
372*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
373*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
374*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vp6_core0_debug_apb",
375*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
376*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
377*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
378*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
379*f46e1f18SFlora Fu APUSYS_APC_AO_ATTR("vp6_core1_debug_apb",
380*f46e1f18SFlora Fu 		NO_PROTECTION, FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
381*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
382*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN,
383*f46e1f18SFlora Fu 		FORBIDDEN,     FORBIDDEN,     FORBIDDEN,     FORBIDDEN),
384*f46e1f18SFlora Fu };
385*f46e1f18SFlora Fu 
set_slave_apc(uint32_t slave,enum APUSYS_APC_DOMAIN_ID domain_id,enum APUSYS_APC_PERM_TYPE perm)386*f46e1f18SFlora Fu static int32_t set_slave_apc(uint32_t slave,
387*f46e1f18SFlora Fu 			     enum APUSYS_APC_DOMAIN_ID domain_id,
388*f46e1f18SFlora Fu 			     enum APUSYS_APC_PERM_TYPE perm)
389*f46e1f18SFlora Fu {
390*f46e1f18SFlora Fu 	uint32_t apc_register_index;
391*f46e1f18SFlora Fu 	uint32_t apc_set_index;
392*f46e1f18SFlora Fu 	uintptr_t base;
393*f46e1f18SFlora Fu 	uint32_t clr_bit;
394*f46e1f18SFlora Fu 	uint32_t set_bit;
395*f46e1f18SFlora Fu 	int32_t ret;
396*f46e1f18SFlora Fu 
397*f46e1f18SFlora Fu 	if (perm >= PERM_NUM) {
398*f46e1f18SFlora Fu 		ERROR("[APUAPC] perm type:0x%x is not supported!\n", perm);
399*f46e1f18SFlora Fu 		ret = APUSYS_APC_ERR_PERMISSION_NOT_SUPPORTED;
400*f46e1f18SFlora Fu 		goto exit;
401*f46e1f18SFlora Fu 	}
402*f46e1f18SFlora Fu 
403*f46e1f18SFlora Fu 	apc_register_index = slave / APUSYS_APC_SYS0_AO_SLAVE_NUM_IN_1_DOM;
404*f46e1f18SFlora Fu 	apc_set_index = slave % APUSYS_APC_SYS0_AO_SLAVE_NUM_IN_1_DOM;
405*f46e1f18SFlora Fu 
406*f46e1f18SFlora Fu 	clr_bit = 0xFFFFFFFF ^ (0x3U << (apc_set_index * 2));
407*f46e1f18SFlora Fu 	set_bit = perm << (apc_set_index * 2);
408*f46e1f18SFlora Fu 
409*f46e1f18SFlora Fu 	if ((slave < APUSYS_APC_SYS0_AO_SLAVE_NUM) &&
410*f46e1f18SFlora Fu 	    (domain_id < APUSYS_APC_SYS0_AO_DOM_NUM)) {
411*f46e1f18SFlora Fu 		base = APUSYS_APC_AO_BASE +
412*f46e1f18SFlora Fu 		       (domain_id * 0x40) + (apc_register_index * 4);
413*f46e1f18SFlora Fu 		apuapc_writel(apuapc_readl(base) & clr_bit, base);
414*f46e1f18SFlora Fu 		apuapc_writel(apuapc_readl(base) | set_bit, base);
415*f46e1f18SFlora Fu 		ret = APUSYS_APC_OK;
416*f46e1f18SFlora Fu 	} else {
417*f46e1f18SFlora Fu 		ERROR("[APUAPC] %s: %s, %s:0x%x, %s:0x%x\n",
418*f46e1f18SFlora Fu 		      __func__, "out of boundary",
419*f46e1f18SFlora Fu 		      "slave", slave,
420*f46e1f18SFlora Fu 		      "domain_id", domain_id);
421*f46e1f18SFlora Fu 		ret = APUSYS_APC_ERR_OUT_OF_BOUNDARY;
422*f46e1f18SFlora Fu 	}
423*f46e1f18SFlora Fu 
424*f46e1f18SFlora Fu exit:
425*f46e1f18SFlora Fu 	return ret;
426*f46e1f18SFlora Fu }
427*f46e1f18SFlora Fu 
dump_apusys_ao_apc(void)428*f46e1f18SFlora Fu static void dump_apusys_ao_apc(void)
429*f46e1f18SFlora Fu {
430*f46e1f18SFlora Fu 	uint32_t reg_num;
431*f46e1f18SFlora Fu 	uint32_t d, i;
432*f46e1f18SFlora Fu 
433*f46e1f18SFlora Fu 	reg_num = APUSYS_APC_SYS0_AO_SLAVE_NUM /
434*f46e1f18SFlora Fu 		  APUSYS_APC_SYS0_AO_SLAVE_NUM_IN_1_DOM;
435*f46e1f18SFlora Fu 	for (d = 0U; d < APUSYS_APC_SYS0_AO_DOM_NUM; d++) {
436*f46e1f18SFlora Fu 		for (i = 0U; i <= reg_num; i++) {
437*f46e1f18SFlora Fu 			INFO("[APUAPC] D%d_APC_%d: 0x%x\n", d, i,
438*f46e1f18SFlora Fu 			     apuapc_readl(APUSYS_APC_AO_BASE +
439*f46e1f18SFlora Fu 			     (d * 0x40) + (i * 4)));
440*f46e1f18SFlora Fu 		}
441*f46e1f18SFlora Fu 	}
442*f46e1f18SFlora Fu 	INFO("[APUAPC] APC_CON: 0x%x\n", apuapc_readl(APUSYS_APC_CON));
443*f46e1f18SFlora Fu }
444*f46e1f18SFlora Fu 
set_apusys_noc_dapc(void)445*f46e1f18SFlora Fu static int32_t set_apusys_noc_dapc(void)
446*f46e1f18SFlora Fu {
447*f46e1f18SFlora Fu 	int32_t ret = 0;
448*f46e1f18SFlora Fu 	uint32_t i;
449*f46e1f18SFlora Fu 	uint32_t index;
450*f46e1f18SFlora Fu 
451*f46e1f18SFlora Fu 	for (i = 0U; i < ARRAY_SIZE(APUSYS_NOC_DAPC_AO); i++) {
452*f46e1f18SFlora Fu 		if (i < APUSYS_NOC_DAPC_GAP_BOUNDARY) {
453*f46e1f18SFlora Fu 			index = i;
454*f46e1f18SFlora Fu 		} else {
455*f46e1f18SFlora Fu 			index = i + APUSYS_NOC_DAPC_JUMP_GAP;
456*f46e1f18SFlora Fu 		}
457*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_0,
458*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d0_permission);
459*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_1,
460*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d1_permission);
461*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_2,
462*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d2_permission);
463*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_3,
464*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d3_permission);
465*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_4,
466*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d4_permission);
467*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_5,
468*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d5_permission);
469*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_6,
470*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d6_permission);
471*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_7,
472*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d7_permission);
473*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_8,
474*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d8_permission);
475*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_9,
476*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d9_permission);
477*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_10,
478*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d10_permission);
479*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_11,
480*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d11_permission);
481*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_12,
482*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d12_permission);
483*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_13,
484*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d13_permission);
485*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_14,
486*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d14_permission);
487*f46e1f18SFlora Fu 		ret += set_slave_noc_dapc(index, DOMAIN_15,
488*f46e1f18SFlora Fu 				APUSYS_NOC_DAPC_AO[i].d15_permission);
489*f46e1f18SFlora Fu 	}
490*f46e1f18SFlora Fu 
491*f46e1f18SFlora Fu 	return ret;
492*f46e1f18SFlora Fu }
493*f46e1f18SFlora Fu 
set_apusys_ao_apc(void)494*f46e1f18SFlora Fu static int32_t set_apusys_ao_apc(void)
495*f46e1f18SFlora Fu {
496*f46e1f18SFlora Fu 	int32_t ret = 0;
497*f46e1f18SFlora Fu 	uint32_t i;
498*f46e1f18SFlora Fu 
499*f46e1f18SFlora Fu 	for (i = 0U; i < ARRAY_SIZE(APUSYS_AO_Devices); i++) {
500*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_0,
501*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d0_permission);
502*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_1,
503*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d1_permission);
504*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_2,
505*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d2_permission);
506*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_3,
507*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d3_permission);
508*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_4,
509*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d4_permission);
510*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_5,
511*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d5_permission);
512*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_6,
513*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d6_permission);
514*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_7,
515*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d7_permission);
516*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_8,
517*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d8_permission);
518*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_9,
519*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d9_permission);
520*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_10,
521*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d10_permission);
522*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_11,
523*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d11_permission);
524*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_12,
525*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d12_permission);
526*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_13,
527*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d13_permission);
528*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_14,
529*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d14_permission);
530*f46e1f18SFlora Fu 		ret += set_slave_apc(i, DOMAIN_15,
531*f46e1f18SFlora Fu 				APUSYS_AO_Devices[i].d15_permission);
532*f46e1f18SFlora Fu 	}
533*f46e1f18SFlora Fu 
534*f46e1f18SFlora Fu 	return ret;
535*f46e1f18SFlora Fu }
536*f46e1f18SFlora Fu 
set_apusys_apc_lock(void)537*f46e1f18SFlora Fu static void set_apusys_apc_lock(void)
538*f46e1f18SFlora Fu {
539*f46e1f18SFlora Fu 	uint32_t set_bit = 1U << APUSYS_APC_SYS0_LOCK_BIT_APU_SCTRL_REVISER;
540*f46e1f18SFlora Fu 
541*f46e1f18SFlora Fu 	/* Lock apu_sctrl_reviser */
542*f46e1f18SFlora Fu 	set_bit = set_bit | (1U << APUSYS_APC_SYS0_LOCK_BIT_APUSYS_AO_5);
543*f46e1f18SFlora Fu 	apuapc_writel(set_bit, APUSYS_SYS0_APC_LOCK_0);
544*f46e1f18SFlora Fu }
545*f46e1f18SFlora Fu 
set_apusys_apc(void)546*f46e1f18SFlora Fu void set_apusys_apc(void)
547*f46e1f18SFlora Fu {
548*f46e1f18SFlora Fu 	int32_t ret = 0;
549*f46e1f18SFlora Fu 
550*f46e1f18SFlora Fu 	/* Check violation status */
551*f46e1f18SFlora Fu 	INFO("[APUAPC] vio %d\n", apuapc_readl(APUSYS_APC_CON) & 0x80000000);
552*f46e1f18SFlora Fu 
553*f46e1f18SFlora Fu 	/* Initial Permission */
554*f46e1f18SFlora Fu 	ret = set_apusys_ao_apc();
555*f46e1f18SFlora Fu 	INFO("[APUAPC] %s - %s!\n", "set_apusys_ao_apc",
556*f46e1f18SFlora Fu 	     ret ? "FAILED" : "SUCCESS");
557*f46e1f18SFlora Fu 
558*f46e1f18SFlora Fu 	/* Lock */
559*f46e1f18SFlora Fu 	set_apusys_apc_lock();
560*f46e1f18SFlora Fu 
561*f46e1f18SFlora Fu 	/* Initial NoC Permission */
562*f46e1f18SFlora Fu 	ret = set_apusys_noc_dapc();
563*f46e1f18SFlora Fu 	INFO("[APUAPC] %s - %s!\n", "set_apusys_noc_dapc",
564*f46e1f18SFlora Fu 	     ret ? "FAILED" : "SUCCESS");
565*f46e1f18SFlora Fu 
566*f46e1f18SFlora Fu 	/* Dump Permission */
567*f46e1f18SFlora Fu 	dump_apusys_ao_apc();
568*f46e1f18SFlora Fu 	dump_apusys_noc_dapc();
569*f46e1f18SFlora Fu 
570*f46e1f18SFlora Fu 	INFO("[APUAPC] %s done\n", __func__);
571*f46e1f18SFlora Fu }
572