diff --git a/src/main/iblinit.c b/src/main/iblinit.c
index 46b48fe67bbb7cb543bf7689815d70bc87bd0b49..18d23c2403f46ed5725ede85765b6c74367d1cd2 100644 (file)
--- a/src/main/iblinit.c
+++ b/src/main/iblinit.c
*/
void iblSwap (void)
{
- int i;
+ int i, j, k;
ibl.iblMagic = swap32val (ibl.iblMagic);
for (i = 0; i < ibl_N_ETH_PORTS; i++) {
- ibl.sgmiiConfig[i].configure = swap32val(ibl.sgmiiConfig[i].configure);
+ ibl.sgmiiConfig[i].configure = swap16val(ibl.sgmiiConfig[i].configure);
ibl.sgmiiConfig[i].adviseAbility = swap32val(ibl.sgmiiConfig[i].adviseAbility);
ibl.sgmiiConfig[i].control = swap32val(ibl.sgmiiConfig[i].control);
ibl.sgmiiConfig[i].txConfig = swap32val(ibl.sgmiiConfig[i].txConfig);
for (i = 0; i < ibl_MAX_EMIF_PMEM; i++) {
ibl.emifConfig[i].csSpace = swap16val(ibl.emifConfig[i].csSpace);
ibl.emifConfig[i].busWidth = swap16val(ibl.emifConfig[i].busWidth);
- ibl.emifConfig[i].waitEnable = swap32val(ibl.emifConfig[i].waitEnable);
+ ibl.emifConfig[i].waitEnable = swap16val(ibl.emifConfig[i].waitEnable);
}
ibl.bootModes[i].port = swap32val(ibl.bootModes[i].port);
if (ibl.bootModes[i].bootMode == ibl_BOOT_MODE_TFTP) {
- ibl.bootModes[i].u.ethBoot.doBootp = swap32val(ibl.bootModes[i].u.ethBoot.doBootp);
- ibl.bootModes[i].u.ethBoot.useBootpServerIp = swap32val(ibl.bootModes[i].u.ethBoot.useBootpServerIp);
- ibl.bootModes[i].u.ethBoot.useBootpFileName = swap32val(ibl.bootModes[i].u.ethBoot.useBootpFileName);
+ ibl.bootModes[i].u.ethBoot.doBootp = swap16val(ibl.bootModes[i].u.ethBoot.doBootp);
+ ibl.bootModes[i].u.ethBoot.useBootpServerIp = swap16val(ibl.bootModes[i].u.ethBoot.useBootpServerIp);
+ ibl.bootModes[i].u.ethBoot.useBootpFileName = swap16val(ibl.bootModes[i].u.ethBoot.useBootpFileName);
ibl.bootModes[i].u.ethBoot.bootFormat = swap32val(ibl.bootModes[i].u.ethBoot.bootFormat);
ibl.bootModes[i].u.ethBoot.blob.startAddress = swap32val(ibl.bootModes[i].u.ethBoot.blob.startAddress);
ibl.bootModes[i].u.ethBoot.blob.sizeBytes = swap32val(ibl.bootModes[i].u.ethBoot.blob.sizeBytes);
} else if (ibl.bootModes[i].bootMode == ibl_BOOT_MODE_NAND) {
ibl.bootModes[i].u.nandBoot.bootFormat = swap32val(ibl.bootModes[i].u.nandBoot.bootFormat);
- ibl.bootModes[i].u.nandBoot.bootAddress = swap32val(ibl.bootModes[i].u.nandBoot.bootAddress);
+ for (j = 0; j < ibl_N_ENDIANS; j++)
+ {
+ for (k = 0; k < ibl_N_IMAGES; k++)
+ {
+ ibl.bootModes[i].u.nandBoot.bootAddress[j][k] = swap32val(ibl.bootModes[i].u.nandBoot.bootAddress[j][k]);
+ }
+ }
ibl.bootModes[i].u.nandBoot.interface = swap32val(ibl.bootModes[i].u.nandBoot.interface);
- ibl.bootModes[i].u.nandBoot.blob.startAddress = swap32val(ibl.bootModes[i].u.nandBoot.blob.startAddress);
- ibl.bootModes[i].u.nandBoot.blob.sizeBytes = swap32val(ibl.bootModes[i].u.nandBoot.blob.sizeBytes);
- ibl.bootModes[i].u.nandBoot.blob.branchAddress = swap32val(ibl.bootModes[i].u.nandBoot.blob.branchAddress);
+ for (j = 0; j < ibl_N_ENDIANS; j++)
+ {
+ for (k = 0; k < ibl_N_IMAGES; k++)
+ {
+ ibl.bootModes[i].u.nandBoot.blob[j][k].startAddress = swap32val(ibl.bootModes[i].u.nandBoot.blob[j][k].startAddress);
+ ibl.bootModes[i].u.nandBoot.blob[j][k].sizeBytes = swap32val(ibl.bootModes[i].u.nandBoot.blob[j][k].sizeBytes);
+ ibl.bootModes[i].u.nandBoot.blob[j][k].branchAddress = swap32val(ibl.bootModes[i].u.nandBoot.blob[j][k].branchAddress);
+ }
+ }
ibl.bootModes[i].u.nandBoot.nandInfo.busWidthBits = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.busWidthBits);
ibl.bootModes[i].u.nandBoot.nandInfo.pageSizeBytes = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.pageSizeBytes);
ibl.bootModes[i].u.nandBoot.nandInfo.pageEccBytes = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.pageEccBytes);
ibl.bootModes[i].u.nandBoot.nandInfo.pagesPerBlock = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.pagesPerBlock);
ibl.bootModes[i].u.nandBoot.nandInfo.totalBlocks = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.totalBlocks);
ibl.bootModes[i].u.nandBoot.nandInfo.addressBytes = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.addressBytes);
- ibl.bootModes[i].u.nandBoot.nandInfo.lsbFirst = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.lsbFirst);
+ ibl.bootModes[i].u.nandBoot.nandInfo.lsbFirst = swap16val(ibl.bootModes[i].u.nandBoot.nandInfo.lsbFirst);
ibl.bootModes[i].u.nandBoot.nandInfo.blockOffset = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.blockOffset);
ibl.bootModes[i].u.nandBoot.nandInfo.pageOffset = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.pageOffset);
ibl.bootModes[i].u.nandBoot.nandInfo.columnOffset = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.columnOffset);
- ibl.bootModes[i].u.nandBoot.nandInfo.postCommand = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.postCommand);
-
+ ibl.bootModes[i].u.nandBoot.nandInfo.postCommand = swap16val(ibl.bootModes[i].u.nandBoot.nandInfo.postCommand);
} else if (ibl.bootModes[i].bootMode == ibl_BOOT_MODE_NOR) {
ibl.bootModes[i].u.norBoot.bootFormat = swap32val(ibl.bootModes[i].u.norBoot.bootFormat);
- ibl.bootModes[i].u.norBoot.bootAddress = swap32val(ibl.bootModes[i].u.norBoot.bootAddress);
+ for (j = 0; j < ibl_N_ENDIANS; j++)
+ {
+ for (k = 0; k < ibl_N_IMAGES; k++)
+ {
+ ibl.bootModes[i].u.norBoot.bootAddress[j][k] = swap32val(ibl.bootModes[i].u.norBoot.bootAddress[j][k]);
+ }
+ }
ibl.bootModes[i].u.norBoot.interface = swap32val(ibl.bootModes[i].u.norBoot.interface);
- ibl.bootModes[i].u.norBoot.blob.startAddress = swap32val(ibl.bootModes[i].u.norBoot.blob.startAddress);
- ibl.bootModes[i].u.norBoot.blob.sizeBytes = swap32val(ibl.bootModes[i].u.norBoot.blob.sizeBytes);
- ibl.bootModes[i].u.norBoot.blob.branchAddress = swap32val(ibl.bootModes[i].u.norBoot.blob.branchAddress);
+ for (j = 0; j < ibl_N_ENDIANS; j++)
+ {
+ for (k = 0; k < ibl_N_IMAGES; k++)
+ {
+ ibl.bootModes[i].u.norBoot.blob[j][k].startAddress = swap32val(ibl.bootModes[i].u.norBoot.blob[j][k].startAddress);
+ ibl.bootModes[i].u.norBoot.blob[j][k].sizeBytes = swap32val(ibl.bootModes[i].u.norBoot.blob[j][k].sizeBytes);
+ ibl.bootModes[i].u.norBoot.blob[j][k].branchAddress = swap32val(ibl.bootModes[i].u.norBoot.blob[j][k].branchAddress);
+ }
+ }
}
}
+ ibl.iblEvmType = swap16val (ibl.iblEvmType);
ibl.chkSum = swap16val (ibl.chkSum);
}
/* Pll configuration is device specific */
devicePllConfig ();
+ /* Enable the EDC for local memory */
+ if (IBL_ENABLE_EDC)
+ {
+ iblEnableEDC ();
+ }
+
+ /* Check if need to enter Rom boot loader again */
+ if (IBL_ENTER_ROM)
+ {
+ iblEnterRom ();
+ }
/* Pass control to the boot table processor */
iblBootBtbl (bFxnTbl, &entry);