xref: /OK3568_Linux_fs/u-boot/arch/powerpc/cpu/mpc8xxx/law.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2008-2011 Freescale Semiconductor, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * (C) Copyright 2000
5*4882a593Smuzhiyun  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <common.h>
11*4882a593Smuzhiyun #include <linux/compiler.h>
12*4882a593Smuzhiyun #include <asm/fsl_law.h>
13*4882a593Smuzhiyun #include <asm/io.h>
14*4882a593Smuzhiyun #include <linux/log2.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define FSL_HW_NUM_LAWS CONFIG_SYS_FSL_NUM_LAWS
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifdef CONFIG_FSL_CORENET
21*4882a593Smuzhiyun #define LAW_BASE (CONFIG_SYS_FSL_CORENET_CCM_ADDR)
22*4882a593Smuzhiyun #define LAWAR_ADDR(x) (&((ccsr_local_t *)LAW_BASE)->law[x].lawar)
23*4882a593Smuzhiyun #define LAWBARH_ADDR(x) (&((ccsr_local_t *)LAW_BASE)->law[x].lawbarh)
24*4882a593Smuzhiyun #define LAWBARL_ADDR(x) (&((ccsr_local_t *)LAW_BASE)->law[x].lawbarl)
25*4882a593Smuzhiyun #define LAWBAR_SHIFT 0
26*4882a593Smuzhiyun #else
27*4882a593Smuzhiyun #define LAW_BASE (CONFIG_SYS_IMMR + 0xc08)
28*4882a593Smuzhiyun #define LAWAR_ADDR(x) ((u32 *)LAW_BASE + 8 * x + 2)
29*4882a593Smuzhiyun #define LAWBAR_ADDR(x) ((u32 *)LAW_BASE + 8 * x)
30*4882a593Smuzhiyun #define LAWBAR_SHIFT 12
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun 
get_law_base_addr(int idx)34*4882a593Smuzhiyun static inline phys_addr_t get_law_base_addr(int idx)
35*4882a593Smuzhiyun {
36*4882a593Smuzhiyun #ifdef CONFIG_FSL_CORENET
37*4882a593Smuzhiyun 	return (phys_addr_t)
38*4882a593Smuzhiyun 		((u64)in_be32(LAWBARH_ADDR(idx)) << 32) |
39*4882a593Smuzhiyun 		in_be32(LAWBARL_ADDR(idx));
40*4882a593Smuzhiyun #else
41*4882a593Smuzhiyun 	return (phys_addr_t)in_be32(LAWBAR_ADDR(idx)) << LAWBAR_SHIFT;
42*4882a593Smuzhiyun #endif
43*4882a593Smuzhiyun }
44*4882a593Smuzhiyun 
set_law_base_addr(int idx,phys_addr_t addr)45*4882a593Smuzhiyun static inline void set_law_base_addr(int idx, phys_addr_t addr)
46*4882a593Smuzhiyun {
47*4882a593Smuzhiyun #ifdef CONFIG_FSL_CORENET
48*4882a593Smuzhiyun 	out_be32(LAWBARL_ADDR(idx), addr & 0xffffffff);
49*4882a593Smuzhiyun 	out_be32(LAWBARH_ADDR(idx), (u64)addr >> 32);
50*4882a593Smuzhiyun #else
51*4882a593Smuzhiyun 	out_be32(LAWBAR_ADDR(idx), addr >> LAWBAR_SHIFT);
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun 
set_law(u8 idx,phys_addr_t addr,enum law_size sz,enum law_trgt_if id)55*4882a593Smuzhiyun void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun 	gd->arch.used_laws |= (1 << idx);
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun 	out_be32(LAWAR_ADDR(idx), 0);
60*4882a593Smuzhiyun 	set_law_base_addr(idx, addr);
61*4882a593Smuzhiyun 	out_be32(LAWAR_ADDR(idx), LAW_EN | ((u32)id << 20) | (u32)sz);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun 	/* Read back so that we sync the writes */
64*4882a593Smuzhiyun 	in_be32(LAWAR_ADDR(idx));
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun 
disable_law(u8 idx)67*4882a593Smuzhiyun void disable_law(u8 idx)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun 	gd->arch.used_laws &= ~(1 << idx);
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	out_be32(LAWAR_ADDR(idx), 0);
72*4882a593Smuzhiyun 	set_law_base_addr(idx, 0);
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	/* Read back so that we sync the writes */
75*4882a593Smuzhiyun 	in_be32(LAWAR_ADDR(idx));
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	return;
78*4882a593Smuzhiyun }
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #if !defined(CONFIG_NAND_SPL) && \
81*4882a593Smuzhiyun 	(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))
get_law_entry(u8 i,struct law_entry * e)82*4882a593Smuzhiyun static int get_law_entry(u8 i, struct law_entry *e)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun 	u32 lawar;
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun 	lawar = in_be32(LAWAR_ADDR(i));
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun 	if (!(lawar & LAW_EN))
89*4882a593Smuzhiyun 		return 0;
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun 	e->addr = get_law_base_addr(i);
92*4882a593Smuzhiyun 	e->size = lawar & 0x3f;
93*4882a593Smuzhiyun 	e->trgt_id = (lawar >> 20) & 0xff;
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun 	return 1;
96*4882a593Smuzhiyun }
97*4882a593Smuzhiyun #endif
98*4882a593Smuzhiyun 
set_next_law(phys_addr_t addr,enum law_size sz,enum law_trgt_if id)99*4882a593Smuzhiyun int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun 	u32 idx = ffz(gd->arch.used_laws);
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	if (idx >= FSL_HW_NUM_LAWS)
104*4882a593Smuzhiyun 		return -1;
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun 	set_law(idx, addr, sz, id);
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun 	return idx;
109*4882a593Smuzhiyun }
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #if !defined(CONFIG_NAND_SPL) && \
112*4882a593Smuzhiyun 	(!defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL))
set_last_law(phys_addr_t addr,enum law_size sz,enum law_trgt_if id)113*4882a593Smuzhiyun int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
114*4882a593Smuzhiyun {
115*4882a593Smuzhiyun 	u32 idx;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	/* we have no LAWs free */
118*4882a593Smuzhiyun 	if (gd->arch.used_laws == -1)
119*4882a593Smuzhiyun 		return -1;
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun 	/* grab the last free law */
122*4882a593Smuzhiyun 	idx = __ilog2(~(gd->arch.used_laws));
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun 	if (idx >= FSL_HW_NUM_LAWS)
125*4882a593Smuzhiyun 		return -1;
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun 	set_law(idx, addr, sz, id);
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun 	return idx;
130*4882a593Smuzhiyun }
131*4882a593Smuzhiyun 
find_law(phys_addr_t addr)132*4882a593Smuzhiyun struct law_entry find_law(phys_addr_t addr)
133*4882a593Smuzhiyun {
134*4882a593Smuzhiyun 	struct law_entry entry;
135*4882a593Smuzhiyun 	int i;
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun 	entry.index = -1;
138*4882a593Smuzhiyun 	entry.addr = 0;
139*4882a593Smuzhiyun 	entry.size = 0;
140*4882a593Smuzhiyun 	entry.trgt_id = 0;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	for (i = 0; i < FSL_HW_NUM_LAWS; i++) {
143*4882a593Smuzhiyun 		u64 upper;
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun 		if (!get_law_entry(i, &entry))
146*4882a593Smuzhiyun 			continue;
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 		upper = entry.addr + (2ull << entry.size);
149*4882a593Smuzhiyun 		if ((addr >= entry.addr) && (addr < upper)) {
150*4882a593Smuzhiyun 			entry.index = i;
151*4882a593Smuzhiyun 			break;
152*4882a593Smuzhiyun 		}
153*4882a593Smuzhiyun 	}
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun 	return entry;
156*4882a593Smuzhiyun }
157*4882a593Smuzhiyun 
print_laws(void)158*4882a593Smuzhiyun void print_laws(void)
159*4882a593Smuzhiyun {
160*4882a593Smuzhiyun 	int i;
161*4882a593Smuzhiyun 	u32 lawar;
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun 	printf("\nLocal Access Window Configuration\n");
164*4882a593Smuzhiyun 	for (i = 0; i < FSL_HW_NUM_LAWS; i++) {
165*4882a593Smuzhiyun 		lawar = in_be32(LAWAR_ADDR(i));
166*4882a593Smuzhiyun #ifdef CONFIG_FSL_CORENET
167*4882a593Smuzhiyun 		printf("LAWBARH%02d: 0x%08x LAWBARL%02d: 0x%08x",
168*4882a593Smuzhiyun 		       i, in_be32(LAWBARH_ADDR(i)),
169*4882a593Smuzhiyun 		       i, in_be32(LAWBARL_ADDR(i)));
170*4882a593Smuzhiyun #else
171*4882a593Smuzhiyun 		printf("LAWBAR%02d: 0x%08x", i, in_be32(LAWBAR_ADDR(i)));
172*4882a593Smuzhiyun #endif
173*4882a593Smuzhiyun 		printf(" LAWAR%02d: 0x%08x\n", i, lawar);
174*4882a593Smuzhiyun 		printf("\t(EN: %d TGT: 0x%02x SIZE: ",
175*4882a593Smuzhiyun 		       (lawar & LAW_EN) ? 1 : 0, (lawar >> 20) & 0xff);
176*4882a593Smuzhiyun 		print_size(lawar_size(lawar), ")\n");
177*4882a593Smuzhiyun 	}
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun 	return;
180*4882a593Smuzhiyun }
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun /* use up to 2 LAWs for DDR, used the last available LAWs */
set_ddr_laws(u64 start,u64 sz,enum law_trgt_if id)183*4882a593Smuzhiyun int set_ddr_laws(u64 start, u64 sz, enum law_trgt_if id)
184*4882a593Smuzhiyun {
185*4882a593Smuzhiyun 	u64 start_align, law_sz;
186*4882a593Smuzhiyun 	int law_sz_enc;
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun 	if (start == 0)
189*4882a593Smuzhiyun 		start_align = 1ull << (LAW_SIZE_32G + 1);
190*4882a593Smuzhiyun 	else
191*4882a593Smuzhiyun 		start_align = 1ull << (__ffs64(start));
192*4882a593Smuzhiyun 	law_sz = min(start_align, sz);
193*4882a593Smuzhiyun 	law_sz_enc = __ilog2_u64(law_sz) - 1;
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun 	if (set_last_law(start, law_sz_enc, id) < 0)
196*4882a593Smuzhiyun 		return -1;
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun 	/* recalculate size based on what was actually covered by the law */
199*4882a593Smuzhiyun 	law_sz = 1ull << __ilog2_u64(law_sz);
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 	/* do we still have anything to map */
202*4882a593Smuzhiyun 	sz = sz - law_sz;
203*4882a593Smuzhiyun 	if (sz) {
204*4882a593Smuzhiyun 		start += law_sz;
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun 		start_align = 1ull << (__ffs64(start));
207*4882a593Smuzhiyun 		law_sz = min(start_align, sz);
208*4882a593Smuzhiyun 		law_sz_enc = __ilog2_u64(law_sz) - 1;
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 		if (set_last_law(start, law_sz_enc, id) < 0)
211*4882a593Smuzhiyun 			return -1;
212*4882a593Smuzhiyun 	} else {
213*4882a593Smuzhiyun 		return 0;
214*4882a593Smuzhiyun 	}
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun 	/* do we still have anything to map */
217*4882a593Smuzhiyun 	sz = sz - law_sz;
218*4882a593Smuzhiyun 	if (sz)
219*4882a593Smuzhiyun 		return 1;
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun 	return 0;
222*4882a593Smuzhiyun }
223*4882a593Smuzhiyun #endif /* not SPL */
224*4882a593Smuzhiyun 
disable_non_ddr_laws(void)225*4882a593Smuzhiyun void disable_non_ddr_laws(void)
226*4882a593Smuzhiyun {
227*4882a593Smuzhiyun 	int i;
228*4882a593Smuzhiyun 	int id;
229*4882a593Smuzhiyun 	for (i = 0; i < FSL_HW_NUM_LAWS; i++) {
230*4882a593Smuzhiyun 		u32 lawar = in_be32(LAWAR_ADDR(i));
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 		if (lawar & LAW_EN) {
233*4882a593Smuzhiyun 			id = (lawar & ~LAW_EN) >> 20;
234*4882a593Smuzhiyun 			switch (id) {
235*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_1:
236*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_2:
237*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_3:
238*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_4:
239*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_INTRLV:
240*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_INTLV_34:
241*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_INTLV_123:
242*4882a593Smuzhiyun 			case LAW_TRGT_IF_DDR_INTLV_1234:
243*4882a593Smuzhiyun 						continue;
244*4882a593Smuzhiyun 			default:
245*4882a593Smuzhiyun 						disable_law(i);
246*4882a593Smuzhiyun 			}
247*4882a593Smuzhiyun 		}
248*4882a593Smuzhiyun 	}
249*4882a593Smuzhiyun }
250*4882a593Smuzhiyun 
init_laws(void)251*4882a593Smuzhiyun void init_laws(void)
252*4882a593Smuzhiyun {
253*4882a593Smuzhiyun 	int i;
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun #if FSL_HW_NUM_LAWS < 32
256*4882a593Smuzhiyun 	gd->arch.used_laws = ~((1 << FSL_HW_NUM_LAWS) - 1);
257*4882a593Smuzhiyun #elif FSL_HW_NUM_LAWS == 32
258*4882a593Smuzhiyun 	gd->arch.used_laws = 0;
259*4882a593Smuzhiyun #else
260*4882a593Smuzhiyun #error FSL_HW_NUM_LAWS can not be greater than 32 w/o code changes
261*4882a593Smuzhiyun #endif
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun #if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_E500) && \
264*4882a593Smuzhiyun 						!defined(CONFIG_E500MC)
265*4882a593Smuzhiyun 	/* ISBC (Boot ROM) creates a LAW 0 entry for non PBL platforms,
266*4882a593Smuzhiyun 	 * which is not disabled before transferring the control to uboot.
267*4882a593Smuzhiyun 	 * Disable the LAW 0 entry here.
268*4882a593Smuzhiyun 	 */
269*4882a593Smuzhiyun 	disable_law(0);
270*4882a593Smuzhiyun #endif
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun #if !defined(CONFIG_SECURE_BOOT)
273*4882a593Smuzhiyun 	/*
274*4882a593Smuzhiyun 	 * if any non DDR LAWs has been created earlier, remove them before
275*4882a593Smuzhiyun 	 * LAW table is parsed.
276*4882a593Smuzhiyun 	*/
277*4882a593Smuzhiyun 	disable_non_ddr_laws();
278*4882a593Smuzhiyun #endif
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun 	/*
281*4882a593Smuzhiyun 	 * Any LAWs that were set up before we booted assume they are meant to
282*4882a593Smuzhiyun 	 * be around and mark them used.
283*4882a593Smuzhiyun 	 */
284*4882a593Smuzhiyun 	for (i = 0; i < FSL_HW_NUM_LAWS; i++) {
285*4882a593Smuzhiyun 		u32 lawar = in_be32(LAWAR_ADDR(i));
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun 		if (lawar & LAW_EN)
288*4882a593Smuzhiyun 			gd->arch.used_laws |= (1 << i);
289*4882a593Smuzhiyun 	}
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun 	for (i = 0; i < num_law_entries; i++) {
292*4882a593Smuzhiyun 		if (law_table[i].index == -1)
293*4882a593Smuzhiyun 			set_next_law(law_table[i].addr, law_table[i].size,
294*4882a593Smuzhiyun 					law_table[i].trgt_id);
295*4882a593Smuzhiyun 		else
296*4882a593Smuzhiyun 			set_law(law_table[i].index, law_table[i].addr,
297*4882a593Smuzhiyun 				law_table[i].size, law_table[i].trgt_id);
298*4882a593Smuzhiyun 	}
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun #ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
301*4882a593Smuzhiyun 	/* check RCW to get which port is used for boot */
302*4882a593Smuzhiyun 	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
303*4882a593Smuzhiyun 	u32 bootloc = in_be32(&gur->rcwsr[6]);
304*4882a593Smuzhiyun 	/*
305*4882a593Smuzhiyun 	 * in SRIO or PCIE boot we need to set specail LAWs for
306*4882a593Smuzhiyun 	 * SRIO or PCIE interfaces.
307*4882a593Smuzhiyun 	 */
308*4882a593Smuzhiyun 	switch ((bootloc & FSL_CORENET_RCWSR6_BOOT_LOC) >> 23) {
309*4882a593Smuzhiyun 	case 0x0: /* boot from PCIE1 */
310*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
311*4882a593Smuzhiyun 				LAW_SIZE_1M,
312*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_1);
313*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
314*4882a593Smuzhiyun 				LAW_SIZE_1M,
315*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_1);
316*4882a593Smuzhiyun 		break;
317*4882a593Smuzhiyun 	case 0x1: /* boot from PCIE2 */
318*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
319*4882a593Smuzhiyun 				LAW_SIZE_1M,
320*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_2);
321*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
322*4882a593Smuzhiyun 				LAW_SIZE_1M,
323*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_2);
324*4882a593Smuzhiyun 		break;
325*4882a593Smuzhiyun 	case 0x2: /* boot from PCIE3 */
326*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
327*4882a593Smuzhiyun 				LAW_SIZE_1M,
328*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_3);
329*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
330*4882a593Smuzhiyun 				LAW_SIZE_1M,
331*4882a593Smuzhiyun 				LAW_TRGT_IF_PCIE_3);
332*4882a593Smuzhiyun 		break;
333*4882a593Smuzhiyun 	case 0x8: /* boot from SRIO1 */
334*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
335*4882a593Smuzhiyun 				LAW_SIZE_1M,
336*4882a593Smuzhiyun 				LAW_TRGT_IF_RIO_1);
337*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
338*4882a593Smuzhiyun 				LAW_SIZE_1M,
339*4882a593Smuzhiyun 				LAW_TRGT_IF_RIO_1);
340*4882a593Smuzhiyun 		break;
341*4882a593Smuzhiyun 	case 0x9: /* boot from SRIO2 */
342*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
343*4882a593Smuzhiyun 				LAW_SIZE_1M,
344*4882a593Smuzhiyun 				LAW_TRGT_IF_RIO_2);
345*4882a593Smuzhiyun 		set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
346*4882a593Smuzhiyun 				LAW_SIZE_1M,
347*4882a593Smuzhiyun 				LAW_TRGT_IF_RIO_2);
348*4882a593Smuzhiyun 		break;
349*4882a593Smuzhiyun 	default:
350*4882a593Smuzhiyun 		break;
351*4882a593Smuzhiyun 	}
352*4882a593Smuzhiyun #endif
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun 	return ;
355*4882a593Smuzhiyun }
356