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