58fb3def5dac634686220d16d526d47f4f51b013
[keystone-rtos/ibl.git] / src / util / iblConfig / src / device.c
1 /************************************************************************************
2  * FILE PURPOSE: C6455 Device Specific functions used in the 1st load stage
3  ************************************************************************************
4  * FILE NAME: c6455init.c
5  *
6  * DESCRIPTION: Implements the device specific functions for the IBL
7  *
8  * @file c6455.c
9  *
10  * @brief
11  *  This file implements the device specific functions for the IBL
12  *
13  ************************************************************************************/
14 #include "device.h"
16 ibl_t c6455_ibl_config(void)
17 {
18     ibl_t ibl;
19     memset(&ibl, 0, sizeof(ibl_t));
21     ibl.iblMagic = ibl_MAGIC_VALUE;
22     ibl.iblEvmType = ibl_EVM_C6455L;
24     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
25     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
26     ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
27     ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 1;
28     ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
30     /* The DDR PLL. The multipliers/dividers are fixed, so are really dont cares */
31     ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
33     /* The network PLL. The multipliers/dividers are fixed */
34     ibl.pllConfig[ibl_NET_PLL].doEnable = TRUE;
36     /* EMIF configuration. The values are for DDR at 500 MHz  */
37     ibl.ddrConfig.configDdr = TRUE;
39     ibl.ddrConfig.uEmif.emif3p1.sdcfg  = 0x00538822; /* timing, 32bit wide */
40     ibl.ddrConfig.uEmif.emif3p1.sdrfc  = 0x000007a2; /* Refresh 500Mhz */
41     ibl.ddrConfig.uEmif.emif3p1.sdtim1 = 0x3edb4b91; /* Timing 1 */
42     ibl.ddrConfig.uEmif.emif3p1.sdtim2 = 0x00a2c722; /* Timing 2 */
43     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x00000005; /* PHY read latency for CAS 4 is 4 + 2 - 1 */
45     /* SGMII not present */
46     ibl.sgmiiConfig[0].configure = FALSE;
47     ibl.sgmiiConfig[1].configure = FALSE;
49     /* MDIO configuration */
50     ibl.mdioConfig.nMdioOps = 0;
51     ibl.mdioConfig.mdioClkDiv = 0x20;
52     ibl.mdioConfig.interDelay = 2000;   /* ~2ms at 1000 MHz */
54     ibl.mdioConfig.mdio[0] =  (1 << 30) | (14 << 21) | (0 << 16) | 0xd5d0;
56     /* spiConfig and emifConfig not needed */
58     /* Ethernet configuration for Boot mode 0 */
59     ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
60     ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
61     ibl.bootModes[0].port     = 0;
63     /* Bootp is disabled. The server and file name are provided here */
64     ibl.bootModes[0].u.ethBoot.doBootp          = TRUE;
65     ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
66     ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
67     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
69     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
70     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
71     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
72     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.netmask,   255,255,255,0);
74     /* There is no e-fuse mac address. A value must be assigned */
75     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[0] = 10;
76     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[1] = 224;
77     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[2] = 166;
78     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[3] = 102;
79     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[4] = 87;
80     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[5] = 25;
83     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[0]  = 'c';
84     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[1]  = '6';
85     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[2]  = '4';
86     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[3]  = '5';
87     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[4]  = '5';
88     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[5]  = '-';
89     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[6]  = 'l';
90     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[7]  = 'e';
91     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[8]  = '.';
92     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[9]  = 'b';
93     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[10] = 'i';
94     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[11] = 'n';
95     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[12] = '\0';
96     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[13] = '\0';
97     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
99     /* Even though the entire range of DDR2 is chosen, the load will
100      * stop when the ftp reaches the end of the file */
101     ibl.bootModes[0].u.ethBoot.blob.startAddress  = 0xe0000000;       /* Base address of DDR2 */
102     ibl.bootModes[0].u.ethBoot.blob.sizeBytes     = 0x20000000;       /* All of DDR2 */
103     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0xe0000000;       /* Base of DDR2 */
105     /* Alternative bootMode not configured for now */
106     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
108     ibl.chkSum = 0;
110     return(ibl);
113 ibl_t c6474_ibl_config(void)
115     ibl_t ibl;
116     memset(&ibl, 0, sizeof(ibl_t));
118     ibl.iblMagic = ibl_MAGIC_VALUE;
119     ibl.iblEvmType = ibl_EVM_C6474M;
121     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
122     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
123     ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
124     ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 1;
125     ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
127     /* The DDR PLL. The multipliers/dividers are fixed, so are really dont cares */
128     ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
130     /* The network PLL. The multipliers/dividers are fixed */
131     ibl.pllConfig[ibl_NET_PLL].doEnable = TRUE;
133     /* EMIF configuration. The values are for DDR at 533 MHz  */
134     ibl.ddrConfig.configDdr = TRUE;
136     ibl.ddrConfig.uEmif.emif3p1.sdcfg  = 0x00d38a32; /* cas5, 8 banks, 10 bit column */
137     ibl.ddrConfig.uEmif.emif3p1.sdrfc  = 0x00000a29; /* Refresh 333Mhz */
138     ibl.ddrConfig.uEmif.emif3p1.sdtim1 = 0x4d246c9a; /* Timing 1 */
139     ibl.ddrConfig.uEmif.emif3p1.sdtim2 = 0x00993c42; /* Timing 2 */
140     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
142     /* SGMII 0 is present */
143     ibl.sgmiiConfig[0].configure = TRUE;
144     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
145     ibl.sgmiiConfig[0].control       = 0x20;
146     ibl.sgmiiConfig[0].txConfig      = 0x00000ea3;
147     ibl.sgmiiConfig[0].rxConfig      = 0x00081023;
148     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
150     /* There is no port 1 on the 6474 */
151     ibl.sgmiiConfig[1].configure = FALSE;
153     /* MDIO configuration */
154     ibl.mdioConfig.nMdioOps = 8;
155     ibl.mdioConfig.mdioClkDiv = 0x26;
156     ibl.mdioConfig.interDelay = 2000;   /* ~2ms at 1000 MHz */
158     ibl.mdioConfig.mdio[0] =  (1 << 30) | ( 4 << 21) | (27 << 16) | 0x0081;
159     ibl.mdioConfig.mdio[1] =  (1 << 30) | (26 << 21) | (14 << 16) | 0x0047;
160     ibl.mdioConfig.mdio[2] =  (1 << 30) | (26 << 21) | (13 << 16) | 0x0047;
161     ibl.mdioConfig.mdio[3] =  (1 << 30) | ( 0 << 21) | (14 << 16) | 0x8140;
163     ibl.mdioConfig.mdio[4] =  (1 << 30) | ( 0 << 21) | (13 << 16) | 0x8140;
164     ibl.mdioConfig.mdio[5] =  (1 << 30) | ( 1 << 21) | (22 << 16) | 0x043e;
165     ibl.mdioConfig.mdio[6] =  (1 << 30) | ( 1 << 21) | (22 << 16) | 0x043e;
166     ibl.mdioConfig.mdio[7] =  (1 << 30) | ( 0 << 21) | ( 1 << 16) | 0x9140;
168     /* spiConfig and emifConfig not needed */
170     /* Ethernet configuration for Boot mode 0 */
171     ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
172     ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
173     ibl.bootModes[0].port     = 0;
175     /* Bootp is disabled. The server and file name are provided here */
176     ibl.bootModes[0].u.ethBoot.doBootp          = TRUE;
177     ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
178     ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
179     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
181     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
182     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
183     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
184     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.netmask,   255,255,255,0);
186     /* Set the hardware address as 0 so the e-fuse value will be used */
187     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[0] = 0;
188     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[1] = 0;
189     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[2] = 0;
190     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[3] = 0;
191     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[4] = 0;
192     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[5] = 0;
194     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[0]  = 'c';
195     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[1]  = '6';
196     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[2]  = '4';
197     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[3]  = '7';
198     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[4]  = '4';
199     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[5]  = '-';
200     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[6]  = 'l';
201     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[7]  = 'e';
202     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[8]  = '.';
203     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[9]  = 'b';
204     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[10] = 'i';
205     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[11] = 'n';
206     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[12] = '\0';
207     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[13] = '\0';
208     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
210     /* Even though the entire range of DDR2 is chosen, the load will
211      * stop when the ftp reaches the end of the file */
212     ibl.bootModes[0].u.ethBoot.blob.startAddress  = 0x80000000;       /* Base address of DDR2 */
213     ibl.bootModes[0].u.ethBoot.blob.sizeBytes     = 0x20000000;       /* All of DDR2 */
214     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
216     /* Alternative bootMode not configured for now */
217     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
219     ibl.chkSum = 0;
221     return(ibl);
224 ibl_t c6474l_ibl_config(void)
226     ibl_t ibl;
227     memset(&ibl, 0, sizeof(ibl_t));
229     ibl.iblMagic = ibl_MAGIC_VALUE;
230     ibl.iblEvmType = ibl_EVM_C6474L;
232     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
233     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
234     ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
235     ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 1;
236     ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
238     /* The DDR PLL. The multipliers/dividers are fixed, so are really dont cares */
239     ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
241     /* The network PLL. The multipliers/dividers are fixed */
242     ibl.pllConfig[ibl_NET_PLL].doEnable = TRUE;
244     /* EMIF configuration. The values are for DDR at 533 MHz  */
245     ibl.ddrConfig.configDdr = TRUE;
247     ibl.ddrConfig.uEmif.emif3p1.sdcfg  = 0x00d38a32; /* cas5, 8 banks, 10 bit column */
248     ibl.ddrConfig.uEmif.emif3p1.sdrfc  = 0x00000a29; /* Refresh 333Mhz */
249     ibl.ddrConfig.uEmif.emif3p1.sdtim1 = 0x4d246c9a; /* Timing 1 */
250     ibl.ddrConfig.uEmif.emif3p1.sdtim2 = 0x00993c42; /* Timing 2 */
251     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
253     /* SGMII 0 is present */
254     ibl.sgmiiConfig[0].configure = TRUE;
255     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
256     ibl.sgmiiConfig[0].control       = 0x20;
257     ibl.sgmiiConfig[0].txConfig      = 0x00000e23;
258     ibl.sgmiiConfig[0].rxConfig      = 0x00081023;
259     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
261     /* There is no port 1 on the 6474 */
262     ibl.sgmiiConfig[1].configure = FALSE;
264     /* MDIO configuration */
265     ibl.mdioConfig.nMdioOps = 5;
266     ibl.mdioConfig.mdioClkDiv = 0x20;
267     ibl.mdioConfig.interDelay = 2000;   /* ~2ms at 1000 MHz */
269     ibl.mdioConfig.mdio[0] =  (1 << 30) | ( 4 << 21) | (27 << 16) | 0x0081;
270     ibl.mdioConfig.mdio[1] =  (1 << 30) | (26 << 21) | (14 << 16) | 0x0047;
271     ibl.mdioConfig.mdio[2] =  (1 << 30) | ( 0 << 21) | (14 << 16) | 0x8140;
273     ibl.mdioConfig.mdio[3] =  (1 << 30) | ( 1 << 21) | (22 << 16) | 0x043e;
274     ibl.mdioConfig.mdio[4] =  (1 << 30) | ( 0 << 21) | ( 1 << 16) | 0x9140;
276     /* spiConfig and emifConfig not needed */
278     /* Ethernet configuration for Boot mode 0 */
279     ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
280     ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
281     ibl.bootModes[0].port     = 0;
283     /* Bootp is disabled. The server and file name are provided here */
284     ibl.bootModes[0].u.ethBoot.doBootp          = TRUE;
285     ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
286     ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
287     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
289     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
290     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
291     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
292     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.netmask,   255,255,255,0);
294     /* Set the hardware address as 0 so the e-fuse value will be used */
295     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[0] = 0;
296     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[1] = 0;
297     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[2] = 0;
298     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[3] = 0;
299     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[4] = 0;
300     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[5] = 0;
303     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[0]  = 'c';
304     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[1]  = '6';
305     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[2]  = '4';
306     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[3]  = '7';
307     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[4]  = '4';
308     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[5]  = 'l';
309     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[6]  = '-';
310     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[7]  = 'l';
311     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[8]  = 'e';
312     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[9]  = '.';
313     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[10] = 'b';
314     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[11] = 'i';
315     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[12] = 'n';
316     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[13] = '\0';
317     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
320     /* Even though the entire range of DDR2 is chosen, the load will
321      * stop when the ftp reaches the end of the file */
322     ibl.bootModes[0].u.ethBoot.blob.startAddress  = 0x80000000;       /* Base address of DDR2 */
323     ibl.bootModes[0].u.ethBoot.blob.sizeBytes     = 0x20000000;       /* All of DDR2 */
324     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
326     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
327     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
328     ibl.bootModes[1].port     = 0;
330     ibl.bootModes[1].u.nandBoot.bootFormat              = ibl_BOOT_FORMAT_BBLOB;
331     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x200000;         /* Image 0 NAND offset address (block 1) in LE mode */
332     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
333     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x200000;       /* Image 0 NAND offset address (block 1) in BE mode */
334     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
335     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_GPIO;
337     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
338     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
339     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
340     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
341     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
342     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
343     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
344     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
345     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
346     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
347     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
348     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
351     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
352     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 2048;
353     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 64;
354     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 64;
355     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 512;
357     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
358     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
359     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 22;
360     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 16;
361     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
363     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
364     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
365     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
366     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
367     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
368     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
369     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
370     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
371     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
372     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
374     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 0;
375     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
377     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
378     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0;
379     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0;
380     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = FALSE;
383     /* bootMode[2] not configured */
384     ibl.bootModes[2].bootMode = ibl_BOOT_MODE_NONE;
386     ibl.chkSum = 0;
388     return(ibl);
391 ibl_t c6457_ibl_config(void)
393     ibl_t ibl;
394     memset(&ibl, 0, sizeof(ibl_t));
396     ibl.iblMagic = ibl_MAGIC_VALUE;
397     ibl.iblEvmType = ibl_EVM_C6457L;
399     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
400     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
401     ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
402     ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 1;
403     ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
405     /* The DDR PLL. The multipliers/dividers are fixed, so are really dont cares */
406     ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
408     /* The network PLL. The multipliers/dividers are fixed */
409     ibl.pllConfig[ibl_NET_PLL].doEnable = TRUE;
411     /* EMIF configuration */
412     ibl.ddrConfig.configDdr = TRUE;
414     ibl.ddrConfig.uEmif.emif3p1.sdcfg  = 0x00d38a32; /* cas5, 8 banks, 10 bit column */
415     ibl.ddrConfig.uEmif.emif3p1.sdrfc  = 0x00000a0e; /* Refresh 333Mhz */
416     ibl.ddrConfig.uEmif.emif3p1.sdtim1 = 0x832474da; /* Timing 1 */
417     ibl.ddrConfig.uEmif.emif3p1.sdtim2 = 0x0144c742; /* Timing 2 */
418     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x001800C6;
420     /* SGMII 0 is present */
421     ibl.sgmiiConfig[0].configure = TRUE;
422     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
423     ibl.sgmiiConfig[0].control       = 0x20;
424     ibl.sgmiiConfig[0].txConfig      = 0x00000e21;
425     ibl.sgmiiConfig[0].rxConfig      = 0x00081021;
426     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
428     /* There is no port 1 on the 6457 */
429     ibl.sgmiiConfig[1].configure = FALSE;
431     /* MDIO configuration */
432     ibl.mdioConfig.nMdioOps = 5;
433     ibl.mdioConfig.mdioClkDiv = 0xa5;
434     ibl.mdioConfig.interDelay = 3000;   /* ~2ms at 1000 MHz */
436     ibl.mdioConfig.mdio[0] =  (1 << 30) | ( 4 << 21) | (27 << 16) | 0x0081;
437     ibl.mdioConfig.mdio[1] =  (1 << 30) | (26 << 21) | (14 << 16) | 0x0047;
438     ibl.mdioConfig.mdio[2] =  (1 << 30) | ( 0 << 21) | (14 << 16) | 0x8140;
439     ibl.mdioConfig.mdio[3] =  (1 << 30) | ( 1 << 21) | (22 << 16) | 0x043e;
440     ibl.mdioConfig.mdio[4] =  (1 << 30) | ( 0 << 21) | ( 1 << 16) | 0x9140;
442     /* spiConfig and emifConfig not needed */
444     /* Ethernet configuration for Boot mode 0 */
445     ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
446     ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
447     ibl.bootModes[0].port = 0;
449     /* Bootp is disabled. The server and file name are provided here */
450     ibl.bootModes[0].u.ethBoot.doBootp          = TRUE;
451     ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
452     ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
453     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
455     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
456     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
457     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
458     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.netmask,   255,255,255,0);
460     /* Set the hardware address as 0 so the e-fuse value will be used */
461     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[0] = 0;
462     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[1] = 0;
463     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[2] = 0;
464     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[3] = 0;
465     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[4] = 0;
466     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[5] = 0;
468     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[0]  = 'c';
469     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[1]  = '6';
470     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[2]  = '4';
471     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[3]  = '5';
472     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[4]  = '7';
473     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[5]  = '-';
474     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[6]  = 'l';
475     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[7]  = 'e';
476     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[8]  = '.';
477     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[9]  = 'b';
478     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[10] = 'i';
479     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[11] = 'n';
480     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[12] = '\0';
481     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[13] = '\0';
482     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
485     /* Even though the entire range of DDR2 is chosen, the load will
486      * stop when the ftp reaches the end of the file */
487     ibl.bootModes[0].u.ethBoot.blob.startAddress  = 0xe0000000;       /* Base address of DDR2 */
488     ibl.bootModes[0].u.ethBoot.blob.sizeBytes     = 0x20000000;       /* All of DDR2 */
489     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0xe0000000;       /* Base of DDR2 */
491     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
492     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
493     ibl.bootModes[1].port     = 0;
495     ibl.bootModes[1].u.nandBoot.bootFormat              = ibl_BOOT_FORMAT_BBLOB;
496     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x200000;         /* Image 0 NAND offset address (block 1) in LE mode */
497     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
498     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x200000;       /* Image 0 NAND offset address (block 1) in BE mode */
499     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
500     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_GPIO;
502     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0xe0000000;       /* Image 0 load start address in LE mode */
503     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
504     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0xe0000000;       /* Image 0 branch address after loading in LE mode */
505     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0xe0000000;       /* Image 1 load start address in LE mode */
506     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
507     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0xe0000000;       /* Image 1 branch address after loading in LE mode */
508     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0xe0000000;       /* Image 0 load start address in BE mode */
509     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
510     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0xe0000000;       /* Image 0 branch address after loading in BE mode */
511     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0xe0000000;       /* Image 1 load start address in BE mode */
512     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
513     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0xe0000000;       /* Image 1 branch address after loading in BE mode */
516     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
517     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 2048;
518     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 64;
519     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 64;
520     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 512;
522     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
523     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
524     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 22;
525     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 16;
526     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
528     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
529     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
530     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
531     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
532     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
533     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
534     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
535     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
536     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
537     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
539     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 0;
540     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
542     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
543     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0;
544     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0;
545     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = FALSE;
548     /* bootMode[2] not configured */
549     ibl.bootModes[2].bootMode = ibl_BOOT_MODE_NONE;
551     ibl.chkSum = 0;
553     return(ibl);
556 ibl_t c6472_ibl_config(void)
558     ibl_t ibl;
559     memset(&ibl, 0, sizeof(ibl_t));
561     ibl.iblMagic = ibl_MAGIC_VALUE;
562     ibl.iblEvmType = ibl_EVM_C6472L;
564     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
565     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
566     ibl.pllConfig[ibl_MAIN_PLL].mult          = 28;
567     ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 1;
568     ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 700;
570     /* The DDR PLL. The multipliers/dividers are fixed, so are really dont cares */
571     ibl.pllConfig[ibl_DDR_PLL].doEnable = TRUE;
573     /* The network PLL. The multipliers/dividers are fixed */
574     ibl.pllConfig[ibl_NET_PLL].doEnable = TRUE;
576     /* EMIF configuration. The values are for DDR at 533 MHz  */
577     ibl.ddrConfig.configDdr = TRUE;
579     ibl.ddrConfig.uEmif.emif3p1.sdcfg  = 0x00538832; /* timing, 32bit wide */
580     ibl.ddrConfig.uEmif.emif3p1.sdrfc  = 0x0000073B; /* Refresh 533Mhz */
581     ibl.ddrConfig.uEmif.emif3p1.sdtim1 = 0x47245BD2; /* Timing 1 */
582     ibl.ddrConfig.uEmif.emif3p1.sdtim2 = 0x0125DC44; /* Timing 2 */
583     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
585     /* SGMII not present */
586     ibl.sgmiiConfig[0].configure = FALSE;
587     ibl.sgmiiConfig[1].configure = FALSE;
589     /* MDIO configuration */
590     ibl.mdioConfig.nMdioOps = 8;
591     ibl.mdioConfig.mdioClkDiv = 0x20;
592     ibl.mdioConfig.interDelay = 1400;   /* ~2ms at 700 MHz */
594     ibl.mdioConfig.mdio[0] =  (1 << 30) | (27 << 21) | (24 << 16) | 0x848b;
595     ibl.mdioConfig.mdio[1] =  (1 << 30) | (20 << 21) | (24 << 16) | 0x0ce0;
596     ibl.mdioConfig.mdio[2] =  (1 << 30) | (24 << 21) | (24 << 16) | 0x4101;
597     ibl.mdioConfig.mdio[3] =  (1 << 30) | ( 0 << 21) | (24 << 16) | 0x9140;
599     ibl.mdioConfig.mdio[4] =  (1 << 30) | (27 << 21) | (25 << 16) | 0x848b;
600     ibl.mdioConfig.mdio[5] =  (1 << 30) | (20 << 21) | (25 << 16) | 0x0ce0;
601     ibl.mdioConfig.mdio[6] =  (1 << 30) | (24 << 21) | (25 << 16) | 0x4101;
602     ibl.mdioConfig.mdio[7] =  (1 << 30) | ( 0 << 21) | (25 << 16) | 0x9140;
604     /* spiConfig and emifConfig not needed */
606     /* Ethernet configuration for Boot mode 0 */
607     ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
608     ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
609     ibl.bootModes[0].port     = 0;
611     /* Bootp is disabled. The server and file name are provided here */
612     ibl.bootModes[0].u.ethBoot.doBootp          = TRUE;
613     ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
614     ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
615     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
617     /* Even though the entire range of DDR2 is chosen, the load will
618      * stop when the ftp reaches the end of the file */
619     ibl.bootModes[0].u.ethBoot.blob.startAddress  = 0xe0000000;       /* Base address of DDR2 */
620     ibl.bootModes[0].u.ethBoot.blob.sizeBytes     = 0x20000000;       /* All of DDR2 */
621     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0xe0000000;       /* Base of DDR2 */
623     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
624     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
625     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
626     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.netmask,   255,255,255,0);
628     /* Leave the hardware address as 0 so the e-fuse value will be used */
629     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[0] = 0;
630     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[1] = 0;
631     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[2] = 0;
632     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[3] = 0;
633     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[4] = 0;
634     ibl.bootModes[0].u.ethBoot.ethInfo.hwAddress[5] = 0;
636     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[0]  = 'c';
637     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[1]  = '6';
638     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[2]  = '4';
639     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[3]  = '7';
640     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[4]  = '2';
641     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[5]  = '-';
642     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[6]  = 'l';
643     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[7]  = 'e';
644     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[8]  = '.';
645     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[9]  = 'b';
646     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[10] = 'i';
647     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[11] = 'n';
648     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[12] = '\0';
649     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[13] = '\0';
650     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
652     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
653     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
654     ibl.bootModes[1].port     = 0;
656     ibl.bootModes[1].u.nandBoot.bootFormat              = ibl_BOOT_FORMAT_BBLOB;
657     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x200000;         /* Image 0 NAND offset address (block 1) in LE mode */
658     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
659     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x200000;       /* Image 0 NAND offset address (block 1) in BE mode */
660     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x4000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
661     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_GPIO;
663     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0xe0000000;       /* Image 0 load start address in LE mode */
664     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
665     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0xe0000000;       /* Image 0 branch address after loading in LE mode */
666     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0xe0000000;       /* Image 1 load start address in LE mode */
667     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
668     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0xe0000000;       /* Image 1 branch address after loading in LE mode */
669     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0xe0000000;       /* Image 0 load start address in BE mode */
670     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
671     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0xe0000000;       /* Image 0 branch address after loading in BE mode */
672     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0xe0000000;       /* Image 1 load start address in BE mode */
673     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
674     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0xe0000000;       /* Image 1 branch address after loading in BE mode */
677     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
678     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 2048;
679     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 64;
680     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 64;
681     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 512;
683     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
684     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
685     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 22;
686     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 16;
687     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
689     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
690     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
691     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
692     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
693     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
694     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
695     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
696     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
697     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
698     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
700     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 0;
701     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
703     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
704     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0;
705     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0;
706     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = FALSE;
708     /* bootMode[2] not configured */
709     ibl.bootModes[2].bootMode = ibl_BOOT_MODE_NONE;
711     ibl.chkSum = 0;
713     return(ibl);
716 ibl_t c6678_ibl_config(void)
718         ibl_t ibl;
719     memset(&ibl, 0, sizeof(ibl_t));
721         ibl.iblMagic = ibl_MAGIC_VALUE;
722         ibl.iblEvmType = ibl_EVM_C6678L;
724         /* Main PLL: 100 MHz reference, 1GHz output */
725         ibl.pllConfig[ibl_MAIN_PLL].doEnable      = 1;
726         ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
727         ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
728         ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 2;
729         ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
731         /* DDR PLL: */
732         ibl.pllConfig[ibl_DDR_PLL].doEnable       = 1;
733         ibl.pllConfig[ibl_DDR_PLL].prediv         = 1;
734         ibl.pllConfig[ibl_DDR_PLL].mult           = 20;
735         ibl.pllConfig[ibl_DDR_PLL].postdiv        = 2;
736         ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz  = 1333;
738     /* Net PLL: 100 MHz reference, 1050 MHz output (followed by a built in divide by 3 to give 350 MHz to PA) */
739         ibl.pllConfig[ibl_NET_PLL].doEnable       = 1;
740         ibl.pllConfig[ibl_NET_PLL].prediv         = 1;
741         ibl.pllConfig[ibl_NET_PLL].mult                   = 21;
742         ibl.pllConfig[ibl_NET_PLL].postdiv        = 2;
743         ibl.pllConfig[ibl_NET_PLL].pllOutFreqMhz  = 1050;
746         ibl.ddrConfig.configDdr = 1;
747         ibl.ddrConfig.uEmif.emif4p0.registerMask = ibl_EMIF4_ENABLE_sdRamConfig | ibl_EMIF4_ENABLE_sdRamRefreshCtl | ibl_EMIF4_ENABLE_sdRamTiming1 | ibl_EMIF4_ENABLE_sdRamTiming2 | ibl_EMIF4_ENABLE_sdRamTiming3 | ibl_EMIF4_ENABLE_ddrPhyCtl1;
749         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig                         = 0x63C452B2;
750         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig2                        = 0;
751         ibl.ddrConfig.uEmif.emif4p0.sdRamRefreshCtl                     = 0x000030D4;
752         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming1                        = 0x0AAAE51B;
753         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming2                        = 0x2A2F7FDA;
754         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming3                        = 0x057F82B8;
755         ibl.ddrConfig.uEmif.emif4p0.lpDdrNvmTiming                      = 0;
756         ibl.ddrConfig.uEmif.emif4p0.powerManageCtl                      = 0;
757         ibl.ddrConfig.uEmif.emif4p0.iODFTTestLogic                      = 0;
758         ibl.ddrConfig.uEmif.emif4p0.performCountCfg                     = 0;
759         ibl.ddrConfig.uEmif.emif4p0.performCountMstRegSel       = 0;
760         ibl.ddrConfig.uEmif.emif4p0.readIdleCtl                         = 0;
761         ibl.ddrConfig.uEmif.emif4p0.sysVbusmIntEnSet            = 0;
762         ibl.ddrConfig.uEmif.emif4p0.sdRamOutImpdedCalCfg        = 0;
763         ibl.ddrConfig.uEmif.emif4p0.tempAlterCfg                        = 0;
764         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl1                          = 0x0010010d;
765         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl2                          = 0;
766         ibl.ddrConfig.uEmif.emif4p0.priClassSvceMap                     = 0;
767         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce1Map           = 0;
768         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce2Map           = 0;
769         ibl.ddrConfig.uEmif.emif4p0.eccCtl                                      = 0;
770         ibl.ddrConfig.uEmif.emif4p0.eccRange1                           = 0;
771         ibl.ddrConfig.uEmif.emif4p0.eccRange2                           = 0;
772         ibl.ddrConfig.uEmif.emif4p0.rdWrtExcThresh                      = 0;
775         ibl.sgmiiConfig[0].configure     = 1;
776         ibl.sgmiiConfig[0].adviseAbility = 1;
777         ibl.sgmiiConfig[0].control               = 1;
778         ibl.sgmiiConfig[0].txConfig      = 0x108a1;
779         ibl.sgmiiConfig[0].rxConfig      = 0x700621;
780         ibl.sgmiiConfig[0].auxConfig     = 0x41;
782         ibl.sgmiiConfig[1].configure     = 1;
783         ibl.sgmiiConfig[1].adviseAbility = 1;
784         ibl.sgmiiConfig[1].control               = 1;
785         ibl.sgmiiConfig[1].txConfig      = 0x108a1;
786         ibl.sgmiiConfig[1].rxConfig      = 0x700621;
787         ibl.sgmiiConfig[1].auxConfig     = 0x41;
789         ibl.mdioConfig.nMdioOps = 0;
791         ibl.spiConfig.addrWidth  = 24;
792         ibl.spiConfig.nPins      = 5;
793         ibl.spiConfig.mode       = 1;
794         ibl.spiConfig.csel       = 2;
795         ibl.spiConfig.c2tdelay   = 1;
796         ibl.spiConfig.busFreqMHz = 20;
798         ibl.emifConfig[0].csSpace    = 2;
799         ibl.emifConfig[0].busWidth   = 8;
800         ibl.emifConfig[0].waitEnable = 0;
802         ibl.emifConfig[1].csSpace    = 0;
803         ibl.emifConfig[1].busWidth   = 0;
804         ibl.emifConfig[1].waitEnable = 0;
806         ibl.bootModes[0].bootMode = ibl_BOOT_MODE_NOR;
807         ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
808         ibl.bootModes[0].port     = 0;
810         ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
811         ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */
812         ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
813         ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */
814         ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
815         ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
816     ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
817     ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
818     ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
819     ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
820     ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
821     ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
822     ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
823     ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
824     ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
825     ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
826     ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
827     ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
829     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
830     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
831     ibl.bootModes[1].port     = 0;
833     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
834     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */
835     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
836     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x4000;         /* Image 0 NAND offset address (block 1) in BE mode */
837     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x2000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
838     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_CHIPSEL_2;
840     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
841     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xFFC000;         /* Image 0 size in LE mode */
842     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
843     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
844     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xFFC000;         /* Image 1 size in LE mode */
845     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
846     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
847     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xFFC000;         /* Image 0 size in BE mode */
848     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
849     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
850     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xFFC000;         /* Image 1 size in BE mode */
851     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
854     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
855     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 512;
856     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 16;
857     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 32;
858     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 4096;
860     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
861     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
862     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 14;
863     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 9;
864     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
866     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
867     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
868     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
869     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
870     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
871     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
872     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
873     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
874     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
875     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
877     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 5;
878     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
880     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
881     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0;
882     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0;
883     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = FALSE;
885         ibl.bootModes[2].bootMode = ibl_BOOT_MODE_TFTP;
886         ibl.bootModes[2].priority = ibl_HIGHEST_PRIORITY+1;
887         ibl.bootModes[2].port     = ibl_PORT_SWITCH_ALL;
889         ibl.bootModes[2].u.ethBoot.doBootp          = TRUE;
890         ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
891         ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
892         ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
895     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
896     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
897     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
898     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.netmask,   255,255,255,0);
900     /* Use the e-fuse value */
901     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[0] = 0;
902     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[1] = 0;
903     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[2] = 0;
904     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[3] = 0;
905     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[4] = 0;
906     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[5] = 0;
909     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[0]  = 'c';
910     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[1]  = '6';
911     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[2]  = '6';
912     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[3]  = '7';
913     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[4]  = '8';
914     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[5]  = '-';
915     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[6]  = 'l';
916     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[7]  = 'e';
917     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[8]  = '.';
918     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[9]  = 'b';
919     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[10] = 'i';
920     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[11] = 'n';
921     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[12] = '\0';
922     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
923     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
925     ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
926     ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0x20000000;
927     ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
929     ibl.chkSum = 0;
931     return(ibl);
934 ibl_t c6670_ibl_config(void)
936         ibl_t ibl;
937     memset(&ibl, 0, sizeof(ibl_t));
939         ibl.iblMagic = ibl_MAGIC_VALUE;
940         ibl.iblEvmType = ibl_EVM_C6670L;
942         /* Main PLL: 122.88 MHz reference, 983 MHz output */
943         ibl.pllConfig[ibl_MAIN_PLL].doEnable      = 1;
944         ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
945         ibl.pllConfig[ibl_MAIN_PLL].mult          = 16;
946         ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 2;
947         ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 983;
949         /* DDR PLL */
950         ibl.pllConfig[ibl_DDR_PLL].doEnable       = 1;
951         ibl.pllConfig[ibl_DDR_PLL].prediv         = 1;
952         ibl.pllConfig[ibl_DDR_PLL].mult           = 20;
953         ibl.pllConfig[ibl_DDR_PLL].postdiv        = 2;
954         ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz  = 1333;
956     /* Net PLL: 122.88 MHz reference, 1044 MHz output (followed by a built in divide by 3 to give 348 MHz to PA) */
957         ibl.pllConfig[ibl_NET_PLL].doEnable       = 1;
958         ibl.pllConfig[ibl_NET_PLL].prediv         = 1;
959         ibl.pllConfig[ibl_NET_PLL].mult           = 17;
960         ibl.pllConfig[ibl_NET_PLL].postdiv        = 2;
961         ibl.pllConfig[ibl_NET_PLL].pllOutFreqMhz  = 1044;
964         ibl.ddrConfig.configDdr = 1;
965         ibl.ddrConfig.uEmif.emif4p0.registerMask = ibl_EMIF4_ENABLE_sdRamConfig | ibl_EMIF4_ENABLE_sdRamRefreshCtl | ibl_EMIF4_ENABLE_sdRamTiming1 | ibl_EMIF4_ENABLE_sdRamTiming2 | ibl_EMIF4_ENABLE_sdRamTiming3 | ibl_EMIF4_ENABLE_ddrPhyCtl1;
967         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig                         = 0x63C452B2;
968         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig2                        = 0;
969         ibl.ddrConfig.uEmif.emif4p0.sdRamRefreshCtl                     = 0x000030D4;
970         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming1                        = 0x0AAAE51B;
971         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming2                        = 0x2A2F7FDA;
972         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming3                        = 0x057F82B8;
973         ibl.ddrConfig.uEmif.emif4p0.lpDdrNvmTiming                      = 0;
974         ibl.ddrConfig.uEmif.emif4p0.powerManageCtl                      = 0;
975         ibl.ddrConfig.uEmif.emif4p0.iODFTTestLogic                      = 0;
976         ibl.ddrConfig.uEmif.emif4p0.performCountCfg                     = 0;
977         ibl.ddrConfig.uEmif.emif4p0.performCountMstRegSel       = 0;
978         ibl.ddrConfig.uEmif.emif4p0.readIdleCtl                         = 0;
979         ibl.ddrConfig.uEmif.emif4p0.sysVbusmIntEnSet            = 0;
980         ibl.ddrConfig.uEmif.emif4p0.sdRamOutImpdedCalCfg        = 0;
981         ibl.ddrConfig.uEmif.emif4p0.tempAlterCfg                        = 0;
982         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl1                          = 0x0010010d;
983         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl2                          = 0;
984         ibl.ddrConfig.uEmif.emif4p0.priClassSvceMap                     = 0;
985         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce1Map           = 0;
986         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce2Map           = 0;
987         ibl.ddrConfig.uEmif.emif4p0.eccCtl                                      = 0;
988         ibl.ddrConfig.uEmif.emif4p0.eccRange1                           = 0;
989         ibl.ddrConfig.uEmif.emif4p0.eccRange2                           = 0;
990         ibl.ddrConfig.uEmif.emif4p0.rdWrtExcThresh                      = 0;
993         ibl.sgmiiConfig[0].configure     = 1;
994         ibl.sgmiiConfig[0].adviseAbility = 1;
995         ibl.sgmiiConfig[0].control               = 1;
996         ibl.sgmiiConfig[0].txConfig      = 0x108a1;
997         ibl.sgmiiConfig[0].rxConfig      = 0x700621;
998         ibl.sgmiiConfig[0].auxConfig     = 0x41;
1000         ibl.sgmiiConfig[1].configure     = 1;
1001         ibl.sgmiiConfig[1].adviseAbility = 1;
1002         ibl.sgmiiConfig[1].control               = 1;
1003         ibl.sgmiiConfig[1].txConfig      = 0x108a1;
1004         ibl.sgmiiConfig[1].rxConfig      = 0x700621;
1005         ibl.sgmiiConfig[1].auxConfig     = 0x51;
1007         ibl.mdioConfig.nMdioOps = 0;
1009         ibl.spiConfig.addrWidth  = 24;
1010         ibl.spiConfig.nPins      = 5;
1011         ibl.spiConfig.mode       = 1;
1012         ibl.spiConfig.csel       = 2;
1013         ibl.spiConfig.c2tdelay   = 1;
1014         ibl.spiConfig.busFreqMHz = 20;
1016         ibl.emifConfig[0].csSpace    = 2;
1017         ibl.emifConfig[0].busWidth   = 8;
1018         ibl.emifConfig[0].waitEnable = 0;
1020         ibl.emifConfig[1].csSpace    = 0;
1021         ibl.emifConfig[1].busWidth   = 0;
1022         ibl.emifConfig[1].waitEnable = 0;
1024         ibl.bootModes[0].bootMode = ibl_BOOT_MODE_NOR;
1025         ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
1026         ibl.bootModes[0].port     = 0;
1028         ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
1029         ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */
1030         ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
1031         ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */
1032         ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
1033         ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
1034     ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1035     ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
1036     ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1037     ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1038     ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
1039     ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1040     ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1041     ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
1042     ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1043     ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1044     ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
1045     ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1047     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
1048     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
1049     ibl.bootModes[1].port     = 0;
1051     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
1052     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */
1053     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
1054     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x4000;         /* Image 0 NAND offset address (block 1) in BE mode */
1055     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x2000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
1056     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_GPIO;
1058     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1059     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xFFC000;         /* Image 0 size in LE mode */
1060     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1061     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1062     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xFFC000;         /* Image 1 size in LE mode */
1063     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1064     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1065     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xFFC000;         /* Image 0 size mode */
1066     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1067     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1068     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xFFC000;         /* Image 1 size in BE mode */
1069     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1072     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
1073     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 512;
1074     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 16;
1075     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 32;
1076     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 4096;
1078     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
1079     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
1080     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 14;
1081     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 9;
1082     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
1084     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
1085     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
1086     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
1087     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
1088     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
1089     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
1090     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
1091     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
1092     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
1093     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
1095     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 5;
1096     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
1098     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
1099     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0;
1100     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0;
1101     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = FALSE;
1103         ibl.bootModes[2].bootMode = ibl_BOOT_MODE_TFTP;
1104         ibl.bootModes[2].priority = ibl_HIGHEST_PRIORITY+1;
1105         ibl.bootModes[2].port     = ibl_PORT_SWITCH_ALL;
1107         ibl.bootModes[2].u.ethBoot.doBootp          = TRUE;
1108         ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
1109         ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
1110         ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
1113     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
1114     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
1115     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
1116     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.netmask,   255,255,255,0);
1118     /* Use the e-fuse value */
1119     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[0] = 0;
1120     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[1] = 0;
1121     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[2] = 0;
1122     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[3] = 0;
1123     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[4] = 0;
1124     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[5] = 0;
1127     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[0]  = 'c';
1128     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[1]  = '6';
1129     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[2]  = '6';
1130     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[3]  = '7';
1131     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[4]  = '0';
1132     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[5]  = '-';
1133     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[6]  = 'l';
1134     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[7]  = 'e';
1135     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[8]  = '.';
1136     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[9]  = 'b';
1137     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[10] = 'i';
1138     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[11] = 'n';
1139     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[12] = '\0';
1140     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
1141     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
1143     ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
1144     ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0x20000000;
1145     ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
1147     ibl.chkSum = 0;
1149     return(ibl);
1151 ibl_t c6657_ibl_config(void)
1153         ibl_t ibl;
1154     memset(&ibl, 0, sizeof(ibl_t));
1156         ibl.iblMagic = ibl_MAGIC_VALUE;
1157         ibl.iblEvmType = ibl_EVM_C6657L;
1159         /* Main PLL: 100 MHz reference, 1GHz output */
1160         ibl.pllConfig[ibl_MAIN_PLL].doEnable      = 1;
1161         ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
1162         ibl.pllConfig[ibl_MAIN_PLL].mult          = 20;
1163         ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 2;
1164         ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 1000;
1166         /* DDR PLL: */
1167         ibl.pllConfig[ibl_DDR_PLL].doEnable       = 1;
1168         ibl.pllConfig[ibl_DDR_PLL].prediv         = 3;
1169         ibl.pllConfig[ibl_DDR_PLL].mult           = 40;
1170         ibl.pllConfig[ibl_DDR_PLL].postdiv        = 2;
1171         ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz  = 1333;
1173     /* Net PLL: 100 MHz reference, 1050 MHz output (followed by a built in divide by 3 to give 350 MHz to PA) */
1175         ibl.pllConfig[ibl_NET_PLL].doEnable       = 0;
1178         ibl.ddrConfig.configDdr = TRUE;
1179         ibl.ddrConfig.uEmif.emif4p0.registerMask = ibl_EMIF4_ENABLE_sdRamConfig | ibl_EMIF4_ENABLE_sdRamRefreshCtl | ibl_EMIF4_ENABLE_sdRamTiming1 | ibl_EMIF4_ENABLE_sdRamTiming2 | ibl_EMIF4_ENABLE_sdRamTiming3 | ibl_EMIF4_ENABLE_ddrPhyCtl1;
1181         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig                         = 0x62477AB2;
1182         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig2                        = 0;
1183         ibl.ddrConfig.uEmif.emif4p0.sdRamRefreshCtl                     = 0x000030D4;
1184         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming1                        = 0x1333780C;
1185         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming2                        = 0x30717FE3;
1186         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming3                        = 0x559F86AF;
1187         ibl.ddrConfig.uEmif.emif4p0.lpDdrNvmTiming                      = 0;
1188         ibl.ddrConfig.uEmif.emif4p0.powerManageCtl                      = 0;
1189         ibl.ddrConfig.uEmif.emif4p0.iODFTTestLogic                      = 0;
1190         ibl.ddrConfig.uEmif.emif4p0.performCountCfg                     = 0;
1191         ibl.ddrConfig.uEmif.emif4p0.performCountMstRegSel               = 0;
1192         ibl.ddrConfig.uEmif.emif4p0.readIdleCtl                         = 0;
1193         ibl.ddrConfig.uEmif.emif4p0.sysVbusmIntEnSet                    = 0;
1194         ibl.ddrConfig.uEmif.emif4p0.sdRamOutImpdedCalCfg                = 0;
1195         ibl.ddrConfig.uEmif.emif4p0.tempAlterCfg                        = 0;
1196         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl1                          = 0x0010010F;
1197         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl2                          = 0;
1198         ibl.ddrConfig.uEmif.emif4p0.priClassSvceMap                     = 0;
1199         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce1Map                   = 0;
1200         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce2Map                   = 0;
1201         ibl.ddrConfig.uEmif.emif4p0.eccCtl                              = 0;
1202         ibl.ddrConfig.uEmif.emif4p0.eccRange1                           = 0;
1203         ibl.ddrConfig.uEmif.emif4p0.eccRange2                           = 0;
1204         ibl.ddrConfig.uEmif.emif4p0.rdWrtExcThresh                      = 0;
1206         /* SGMII 0 is present */
1207         ibl.sgmiiConfig[0].configure     = 1;
1208         ibl.sgmiiConfig[0].adviseAbility = 1;
1209         ibl.sgmiiConfig[0].control       = 1;
1210         ibl.sgmiiConfig[0].txConfig      = 0x108a1;
1211         ibl.sgmiiConfig[0].rxConfig      = 0x700621;
1212         ibl.sgmiiConfig[0].auxConfig     = 0x51;
1214         /* There is no port 1 on the 6657 */
1215         ibl.sgmiiConfig[1].configure = FALSE;
1217         /* MDIO configuration */
1218         ibl.mdioConfig.nMdioOps = 0;
1219         ibl.mdioConfig.mdioClkDiv = 0xa5;
1220         ibl.mdioConfig.interDelay = 3000;   /* ~2ms at 1000 MHz */
1222         ibl.spiConfig.addrWidth  = 24;
1223         ibl.spiConfig.nPins      = 5;
1224         ibl.spiConfig.mode       = 1;
1225         ibl.spiConfig.csel       = 2;
1226         ibl.spiConfig.c2tdelay   = 1;
1227         ibl.spiConfig.busFreqMHz = 20;
1229         ibl.emifConfig[0].csSpace    = 2;
1230         ibl.emifConfig[0].busWidth   = 8;
1231         ibl.emifConfig[0].waitEnable = 0;
1233         ibl.emifConfig[1].csSpace    = 0;
1234         ibl.emifConfig[1].busWidth   = 0;
1235         ibl.emifConfig[1].waitEnable = 0;
1237         ibl.bootModes[0].bootMode = ibl_BOOT_MODE_NOR;
1238         ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
1239         ibl.bootModes[0].port     = 0;
1241         ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
1242         ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */
1243         ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
1244         ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */
1245         ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
1246         ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
1247     ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1248     ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
1249     ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1250     ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1251     ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
1252     ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1253     ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1254     ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
1255     ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1256     ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1257     ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
1258     ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1260     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
1261     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
1262     ibl.bootModes[1].port     = 0;
1264     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
1265     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x20000;         /* Image 0 NAND offset address (block 1) in LE mode */
1266     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x4000000;      /* Image 1 NAND offset address (block 512) in LE mode */
1267     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x20000;        /* Image 0 NAND offset address (block 1) in BE mode */
1268     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x4000000;      /* Image 1 NAND offset address (block 512) in BE mode */
1269     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_CHIPSEL_2;
1271     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1272     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xFFC000;         /* Image 0 size in LE mode */
1273     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1274     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1275     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xFFC000;         /* Image 1 size in LE mode */
1276     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1277     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1278     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xFFC000;         /* Image 0 size in BE mode */
1279     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1280     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1281     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xFFC000;         /* Image 1 size in BE mode */
1282     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1285     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
1286     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 2048;
1287     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 64;
1288     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 64;
1289     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 1024;
1291     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
1292     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
1293     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 22;
1294     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 16;
1295     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
1297     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
1298     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
1299     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
1300     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
1301     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
1302     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
1303     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
1304     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
1305     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
1306     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
1308     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 5;
1309     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
1311     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
1312     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0x00;
1313     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0x30;
1314     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = TRUE;
1317         ibl.bootModes[2].bootMode = ibl_BOOT_MODE_TFTP;
1318         ibl.bootModes[2].priority = ibl_HIGHEST_PRIORITY+1;
1319         ibl.bootModes[2].port     = 0;
1321         ibl.bootModes[2].u.ethBoot.doBootp          = TRUE;
1322         ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
1323         ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
1324         ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
1327     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
1328     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
1329     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
1330     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.netmask,   255,255,255,0);
1332     /* Use the e-fuse value */
1333     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[0] = 0;
1334     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[1] = 0;
1335     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[2] = 0;
1336     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[3] = 0;
1337     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[4] = 0;
1338     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[5] = 0;
1341     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[0]  = 'c';
1342     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[1]  = '6';
1343     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[2]  = '6';
1344     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[3]  = '5';
1345     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[4]  = '7';
1346     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[5]  = '-';
1347     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[6]  = 'l';
1348     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[7]  = 'e';
1349     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[8]  = '.';
1350     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[9]  = 'b';
1351     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[10] = 'i';
1352     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[11] = 'n';
1353     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[12] = '\0';
1354     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
1355     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
1357     ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
1358     ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0x20000000;
1359     ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
1361     ibl.chkSum = 0;
1363     return(ibl);
1366 ibl_t tci6634k2k_ibl_config(void)
1368        /* TBD: sync with gel */
1369         ibl_t ibl;
1370     memset(&ibl, 0, sizeof(ibl_t));
1372         ibl.iblMagic = ibl_MAGIC_VALUE;
1373         ibl.iblEvmType = ibl_EVM_TCI6634K2K;
1375         /* Main PLL: 122.88 MHz reference, 983 MHz output */
1376         ibl.pllConfig[ibl_MAIN_PLL].doEnable      = 1;
1377         ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
1378         ibl.pllConfig[ibl_MAIN_PLL].mult          = 16;
1379         ibl.pllConfig[ibl_MAIN_PLL].postdiv       = 2;
1380         ibl.pllConfig[ibl_MAIN_PLL].pllOutFreqMhz = 983;
1382         /* TBD: input freq 66.67MHz -> 100 MHz, DDR PLL */
1383         ibl.pllConfig[ibl_DDR_PLL].doEnable       = 1;
1384         ibl.pllConfig[ibl_DDR_PLL].prediv         = 1;
1385         ibl.pllConfig[ibl_DDR_PLL].mult           = 20;
1386         ibl.pllConfig[ibl_DDR_PLL].postdiv        = 2;
1387         ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz  = 1333;
1389     /* Net PLL: 122.88 MHz reference, 1044 MHz output (followed by a built in divide by 3 to give 348 MHz to PA) */
1390         ibl.pllConfig[ibl_NET_PLL].doEnable       = 1;
1391         ibl.pllConfig[ibl_NET_PLL].prediv         = 1;
1392         ibl.pllConfig[ibl_NET_PLL].mult           = 17;
1393         ibl.pllConfig[ibl_NET_PLL].postdiv        = 2;
1394         ibl.pllConfig[ibl_NET_PLL].pllOutFreqMhz  = 1044;
1397         ibl.ddrConfig.configDdr = 1;
1398         ibl.ddrConfig.uEmif.emif4p0.registerMask = ibl_EMIF4_ENABLE_sdRamConfig | ibl_EMIF4_ENABLE_sdRamRefreshCtl | ibl_EMIF4_ENABLE_sdRamTiming1 | ibl_EMIF4_ENABLE_sdRamTiming2 | ibl_EMIF4_ENABLE_sdRamTiming3 | ibl_EMIF4_ENABLE_ddrPhyCtl1;
1400         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig                         = 0x63C452B2;
1401         ibl.ddrConfig.uEmif.emif4p0.sdRamConfig2                        = 0;
1402         ibl.ddrConfig.uEmif.emif4p0.sdRamRefreshCtl                     = 0x000030D4;
1403         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming1                        = 0x0AAAE51B;
1404         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming2                        = 0x2A2F7FDA;
1405         ibl.ddrConfig.uEmif.emif4p0.sdRamTiming3                        = 0x057F82B8;
1406         ibl.ddrConfig.uEmif.emif4p0.lpDdrNvmTiming                      = 0;
1407         ibl.ddrConfig.uEmif.emif4p0.powerManageCtl                      = 0;
1408         ibl.ddrConfig.uEmif.emif4p0.iODFTTestLogic                      = 0;
1409         ibl.ddrConfig.uEmif.emif4p0.performCountCfg                     = 0;
1410         ibl.ddrConfig.uEmif.emif4p0.performCountMstRegSel       = 0;
1411         ibl.ddrConfig.uEmif.emif4p0.readIdleCtl                         = 0;
1412         ibl.ddrConfig.uEmif.emif4p0.sysVbusmIntEnSet            = 0;
1413         ibl.ddrConfig.uEmif.emif4p0.sdRamOutImpdedCalCfg        = 0;
1414         ibl.ddrConfig.uEmif.emif4p0.tempAlterCfg                        = 0;
1415         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl1                          = 0x0010010d;
1416         ibl.ddrConfig.uEmif.emif4p0.ddrPhyCtl2                          = 0;
1417         ibl.ddrConfig.uEmif.emif4p0.priClassSvceMap                     = 0;
1418         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce1Map           = 0;
1419         ibl.ddrConfig.uEmif.emif4p0.mstId2ClsSvce2Map           = 0;
1420         ibl.ddrConfig.uEmif.emif4p0.eccCtl                                      = 0;
1421         ibl.ddrConfig.uEmif.emif4p0.eccRange1                           = 0;
1422         ibl.ddrConfig.uEmif.emif4p0.eccRange2                           = 0;
1423         ibl.ddrConfig.uEmif.emif4p0.rdWrtExcThresh                      = 0;
1425         /* TBD: SERDES configurations ?? */
1426         ibl.sgmiiConfig[0].configure     = 1;
1427         ibl.sgmiiConfig[0].adviseAbility = 1;
1428         ibl.sgmiiConfig[0].control               = 1;
1429         ibl.sgmiiConfig[0].txConfig      = 0x108a1;
1430         ibl.sgmiiConfig[0].rxConfig      = 0x700621;
1431         ibl.sgmiiConfig[0].auxConfig     = 0x41;
1433         ibl.sgmiiConfig[1].configure     = 1;
1434         ibl.sgmiiConfig[1].adviseAbility = 1;
1435         ibl.sgmiiConfig[1].control               = 1;
1436         ibl.sgmiiConfig[1].txConfig      = 0x108a1;
1437         ibl.sgmiiConfig[1].rxConfig      = 0x700621;
1438         ibl.sgmiiConfig[1].auxConfig     = 0x51;
1440         ibl.mdioConfig.nMdioOps = 0;
1442         ibl.spiConfig.addrWidth  = 24;
1443         ibl.spiConfig.nPins      = 5;
1444         ibl.spiConfig.mode       = 1;
1445         ibl.spiConfig.csel       = 2;
1446         ibl.spiConfig.c2tdelay   = 1;
1447         ibl.spiConfig.busFreqMHz = 20;
1449         ibl.emifConfig[0].csSpace    = 2;
1450         ibl.emifConfig[0].busWidth   = 8;
1451         ibl.emifConfig[0].waitEnable = 0;
1453         ibl.emifConfig[1].csSpace    = 0;
1454         ibl.emifConfig[1].busWidth   = 0;
1455         ibl.emifConfig[1].waitEnable = 0;
1457         ibl.bootModes[0].bootMode = ibl_BOOT_MODE_NOR;
1458         ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
1459         ibl.bootModes[0].port     = 0;
1461         ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
1462         ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */
1463         ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
1464         ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */
1465         ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
1466         ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
1467     ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1468     ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
1469     ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1470     ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1471     ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
1472     ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1473     ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1474     ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
1475     ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1476     ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1477     ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
1478     ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1480     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
1481     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
1482     ibl.bootModes[1].port     = 0;
1484     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
1485     ibl.bootModes[1].u.nandBoot.bootAddress[0][0]         = 0x20000;         /* Image 0 NAND offset address (block 1) in LE mode */
1486     ibl.bootModes[1].u.nandBoot.bootAddress[0][1]         = 0x4000000;      /* Image 1 NAND offset address (block 512) in LE mode */
1487     ibl.bootModes[1].u.nandBoot.bootAddress[1][0]         = 0x20000;        /* Image 0 NAND offset address (block 1) in BE mode */
1488     ibl.bootModes[1].u.nandBoot.bootAddress[1][1]         = 0x4000000;      /* Image 1 NAND offset address (block 512) in BE mode */
1489     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_CHIPSEL_2;
1491     ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
1492     ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xFFC000;         /* Image 0 size in LE mode */
1493     ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
1494     ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x80000000;       /* Image 1 load start address in LE mode */
1495     ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xFFC000;         /* Image 1 size in LE mode */
1496     ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in LE mode */
1497     ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
1498     ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xFFC000;         /* Image 0 size in BE mode */
1499     ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
1500     ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x80000000;       /* Image 1 load start address in BE mode */
1501     ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xFFC000;         /* Image 1 size in BE mode */
1502     ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000;       /* Image 1 branch address after loading in BE mode */
1505     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
1506     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 2048;
1507     ibl.bootModes[1].u.nandBoot.nandInfo.pageEccBytes  = 64;
1508     ibl.bootModes[1].u.nandBoot.nandInfo.pagesPerBlock = 64;
1509     ibl.bootModes[1].u.nandBoot.nandInfo.totalBlocks   = 1024;
1511     ibl.bootModes[1].u.nandBoot.nandInfo.addressBytes  = 4;
1512     ibl.bootModes[1].u.nandBoot.nandInfo.lsbFirst      = TRUE;
1513     ibl.bootModes[1].u.nandBoot.nandInfo.blockOffset   = 22;
1514     ibl.bootModes[1].u.nandBoot.nandInfo.pageOffset    = 16;
1515     ibl.bootModes[1].u.nandBoot.nandInfo.columnOffset  = 0;
1517     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[0]  = 0;
1518     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[1]  = 1;
1519     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[2]  = 2;
1520     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[3]  = 3;
1521     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[4]  = 4;
1522     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[5]  = 6;
1523     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[6]  = 7;
1524     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[7]  = 13;
1525     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[8]  = 14;
1526     ibl.bootModes[1].u.nandBoot.nandInfo.eccBytesIdx[9]  = 15;
1528     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[0]= 5;
1529     ibl.bootModes[1].u.nandBoot.nandInfo.badBlkMarkIdx[1]= 0xff;
1531     ibl.bootModes[1].u.nandBoot.nandInfo.resetCommand    = 0xff;
1532     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPre  = 0x00;
1533     ibl.bootModes[1].u.nandBoot.nandInfo.readCommandPost = 0x30;
1534     ibl.bootModes[1].u.nandBoot.nandInfo.postCommand     = TRUE;
1537         ibl.bootModes[2].bootMode = ibl_BOOT_MODE_TFTP;
1538         ibl.bootModes[2].priority = ibl_HIGHEST_PRIORITY+1;
1539         ibl.bootModes[2].port     = ibl_PORT_SWITCH_ALL;
1541         ibl.bootModes[2].u.ethBoot.doBootp          = TRUE;
1542         ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
1543         ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
1544         ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
1547     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.ipAddr,    192,168,1,3);
1548     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.serverIp,  192,168,1,2);
1549     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.gatewayIp, 192,168,1,1);
1550     SETIP(ibl.bootModes[2].u.ethBoot.ethInfo.netmask,   255,255,255,0);
1552     /* Use the e-fuse value */
1553     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[0] = 0;
1554     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[1] = 0;
1555     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[2] = 0;
1556     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[3] = 0;
1557     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[4] = 0;
1558     ibl.bootModes[2].u.ethBoot.ethInfo.hwAddress[5] = 0;
1561     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[0]  = 'c';
1562     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[1]  = '6';
1563     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[2]  = '6';
1564     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[3]  = '3';
1565     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[4]  = '4';
1566     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[5]  = '-';
1567     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[6]  = 'l';
1568     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[7]  = 'e';
1569     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[8]  = '.';
1570     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[9]  = 'b';
1571     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[10] = 'i';
1572     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[11] = 'n';
1573     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[12] = '\0';
1574     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
1575     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
1577     ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
1578     ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0x20000000;
1579     ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
1581     ibl.chkSum = 0;
1583     return(ibl);