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