1*29352910SJacky Bai /*
2*29352910SJacky Bai * Copyright 2022-2023 NXP
3*29352910SJacky Bai *
4*29352910SJacky Bai * SPDX-License-Identifier: BSD-3-Clause
5*29352910SJacky Bai */
6*29352910SJacky Bai
7*29352910SJacky Bai #include <assert.h>
8*29352910SJacky Bai #include <errno.h>
9*29352910SJacky Bai #include <stdbool.h>
10*29352910SJacky Bai
11*29352910SJacky Bai #include <common/bl_common.h>
12*29352910SJacky Bai #include <common/debug.h>
13*29352910SJacky Bai #include <drivers/nxp/trdc/imx_trdc.h>
14*29352910SJacky Bai #include <lib/mmio.h>
15*29352910SJacky Bai
16*29352910SJacky Bai
trdc_mda_set_cpu(uintptr_t trdc_base,uint32_t mda_inst,uint32_t mda_reg,uint8_t sa,uint8_t dids,uint8_t did,uint8_t pe,uint8_t pidm,uint8_t pid)17*29352910SJacky Bai int trdc_mda_set_cpu(uintptr_t trdc_base, uint32_t mda_inst,
18*29352910SJacky Bai uint32_t mda_reg, uint8_t sa, uint8_t dids,
19*29352910SJacky Bai uint8_t did, uint8_t pe, uint8_t pidm, uint8_t pid)
20*29352910SJacky Bai {
21*29352910SJacky Bai uint32_t val = mmio_read_32(trdc_base + MDAC_W_X(mda_inst, mda_reg));
22*29352910SJacky Bai /* invalid: config non-cpu master with cpu config format. */
23*29352910SJacky Bai if ((val & MDA_DFMT) != 0U) {
24*29352910SJacky Bai return -EINVAL;
25*29352910SJacky Bai }
26*29352910SJacky Bai
27*29352910SJacky Bai val = MDA_VLD | MDA_DFMT0_DID(pid) | MDA_DFMT0_PIDM(pidm) | MDA_DFMT0_PE(pe) |
28*29352910SJacky Bai MDA_DFMT0_SA(sa) | MDA_DFMT0_DIDS(dids) | MDA_DFMT0_DID(did);
29*29352910SJacky Bai
30*29352910SJacky Bai mmio_write_32(trdc_base + MDAC_W_X(mda_inst, mda_reg), val);
31*29352910SJacky Bai
32*29352910SJacky Bai return 0;
33*29352910SJacky Bai }
34*29352910SJacky Bai
trdc_mda_set_noncpu(uintptr_t trdc_base,uint32_t mda_inst,bool did_bypass,uint8_t sa,uint8_t pa,uint8_t did)35*29352910SJacky Bai int trdc_mda_set_noncpu(uintptr_t trdc_base, uint32_t mda_inst,
36*29352910SJacky Bai bool did_bypass, uint8_t sa, uint8_t pa,
37*29352910SJacky Bai uint8_t did)
38*29352910SJacky Bai {
39*29352910SJacky Bai uint32_t val = mmio_read_32(trdc_base + MDAC_W_X(mda_inst, 0));
40*29352910SJacky Bai
41*29352910SJacky Bai /* invalid: config cpu master with non-cpu config format. */
42*29352910SJacky Bai if ((val & MDA_DFMT) == 0U) {
43*29352910SJacky Bai return -EINVAL;
44*29352910SJacky Bai }
45*29352910SJacky Bai
46*29352910SJacky Bai val = MDA_VLD | MDA_DFMT1_SA(sa) | MDA_DFMT1_PA(pa) | MDA_DFMT1_DID(did) |
47*29352910SJacky Bai MDA_DFMT1_DIDB(did_bypass ? 1U : 0U);
48*29352910SJacky Bai
49*29352910SJacky Bai mmio_write_32(trdc_base + MDAC_W_X(mda_inst, 0), val);
50*29352910SJacky Bai
51*29352910SJacky Bai return 0;
52*29352910SJacky Bai }
53*29352910SJacky Bai
trdc_get_mbc_base(uintptr_t trdc_reg,uint32_t mbc_x)54*29352910SJacky Bai static uintptr_t trdc_get_mbc_base(uintptr_t trdc_reg, uint32_t mbc_x)
55*29352910SJacky Bai {
56*29352910SJacky Bai struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
57*29352910SJacky Bai uint32_t mbc_num = MBC_NUM(trdc_base->trdc_hwcfg0);
58*29352910SJacky Bai
59*29352910SJacky Bai if (mbc_x >= mbc_num) {
60*29352910SJacky Bai return 0U;
61*29352910SJacky Bai }
62*29352910SJacky Bai
63*29352910SJacky Bai return trdc_reg + 0x10000 + 0x2000 * mbc_x;
64*29352910SJacky Bai }
65*29352910SJacky Bai
trdc_get_mrc_base(uintptr_t trdc_reg,uint32_t mrc_x)66*29352910SJacky Bai static uintptr_t trdc_get_mrc_base(uintptr_t trdc_reg, uint32_t mrc_x)
67*29352910SJacky Bai {
68*29352910SJacky Bai struct trdc_mgr *trdc_base = (struct trdc_mgr *)trdc_reg;
69*29352910SJacky Bai uint32_t mbc_num = MBC_NUM(trdc_base->trdc_hwcfg0);
70*29352910SJacky Bai uint32_t mrc_num = MRC_NUM(trdc_base->trdc_hwcfg0);
71*29352910SJacky Bai
72*29352910SJacky Bai if (mrc_x >= mrc_num) {
73*29352910SJacky Bai return 0U;
74*29352910SJacky Bai }
75*29352910SJacky Bai
76*29352910SJacky Bai return trdc_reg + 0x10000 + 0x2000 * mbc_num + 0x1000 * mrc_x;
77*29352910SJacky Bai }
78*29352910SJacky Bai
trdc_mbc_blk_num(uintptr_t trdc_reg,uint32_t mbc_x,uint32_t mem_x)79*29352910SJacky Bai uint32_t trdc_mbc_blk_num(uintptr_t trdc_reg, uint32_t mbc_x, uint32_t mem_x)
80*29352910SJacky Bai {
81*29352910SJacky Bai uint32_t glbcfg;
82*29352910SJacky Bai struct mbc_mem_dom *mbc_dom;
83*29352910SJacky Bai struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
84*29352910SJacky Bai
85*29352910SJacky Bai if (mbc_base == NULL) {
86*29352910SJacky Bai return 0;
87*29352910SJacky Bai }
88*29352910SJacky Bai
89*29352910SJacky Bai /* only first dom has the glbcfg */
90*29352910SJacky Bai mbc_dom = &mbc_base->mem_dom[0];
91*29352910SJacky Bai glbcfg = mmio_read_32((uintptr_t)&mbc_dom->mem_glbcfg[mem_x]);
92*29352910SJacky Bai
93*29352910SJacky Bai return MBC_BLK_NUM(glbcfg);
94*29352910SJacky Bai }
95*29352910SJacky Bai
trdc_mrc_rgn_num(uintptr_t trdc_reg,uint32_t mrc_x)96*29352910SJacky Bai uint32_t trdc_mrc_rgn_num(uintptr_t trdc_reg, uint32_t mrc_x)
97*29352910SJacky Bai {
98*29352910SJacky Bai uint32_t glbcfg;
99*29352910SJacky Bai struct mrc_rgn_dom *mrc_dom;
100*29352910SJacky Bai struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
101*29352910SJacky Bai
102*29352910SJacky Bai if (mrc_base == NULL) {
103*29352910SJacky Bai return 0;
104*29352910SJacky Bai }
105*29352910SJacky Bai
106*29352910SJacky Bai /* only first dom has the glbcfg */
107*29352910SJacky Bai mrc_dom = &mrc_base->mrc_dom[0];
108*29352910SJacky Bai glbcfg = mmio_read_32((uintptr_t)&mrc_dom->mrc_glbcfg[0]);
109*29352910SJacky Bai
110*29352910SJacky Bai return MBC_BLK_NUM(glbcfg);
111*29352910SJacky Bai }
112*29352910SJacky Bai
trdc_mbc_set_control(uintptr_t trdc_reg,uint32_t mbc_x,uint32_t glbac_id,uint32_t glbac_val)113*29352910SJacky Bai int trdc_mbc_set_control(uintptr_t trdc_reg, uint32_t mbc_x,
114*29352910SJacky Bai uint32_t glbac_id, uint32_t glbac_val)
115*29352910SJacky Bai {
116*29352910SJacky Bai struct mbc_mem_dom *mbc_dom;
117*29352910SJacky Bai struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
118*29352910SJacky Bai
119*29352910SJacky Bai if (mbc_base == NULL || glbac_id >= GLBAC_NUM) {
120*29352910SJacky Bai return -EINVAL;
121*29352910SJacky Bai }
122*29352910SJacky Bai
123*29352910SJacky Bai /* only first dom has the glbac */
124*29352910SJacky Bai mbc_dom = &mbc_base->mem_dom[0];
125*29352910SJacky Bai
126*29352910SJacky Bai mmio_write_32((uintptr_t)&mbc_dom->memn_glbac[glbac_id], glbac_val);
127*29352910SJacky Bai
128*29352910SJacky Bai return 0;
129*29352910SJacky Bai }
130*29352910SJacky Bai
trdc_mbc_blk_config(uintptr_t trdc_reg,uint32_t mbc_x,uint32_t dom_x,uint32_t mem_x,uint32_t blk_x,bool sec_access,uint32_t glbac_id)131*29352910SJacky Bai int trdc_mbc_blk_config(uintptr_t trdc_reg, uint32_t mbc_x,
132*29352910SJacky Bai uint32_t dom_x, uint32_t mem_x, uint32_t blk_x,
133*29352910SJacky Bai bool sec_access, uint32_t glbac_id)
134*29352910SJacky Bai {
135*29352910SJacky Bai uint32_t *cfg_w;
136*29352910SJacky Bai uint32_t index, offset, val;
137*29352910SJacky Bai struct mbc_mem_dom *mbc_dom;
138*29352910SJacky Bai struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x);
139*29352910SJacky Bai
140*29352910SJacky Bai if (mbc_base == NULL || glbac_id >= GLBAC_NUM) {
141*29352910SJacky Bai return -EINVAL;
142*29352910SJacky Bai }
143*29352910SJacky Bai
144*29352910SJacky Bai mbc_dom = &mbc_base->mem_dom[dom_x];
145*29352910SJacky Bai
146*29352910SJacky Bai switch (mem_x) {
147*29352910SJacky Bai case 0:
148*29352910SJacky Bai cfg_w = &mbc_dom->mem0_blk_cfg_w[blk_x / 8];
149*29352910SJacky Bai break;
150*29352910SJacky Bai case 1:
151*29352910SJacky Bai cfg_w = &mbc_dom->mem1_blk_cfg_w[blk_x / 8];
152*29352910SJacky Bai break;
153*29352910SJacky Bai case 2:
154*29352910SJacky Bai cfg_w = &mbc_dom->mem2_blk_cfg_w[blk_x / 8];
155*29352910SJacky Bai break;
156*29352910SJacky Bai case 3:
157*29352910SJacky Bai cfg_w = &mbc_dom->mem3_blk_cfg_w[blk_x / 8];
158*29352910SJacky Bai break;
159*29352910SJacky Bai default:
160*29352910SJacky Bai return -EINVAL;
161*29352910SJacky Bai };
162*29352910SJacky Bai
163*29352910SJacky Bai index = blk_x % 8;
164*29352910SJacky Bai offset = index * 4;
165*29352910SJacky Bai
166*29352910SJacky Bai val = mmio_read_32((uintptr_t)cfg_w);
167*29352910SJacky Bai val &= ~(0xF << offset);
168*29352910SJacky Bai
169*29352910SJacky Bai /*
170*29352910SJacky Bai * MBC0-3
171*29352910SJacky Bai * Global 0, 0x7777 secure pri/user read/write/execute,
172*29352910SJacky Bai * S400 has already set it. So select MBC0_MEMN_GLBAC0
173*29352910SJacky Bai */
174*29352910SJacky Bai if (sec_access) {
175*29352910SJacky Bai val |= ((0x0 | (glbac_id & 0x7)) << offset);
176*29352910SJacky Bai mmio_write_32((uintptr_t)cfg_w, val);
177*29352910SJacky Bai } else {
178*29352910SJacky Bai /* nse bit set */
179*29352910SJacky Bai val |= ((0x8 | (glbac_id & 0x7)) << offset);
180*29352910SJacky Bai mmio_write_32((uintptr_t)cfg_w, val);
181*29352910SJacky Bai }
182*29352910SJacky Bai
183*29352910SJacky Bai return 0;
184*29352910SJacky Bai }
185*29352910SJacky Bai
trdc_mrc_set_control(uintptr_t trdc_reg,uint32_t mrc_x,uint32_t glbac_id,uint32_t glbac_val)186*29352910SJacky Bai int trdc_mrc_set_control(uintptr_t trdc_reg, uint32_t mrc_x,
187*29352910SJacky Bai uint32_t glbac_id, uint32_t glbac_val)
188*29352910SJacky Bai {
189*29352910SJacky Bai struct mrc_rgn_dom *mrc_dom;
190*29352910SJacky Bai struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
191*29352910SJacky Bai
192*29352910SJacky Bai if (mrc_base == NULL || glbac_id >= GLBAC_NUM) {
193*29352910SJacky Bai return -EINVAL;
194*29352910SJacky Bai }
195*29352910SJacky Bai
196*29352910SJacky Bai /* only first dom has the glbac */
197*29352910SJacky Bai mrc_dom = &mrc_base->mrc_dom[0];
198*29352910SJacky Bai
199*29352910SJacky Bai mmio_write_32((uintptr_t)&mrc_dom->memn_glbac[glbac_id], glbac_val);
200*29352910SJacky Bai
201*29352910SJacky Bai return 0;
202*29352910SJacky Bai }
203*29352910SJacky Bai
trdc_mrc_rgn_config(uintptr_t trdc_reg,uint32_t mrc_x,uint32_t dom_x,uint32_t rgn_id,uint32_t addr_start,uint32_t addr_size,bool sec_access,uint32_t glbac_id)204*29352910SJacky Bai int trdc_mrc_rgn_config(uintptr_t trdc_reg, uint32_t mrc_x,
205*29352910SJacky Bai uint32_t dom_x, uint32_t rgn_id,
206*29352910SJacky Bai uint32_t addr_start, uint32_t addr_size,
207*29352910SJacky Bai bool sec_access, uint32_t glbac_id)
208*29352910SJacky Bai {
209*29352910SJacky Bai uint32_t *desc_w;
210*29352910SJacky Bai uint32_t addr_end;
211*29352910SJacky Bai struct mrc_rgn_dom *mrc_dom;
212*29352910SJacky Bai struct trdc_mrc *mrc_base = (struct trdc_mrc *)trdc_get_mrc_base(trdc_reg, mrc_x);
213*29352910SJacky Bai
214*29352910SJacky Bai if (mrc_base == NULL || glbac_id >= GLBAC_NUM || rgn_id >= MRC_REG_ALL) {
215*29352910SJacky Bai return -EINVAL;
216*29352910SJacky Bai }
217*29352910SJacky Bai
218*29352910SJacky Bai mrc_dom = &mrc_base->mrc_dom[dom_x];
219*29352910SJacky Bai
220*29352910SJacky Bai addr_end = addr_start + addr_size - 1;
221*29352910SJacky Bai addr_start &= ~0x3fff;
222*29352910SJacky Bai addr_end &= ~0x3fff;
223*29352910SJacky Bai
224*29352910SJacky Bai desc_w = &mrc_dom->rgn_desc_words[rgn_id][0];
225*29352910SJacky Bai
226*29352910SJacky Bai if (sec_access) {
227*29352910SJacky Bai mmio_write_32((uintptr_t)desc_w, addr_start | (glbac_id & 0x7));
228*29352910SJacky Bai mmio_write_32((uintptr_t)(desc_w + 1), addr_end | 0x1);
229*29352910SJacky Bai } else {
230*29352910SJacky Bai mmio_write_32((uintptr_t)desc_w, addr_start | (glbac_id & 0x7));
231*29352910SJacky Bai mmio_write_32((uintptr_t)(desc_w + 1), (addr_end | 0x1 | 0x10));
232*29352910SJacky Bai }
233*29352910SJacky Bai
234*29352910SJacky Bai return 0;
235*29352910SJacky Bai }
236*29352910SJacky Bai
trdc_mrc_enabled(uintptr_t mrc_base)237*29352910SJacky Bai bool trdc_mrc_enabled(uintptr_t mrc_base)
238*29352910SJacky Bai {
239*29352910SJacky Bai return (mmio_read_32(mrc_base) & BIT(15));
240*29352910SJacky Bai }
241*29352910SJacky Bai
trdc_mbc_enabled(uintptr_t mbc_base)242*29352910SJacky Bai bool trdc_mbc_enabled(uintptr_t mbc_base)
243*29352910SJacky Bai {
244*29352910SJacky Bai return (mmio_read_32(mbc_base) & BIT(14));
245*29352910SJacky Bai }
246*29352910SJacky Bai
is_trdc_mgr_slot(uintptr_t trdc_base,uint8_t mbc_id,uint8_t mem_id,uint16_t blk_id)247*29352910SJacky Bai static bool is_trdc_mgr_slot(uintptr_t trdc_base, uint8_t mbc_id,
248*29352910SJacky Bai uint8_t mem_id, uint16_t blk_id)
249*29352910SJacky Bai {
250*29352910SJacky Bai unsigned int i;
251*29352910SJacky Bai
252*29352910SJacky Bai for (i = 0U; i < trdc_mgr_num; i++) {
253*29352910SJacky Bai if (trdc_mgr_blks[i].trdc_base == trdc_base) {
254*29352910SJacky Bai if (mbc_id == trdc_mgr_blks[i].mbc_id &&
255*29352910SJacky Bai mem_id == trdc_mgr_blks[i].mbc_mem_id &&
256*29352910SJacky Bai (blk_id == trdc_mgr_blks[i].blk_mgr ||
257*29352910SJacky Bai blk_id == trdc_mgr_blks[i].blk_mc)) {
258*29352910SJacky Bai return true;
259*29352910SJacky Bai }
260*29352910SJacky Bai }
261*29352910SJacky Bai }
262*29352910SJacky Bai
263*29352910SJacky Bai return false;
264*29352910SJacky Bai }
265*29352910SJacky Bai
266*29352910SJacky Bai /*
267*29352910SJacky Bai * config the TRDC MGR & MC's access policy. only the secure privilege
268*29352910SJacky Bai * mode SW can access it.
269*29352910SJacky Bai */
trdc_mgr_mbc_setup(struct trdc_mgr_info * mgr)270*29352910SJacky Bai void trdc_mgr_mbc_setup(struct trdc_mgr_info *mgr)
271*29352910SJacky Bai {
272*29352910SJacky Bai unsigned int i;
273*29352910SJacky Bai
274*29352910SJacky Bai /*
275*29352910SJacky Bai * If the MBC is global enabled, need to cconfigure the MBCs of
276*29352910SJacky Bai * TRDC MGR & MC correctly.
277*29352910SJacky Bai */
278*29352910SJacky Bai if (trdc_mbc_enabled(mgr->trdc_base)) {
279*29352910SJacky Bai /* ONLY secure privilige can access */
280*29352910SJacky Bai trdc_mbc_set_control(mgr->trdc_base, mgr->mbc_id, 7, 0x6000);
281*29352910SJacky Bai for (i = 0U; i < 16U; i++) {
282*29352910SJacky Bai trdc_mbc_blk_config(mgr->trdc_base, mgr->mbc_id, i,
283*29352910SJacky Bai mgr->mbc_mem_id, mgr->blk_mgr, true, 7);
284*29352910SJacky Bai
285*29352910SJacky Bai trdc_mbc_blk_config(mgr->trdc_base, mgr->mbc_id, i,
286*29352910SJacky Bai mgr->mbc_mem_id, mgr->blk_mc, true, 7);
287*29352910SJacky Bai }
288*29352910SJacky Bai }
289*29352910SJacky Bai }
290*29352910SJacky Bai
291*29352910SJacky Bai /*
292*29352910SJacky Bai * Set up the TRDC access policy for all the resources under
293*29352910SJacky Bai * the TRDC control.
294*29352910SJacky Bai */
trdc_setup(struct trdc_config_info * cfg)295*29352910SJacky Bai void trdc_setup(struct trdc_config_info *cfg)
296*29352910SJacky Bai {
297*29352910SJacky Bai unsigned int i, j, num;
298*29352910SJacky Bai bool is_mgr;
299*29352910SJacky Bai
300*29352910SJacky Bai /* config the MRCs */
301*29352910SJacky Bai if (trdc_mrc_enabled(cfg->trdc_base)) {
302*29352910SJacky Bai /* set global access policy */
303*29352910SJacky Bai for (i = 0U; i < cfg->num_mrc_glbac; i++) {
304*29352910SJacky Bai trdc_mrc_set_control(cfg->trdc_base,
305*29352910SJacky Bai cfg->mrc_glbac[i].mbc_mrc_id,
306*29352910SJacky Bai cfg->mrc_glbac[i].glbac_id,
307*29352910SJacky Bai cfg->mrc_glbac[i].glbac_val);
308*29352910SJacky Bai }
309*29352910SJacky Bai
310*29352910SJacky Bai /* set each MRC region access policy */
311*29352910SJacky Bai for (i = 0U; i < cfg->num_mrc_cfg; i++) {
312*29352910SJacky Bai trdc_mrc_rgn_config(cfg->trdc_base, cfg->mrc_cfg[i].mrc_id,
313*29352910SJacky Bai cfg->mrc_cfg[i].dom_id,
314*29352910SJacky Bai cfg->mrc_cfg[i].region_id,
315*29352910SJacky Bai cfg->mrc_cfg[i].region_start,
316*29352910SJacky Bai cfg->mrc_cfg[i].region_size,
317*29352910SJacky Bai cfg->mrc_cfg[i].secure,
318*29352910SJacky Bai cfg->mrc_cfg[i].glbac_id);
319*29352910SJacky Bai }
320*29352910SJacky Bai }
321*29352910SJacky Bai
322*29352910SJacky Bai /* config the MBCs */
323*29352910SJacky Bai if (trdc_mbc_enabled(cfg->trdc_base)) {
324*29352910SJacky Bai /* set MBC global access policy */
325*29352910SJacky Bai for (i = 0U; i < cfg->num_mbc_glbac; i++) {
326*29352910SJacky Bai trdc_mbc_set_control(cfg->trdc_base,
327*29352910SJacky Bai cfg->mbc_glbac[i].mbc_mrc_id,
328*29352910SJacky Bai cfg->mbc_glbac[i].glbac_id,
329*29352910SJacky Bai cfg->mbc_glbac[i].glbac_val);
330*29352910SJacky Bai }
331*29352910SJacky Bai
332*29352910SJacky Bai for (i = 0U; i < cfg->num_mbc_cfg; i++) {
333*29352910SJacky Bai if (cfg->mbc_cfg[i].blk_id == MBC_BLK_ALL) {
334*29352910SJacky Bai num = trdc_mbc_blk_num(cfg->trdc_base,
335*29352910SJacky Bai cfg->mbc_cfg[i].mbc_id,
336*29352910SJacky Bai cfg->mbc_cfg[i].mem_id);
337*29352910SJacky Bai
338*29352910SJacky Bai for (j = 0U; j < num; j++) {
339*29352910SJacky Bai /* Skip mgr and mc */
340*29352910SJacky Bai is_mgr = is_trdc_mgr_slot(cfg->trdc_base,
341*29352910SJacky Bai cfg->mbc_cfg[i].mbc_id,
342*29352910SJacky Bai cfg->mbc_cfg[i].mem_id, j);
343*29352910SJacky Bai if (is_mgr) {
344*29352910SJacky Bai continue;
345*29352910SJacky Bai }
346*29352910SJacky Bai
347*29352910SJacky Bai trdc_mbc_blk_config(cfg->trdc_base,
348*29352910SJacky Bai cfg->mbc_cfg[i].mbc_id,
349*29352910SJacky Bai cfg->mbc_cfg[i].dom_id,
350*29352910SJacky Bai cfg->mbc_cfg[i].mem_id, j,
351*29352910SJacky Bai cfg->mbc_cfg[i].secure,
352*29352910SJacky Bai cfg->mbc_cfg[i].glbac_id);
353*29352910SJacky Bai }
354*29352910SJacky Bai } else {
355*29352910SJacky Bai trdc_mbc_blk_config(cfg->trdc_base,
356*29352910SJacky Bai cfg->mbc_cfg[i].mbc_id,
357*29352910SJacky Bai cfg->mbc_cfg[i].dom_id,
358*29352910SJacky Bai cfg->mbc_cfg[i].mem_id,
359*29352910SJacky Bai cfg->mbc_cfg[i].blk_id,
360*29352910SJacky Bai cfg->mbc_cfg[i].secure,
361*29352910SJacky Bai cfg->mbc_cfg[i].glbac_id);
362*29352910SJacky Bai }
363*29352910SJacky Bai }
364*29352910SJacky Bai }
365*29352910SJacky Bai }
366