blob: ae1a46d1331dcbb511a484d349fc79f74c7c2312 [file] [log] [blame]
Ye Li62185922022-07-26 16:40:54 +08001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2022 NXP
4 */
5
Ye Li62185922022-07-26 16:40:54 +08006#include <log.h>
Peng Fan5dce3492024-09-19 12:01:35 +08007#include <div64.h>
8#include <hang.h>
Tom Rinidec7ea02024-05-20 13:35:03 -06009#include <linux/errno.h>
Ye Li62185922022-07-26 16:40:54 +080010#include <asm/io.h>
11#include <asm/types.h>
12#include <asm/arch/imx-regs.h>
13#include <asm/arch/sys_proto.h>
Peng Fand5c31832023-06-15 18:09:05 +080014#include <asm/mach-imx/ele_api.h>
Ye Li62185922022-07-26 16:40:54 +080015#include <asm/mach-imx/mu_hal.h>
16
17#define DID_NUM 16
18#define MBC_MAX_NUM 4
19#define MRC_MAX_NUM 2
20#define MBC_NUM(HWCFG) (((HWCFG) >> 16) & 0xF)
21#define MRC_NUM(HWCFG) (((HWCFG) >> 24) & 0x1F)
22
Peng Fan5dce3492024-09-19 12:01:35 +080023enum {
24 /* Order following ELE API Spec, not change */
25 TRDC_A,
26 TRDC_W,
27 TRDC_M,
28 TRDC_N,
29};
30
31/* Just make it easier to know what the parameter is */
32#define MBC(X) (X)
33#define MRC(X) (X)
34#define GLOBAL_ID(X) (X)
35#define MEM(X) (X)
36#define DOM(X) (X)
37/*
38 *0|SPR|SPW|SPX,0|SUR|SUW|SWX, 0|NPR|NPW|NPX, 0|NUR|NUW|NUX
39 */
40#define PERM(X) (X)
41
Ye Li62185922022-07-26 16:40:54 +080042struct mbc_mem_dom {
43 u32 mem_glbcfg[4];
44 u32 nse_blk_index;
45 u32 nse_blk_set;
46 u32 nse_blk_clr;
47 u32 nsr_blk_clr_all;
48 u32 memn_glbac[8];
49 /* The upper only existed in the beginning of each MBC */
50 u32 mem0_blk_cfg_w[64];
51 u32 mem0_blk_nse_w[16];
52 u32 mem1_blk_cfg_w[8];
53 u32 mem1_blk_nse_w[2];
54 u32 mem2_blk_cfg_w[8];
55 u32 mem2_blk_nse_w[2];
56 u32 mem3_blk_cfg_w[8];
57 u32 mem3_blk_nse_w[2];/*0x1F0, 0x1F4 */
58 u32 reserved[2];
59};
60
61struct mrc_rgn_dom {
62 u32 mrc_glbcfg[4];
63 u32 nse_rgn_indirect;
64 u32 nse_rgn_set;
65 u32 nse_rgn_clr;
66 u32 nse_rgn_clr_all;
67 u32 memn_glbac[8];
68 /* The upper only existed in the beginning of each MRC */
69 u32 rgn_desc_words[16][2]; /* 16 regions at max, 2 words per region */
70 u32 rgn_nse;
71 u32 reserved2[15];
72};
73
74struct mda_inst {
75 u32 mda_w[8];
76};
77
78struct trdc_mgr {
79 u32 trdc_cr;
80 u32 res0[59];
81 u32 trdc_hwcfg0;
82 u32 trdc_hwcfg1;
83 u32 res1[450];
84 struct mda_inst mda[8];
85 u32 res2[15808];
86};
87
88struct trdc_mbc {
89 struct mbc_mem_dom mem_dom[DID_NUM];
90};
91
92struct trdc_mrc {
93 struct mrc_rgn_dom mrc_dom[DID_NUM];
94};
95
96int trdc_mda_set_cpu(ulong trdc_reg, u32 mda_inst, u32 mda_reg, u8 sa, u8 dids,
97 u8 did, u8 pe, u8 pidm, u8 pid)
98{
99 struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
100 u32 *mda_w = &trdc_base->mda[mda_inst].mda_w[mda_reg];
101 u32 val = readl(mda_w);
102
103 if (val & BIT(29)) /* non-cpu */
104 return -EINVAL;
105
106 val = BIT(31) | ((pid & 0x3f) << 16) | ((pidm & 0x3f) << 8) |
107 ((pe & 0x3) << 6) | ((sa & 0x3) << 14) | ((dids & 0x3) << 4) |
108 (did & 0xf);
109
110 writel(val, mda_w);
111
112 return 0;
113}
114
115int trdc_mda_set_noncpu(ulong trdc_reg, u32 mda_inst, u32 mda_reg,
116 bool did_bypass, u8 sa, u8 pa, u8 did)
117{
118 struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
119 u32 *mda_w = &trdc_base->mda[mda_inst].mda_w[mda_reg];
120 u32 val = readl(mda_w);
121
122 if (!(val & BIT(29))) /* cpu */
123 return -EINVAL;
124
125 val = BIT(31) | ((sa & 0x3) << 6) | ((pa & 0x3) << 4) | (did & 0xf);
126 if (did_bypass)
127 val |= BIT(8);
128
129 writel(val, mda_w);
130
131 return 0;
132}
133
134static ulong trdc_get_mbc_base(ulong trdc_reg, u32 mbc_x)
135{
136 struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
137 u32 mbc_num = MBC_NUM(trdc_base->trdc_hwcfg0);
138
139 if (mbc_x >= mbc_num)
140 return 0;
141
142 return trdc_reg + 0x10000 + 0x2000 * mbc_x;
143}
144
145static ulong trdc_get_mrc_base(ulong trdc_reg, u32 mrc_x)
146{
147 struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
148 u32 mbc_num = MBC_NUM(trdc_base->trdc_hwcfg0);
149 u32 mrc_num = MRC_NUM(trdc_base->trdc_hwcfg0);
150
151 if (mrc_x >= mrc_num)
152 return 0;
153
154 return trdc_reg + 0x10000 + 0x2000 * mbc_num + 0x1000 * mrc_x;
155}
156
157int trdc_mbc_set_control(ulong trdc_reg, u32 mbc_x, u32 glbac_id, u32 glbac_val)
158{
159 struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
160 struct mbc_mem_dom *mbc_dom;
161
162 if (mbc_base == 0 || glbac_id >= 8)
163 return -EINVAL;
164
165 /* only first dom has the glbac */
166 mbc_dom = &mbc_base->mem_dom[0];
167
168 debug("mbc 0x%lx\n", (ulong)mbc_dom);
169
170 writel(glbac_val, &mbc_dom->memn_glbac[glbac_id]);
171
172 return 0;
173}
174
175int trdc_mbc_blk_config(ulong trdc_reg, u32 mbc_x, u32 dom_x, u32 mem_x,
176 u32 blk_x, bool sec_access, u32 glbac_id)
177{
178 struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
179 struct mbc_mem_dom *mbc_dom;
180 u32 *cfg_w, *nse_w;
181 u32 index, offset, val;
182
183 if (mbc_base == 0 || glbac_id >= 8)
184 return -EINVAL;
185
186 mbc_dom = &mbc_base->mem_dom[dom_x];
187
188 debug("mbc 0x%lx\n", (ulong)mbc_dom);
189
190 switch (mem_x) {
191 case 0:
192 cfg_w = &mbc_dom->mem0_blk_cfg_w[blk_x / 8];
193 nse_w = &mbc_dom->mem0_blk_nse_w[blk_x / 32];
194 break;
195 case 1:
196 cfg_w = &mbc_dom->mem1_blk_cfg_w[blk_x / 8];
197 nse_w = &mbc_dom->mem1_blk_nse_w[blk_x / 32];
198 break;
199 case 2:
200 cfg_w = &mbc_dom->mem2_blk_cfg_w[blk_x / 8];
201 nse_w = &mbc_dom->mem2_blk_nse_w[blk_x / 32];
202 break;
203 case 3:
204 cfg_w = &mbc_dom->mem3_blk_cfg_w[blk_x / 8];
205 nse_w = &mbc_dom->mem3_blk_nse_w[blk_x / 32];
206 break;
207 default:
208 return -EINVAL;
209 };
210
211 index = blk_x % 8;
212 offset = index * 4;
213
214 val = readl((void __iomem *)cfg_w);
215
216 val &= ~(0xFU << offset);
217
218 /* MBC0-3
Peng Fand5c31832023-06-15 18:09:05 +0800219 * Global 0, 0x7777 secure pri/user read/write/execute, ELE has already set it.
Ye Li62185922022-07-26 16:40:54 +0800220 * So select MBC0_MEMN_GLBAC0
221 */
222 if (sec_access) {
223 val |= ((0x0 | (glbac_id & 0x7)) << offset);
224 writel(val, (void __iomem *)cfg_w);
225 } else {
226 val |= ((0x8 | (glbac_id & 0x7)) << offset); /* nse bit set */
227 writel(val, (void __iomem *)cfg_w);
228 }
229
230 return 0;
231}
232
233int trdc_mrc_set_control(ulong trdc_reg, u32 mrc_x, u32 glbac_id, u32 glbac_val)
234{
235 struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
236 struct mrc_rgn_dom *mrc_dom;
237
238 if (mrc_base == 0 || glbac_id >= 8)
239 return -EINVAL;
240
241 /* only first dom has the glbac */
242 mrc_dom = &mrc_base->mrc_dom[0];
243
244 debug("mrc_dom 0x%lx\n", (ulong)mrc_dom);
245
246 writel(glbac_val, &mrc_dom->memn_glbac[glbac_id]);
247
248 return 0;
249}
250
251int trdc_mrc_region_config(ulong trdc_reg, u32 mrc_x, u32 dom_x, u32 addr_start,
252 u32 addr_end, bool sec_access, u32 glbac_id)
253{
254 struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
255 struct mrc_rgn_dom *mrc_dom;
256 u32 *desc_w;
257 u32 start, end;
258 u32 i, free = 8;
259 bool vld, hit = false;
260
261 if (mrc_base == 0 || glbac_id >= 8)
262 return -EINVAL;
263
264 mrc_dom = &mrc_base->mrc_dom[dom_x];
265
266 addr_start &= ~0x3fff;
267 addr_end &= ~0x3fff;
268
269 debug("mrc_dom 0x%lx\n", (ulong)mrc_dom);
270
271 for (i = 0; i < 8; i++) {
272 desc_w = &mrc_dom->rgn_desc_words[i][0];
273
274 debug("desc_w 0x%lx\n", (ulong)desc_w);
275
276 start = readl((void __iomem *)desc_w) & (~0x3fff);
277 end = readl((void __iomem *)(desc_w + 1));
278 vld = end & 0x1;
279 end = end & (~0x3fff);
280
281 if (start == 0 && end == 0 && !vld && free >= 8)
282 free = i;
283
284 /* Check all the region descriptors, even overlap */
285 if (addr_start >= end || addr_end <= start || !vld)
286 continue;
287
288 /* MRC0,1
Peng Fand5c31832023-06-15 18:09:05 +0800289 * Global 0, 0x7777 secure pri/user read/write/execute, ELE has already set it.
Ye Li62185922022-07-26 16:40:54 +0800290 * So select MRCx_MEMN_GLBAC0
291 */
292 if (sec_access) {
293 writel(start | (glbac_id & 0x7), (void __iomem *)desc_w);
294 writel(end | 0x1, (void __iomem *)(desc_w + 1));
295 } else {
296 writel(start | (glbac_id & 0x7), (void __iomem *)desc_w);
297 writel(end | 0x1 | 0x10, (void __iomem *)(desc_w + 1));
298 }
299
300 if (addr_start >= start && addr_end <= end)
301 hit = true;
302 }
303
304 if (!hit) {
305 if (free >= 8)
306 return -EFAULT;
307
308 desc_w = &mrc_dom->rgn_desc_words[free][0];
309
310 debug("free desc_w 0x%lx\n", (ulong)desc_w);
311 debug("[0x%x] [0x%x]\n", addr_start | (glbac_id & 0x7), addr_end | 0x1);
312
313 if (sec_access) {
314 writel(addr_start | (glbac_id & 0x7), (void __iomem *)desc_w);
315 writel(addr_end | 0x1, (void __iomem *)(desc_w + 1));
316 } else {
317 writel(addr_start | (glbac_id & 0x7), (void __iomem *)desc_w);
318 writel((addr_end | 0x1 | 0x10), (void __iomem *)(desc_w + 1));
319 }
320 }
321
322 return 0;
323}
324
325bool trdc_mrc_enabled(ulong trdc_base)
326{
327 return (!!(readl((void __iomem *)trdc_base) & 0x8000));
328}
329
330bool trdc_mbc_enabled(ulong trdc_base)
331{
332 return (!!(readl((void __iomem *)trdc_base) & 0x4000));
333}
334
335int release_rdc(u8 xrdc)
336{
337 ulong s_mu_base = 0x47520000UL;
Peng Fand5c31832023-06-15 18:09:05 +0800338 struct ele_msg msg;
Ye Li62185922022-07-26 16:40:54 +0800339 int ret;
340 u32 rdc_id;
341
342 switch (xrdc) {
343 case 0:
344 rdc_id = 0x74;
345 break;
346 case 1:
347 rdc_id = 0x78;
348 break;
349 case 2:
350 rdc_id = 0x82;
351 break;
352 case 3:
353 rdc_id = 0x86;
354 break;
355 default:
356 return -EINVAL;
357 }
358
Peng Fand5c31832023-06-15 18:09:05 +0800359 msg.version = ELE_VERSION;
360 msg.tag = ELE_CMD_TAG;
Ye Li62185922022-07-26 16:40:54 +0800361 msg.size = 2;
Ye Liebb2be52023-01-30 18:39:53 +0800362 msg.command = ELE_RELEASE_RDC_REQ;
Ye Li62185922022-07-26 16:40:54 +0800363 msg.data[0] = (rdc_id << 8) | 0x2; /* A55 */
364
365 mu_hal_init(s_mu_base);
366 mu_hal_sendmsg(s_mu_base, 0, *((u32 *)&msg));
367 mu_hal_sendmsg(s_mu_base, 1, msg.data[0]);
368
369 ret = mu_hal_receivemsg(s_mu_base, 0, (u32 *)&msg);
370 if (!ret) {
371 ret = mu_hal_receivemsg(s_mu_base, 1, &msg.data[0]);
372 if (!ret) {
373 if ((msg.data[0] & 0xff) == 0xd6)
374 return 0;
375 }
376
377 return -EIO;
378 }
379
380 return ret;
381}
382
383void trdc_early_init(void)
384{
385 int ret = 0, i;
386
Peng Fan5dce3492024-09-19 12:01:35 +0800387 ret |= release_rdc(TRDC_A);
388 ret |= release_rdc(TRDC_M);
389 ret |= release_rdc(TRDC_W);
390 ret |= release_rdc(TRDC_N);
Ye Li62185922022-07-26 16:40:54 +0800391
Peng Fan5dce3492024-09-19 12:01:35 +0800392 if (ret) {
393 hang();
394 return;
395 }
396
397 /* Set OCRAM to RWX for secure, when OEM_CLOSE, the image is RX only */
398 trdc_mbc_set_control(TRDC_NIC_BASE, MBC(3), GLOBAL_ID(0), PERM(0x7700));
Ye Li62185922022-07-26 16:40:54 +0800399
Peng Fan5dce3492024-09-19 12:01:35 +0800400 for (i = 0; i < 40; i++) {
401 trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(0), i,
402 true, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800403
Peng Fan5dce3492024-09-19 12:01:35 +0800404 trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(1), i,
405 true, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800406
Peng Fan5dce3492024-09-19 12:01:35 +0800407 trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(0), MEM(0), i,
408 true, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800409
Peng Fan5dce3492024-09-19 12:01:35 +0800410 trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(0), MEM(1), i,
411 true, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800412 }
413}
414
415void trdc_init(void)
416{
417 /* TRDC mega */
Peng Fan5dce3492024-09-19 12:01:35 +0800418 if (trdc_mrc_enabled(TRDC_NIC_BASE)) {
Ye Li62185922022-07-26 16:40:54 +0800419 /* DDR */
Peng Fan5dce3492024-09-19 12:01:35 +0800420 trdc_mrc_set_control(TRDC_NIC_BASE, MRC(0), GLOBAL_ID(0), PERM(0x7777));
Ye Li62185922022-07-26 16:40:54 +0800421
Peng Fand5c31832023-06-15 18:09:05 +0800422 /* ELE */
Peng Fan5dce3492024-09-19 12:01:35 +0800423 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(0), 0x80000000,
424 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800425
426 /* MTR */
Peng Fan5dce3492024-09-19 12:01:35 +0800427 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(1), 0x80000000,
428 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800429
430 /* M33 */
Peng Fan5dce3492024-09-19 12:01:35 +0800431 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(2), 0x80000000,
432 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800433
434 /* A55*/
Peng Fan5dce3492024-09-19 12:01:35 +0800435 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(3), 0x80000000,
436 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800437
438 /* For USDHC1 to DDR, USDHC1 is default force to non-secure */
Peng Fan5dce3492024-09-19 12:01:35 +0800439 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(5), 0x80000000,
440 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800441
442 /* For USDHC2 to DDR, USDHC2 is default force to non-secure */
Peng Fan5dce3492024-09-19 12:01:35 +0800443 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(6), 0x80000000,
444 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800445
446 /* eDMA */
Peng Fan5dce3492024-09-19 12:01:35 +0800447 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(7), 0x80000000,
448 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800449
450 /*CoreSight, TestPort*/
Peng Fan5dce3492024-09-19 12:01:35 +0800451 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(8), 0x80000000,
452 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800453
454 /* DAP */
Peng Fan5dce3492024-09-19 12:01:35 +0800455 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(9), 0x80000000,
456 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800457
458 /*SoC masters */
Peng Fan5dce3492024-09-19 12:01:35 +0800459 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(10), 0x80000000,
460 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800461
462 /*USB*/
Peng Fan5dce3492024-09-19 12:01:35 +0800463 trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(11), 0x80000000,
464 0xFFFFFFFF, false, GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800465 }
466}
467
468#if DEBUG
469int trdc_mbc_control_dump(ulong trdc_reg, u32 mbc_x, u32 glbac_id)
470{
471 struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
472 struct mbc_mem_dom *mbc_dom;
473
474 if (mbc_base == 0 || glbac_id >= 8)
475 return -EINVAL;
476
477 /* only first dom has the glbac */
478 mbc_dom = &mbc_base->mem_dom[0];
479
480 printf("mbc_dom %u glbac %u: 0x%x\n",
481 mbc_x, glbac_id, readl(&mbc_dom->memn_glbac[glbac_id]));
482
483 return 0;
484}
485
486int trdc_mbc_mem_dump(ulong trdc_reg, u32 mbc_x, u32 dom_x, u32 mem_x, u32 word)
487{
488 struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
489 struct mbc_mem_dom *mbc_dom;
490 u32 *cfg_w;
491
492 if (mbc_base == 0)
493 return -EINVAL;
494
495 mbc_dom = &mbc_base->mem_dom[dom_x];
496
497 switch (mem_x) {
498 case 0:
499 cfg_w = &mbc_dom->mem0_blk_cfg_w[word];
500 break;
501 case 1:
502 cfg_w = &mbc_dom->mem1_blk_cfg_w[word];
503 break;
504 case 2:
505 cfg_w = &mbc_dom->mem2_blk_cfg_w[word];
506 break;
507 case 3:
508 cfg_w = &mbc_dom->mem3_blk_cfg_w[word];
509 break;
510 default:
511 return -EINVAL;
512 };
513
514 printf("mbc_dom %u dom %u mem %u word %u: 0x%x\n",
515 mbc_x, dom_x, mem_x, word, readl((void __iomem *)cfg_w));
516
517 return 0;
518}
519
520int trdc_mrc_control_dump(ulong trdc_reg, u32 mrc_x, u32 glbac_id)
521{
522 struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
523 struct mrc_rgn_dom *mrc_dom;
524
525 if (mrc_base == 0 || glbac_id >= 8)
526 return -EINVAL;
527
528 /* only first dom has the glbac */
529 mrc_dom = &mrc_base->mrc_dom[0];
530
531 printf("mrc_dom %u glbac %u: 0x%x\n",
532 mrc_x, glbac_id, readl(&mrc_dom->memn_glbac[glbac_id]));
533
534 return 0;
535}
536
537void trdc_dump(void)
538{
539 u32 i;
540
541 printf("TRDC AONMIX MBC\n");
542
Peng Fan5dce3492024-09-19 12:01:35 +0800543 trdc_mbc_control_dump(TRDC_AON_BASE, MBC(0), GLOBAL_ID(0));
544 trdc_mbc_control_dump(TRDC_AON_BASE, MBC(1), GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800545
546 for (i = 0; i < 11; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800547 trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(0), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800548 for (i = 0; i < 1; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800549 trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(0), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800550
551 for (i = 0; i < 4; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800552 trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(1), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800553 for (i = 0; i < 4; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800554 trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(1), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800555
556 printf("TRDC WAKEUP MBC\n");
557
Peng Fan5dce3492024-09-19 12:01:35 +0800558 trdc_mbc_control_dump(TRDC_WAKEUP_BASE, MBC(0), GLOBAL_ID(0));
559 trdc_mbc_control_dump(TRDC_WAKEUP_BASE, MBC(1), GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800560
561 for (i = 0; i < 15; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800562 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(0), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800563
Peng Fan5dce3492024-09-19 12:01:35 +0800564 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(0), DOM(3), MEM(1), 0);
565 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, 0, 3, 2, 0);
Ye Li62185922022-07-26 16:40:54 +0800566
567 for (i = 0; i < 2; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800568 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800569
Peng Fan5dce3492024-09-19 12:01:35 +0800570 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(1), 0);
571 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, 1, 3, 2, 0);
572 trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(3), 0);
Ye Li62185922022-07-26 16:40:54 +0800573
574 printf("TRDC NICMIX MBC\n");
575
Peng Fan5dce3492024-09-19 12:01:35 +0800576 trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(0), GLOBAL_ID(0));
577 trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(1), GLOBAL_ID(0));
578 trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(2), GLOBAL_ID(0));
579 trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(3), GLOBAL_ID(0));
Ye Li62185922022-07-26 16:40:54 +0800580
581 for (i = 0; i < 7; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800582 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800583
584 for (i = 0; i < 2; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800585 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800586
587 for (i = 0; i < 5; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800588 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(2), i);
Ye Li62185922022-07-26 16:40:54 +0800589
590 for (i = 0; i < 6; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800591 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(3), i);
Ye Li62185922022-07-26 16:40:54 +0800592
593 for (i = 0; i < 1; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800594 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800595
596 for (i = 0; i < 1; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800597 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800598
599 for (i = 0; i < 3; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800600 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(2), i);
Ye Li62185922022-07-26 16:40:54 +0800601
602 for (i = 0; i < 3; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800603 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(3), i);
Ye Li62185922022-07-26 16:40:54 +0800604
605 for (i = 0; i < 2; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800606 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(2), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800607
608 for (i = 0; i < 2; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800609 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(2), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800610
611 for (i = 0; i < 5; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800612 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(0), i);
Ye Li62185922022-07-26 16:40:54 +0800613
614 for (i = 0; i < 5; i++)
Peng Fan5dce3492024-09-19 12:01:35 +0800615 trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(1), i);
Ye Li62185922022-07-26 16:40:54 +0800616}
617#endif