summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f7cab90)
raw | patch | inline | side by side (parent: f7cab90)
author | Mike Line <m-line1@ti.com> | |
Fri, 12 Nov 2010 20:51:47 +0000 (15:51 -0500) | ||
committer | Mike Line <m-line1@ti.com> | |
Fri, 12 Nov 2010 20:51:47 +0000 (15:51 -0500) |
The addition of ifdefs around the auto format detection code resulted in
a change in the structure of the if statement. This bug meant only ELF
could be detected, BIS and COFF would be detected and then the change
discarded. The code was restructured to fix this.
a change in the structure of the if statement. This bug meant only ELF
could be detected, BIS and COFF would be detected and then the change
discarded. The code was restructured to fix this.
diff --git a/src/ethboot/ethboot.c b/src/ethboot/ethboot.c
index e0f7548997a4a761416880edc32f51bc489d4a1e..a8fb492969b1268f75de32d948d6333a04043c7c 100644 (file)
--- a/src/ethboot/ethboot.c
+++ b/src/ethboot/ethboot.c
}
+
entry = iblBoot (&net_boot_module, format, &ibl.ethConfig[eIdx].blob);
diff --git a/src/ibl.h b/src/ibl.h
index 5574d05bf03ad3bb7448a75f8869c094e7152a61..5b0e0b9c62a6a153455f1af82042418f2bc2eb44 100644 (file)
--- a/src/ibl.h
+++ b/src/ibl.h
uint32 mapRetries; /**< Number of times the checksum failed on the read of the i2c map */
uint32 i2cDataRetries; /**< Number of retries while reading block data from the i2c */
- int32 tableLoadFail; /**< If non-zero then the load of the parameter table from i2c failed */
-
int32 heartBeat; /**< An increasing value as long as the boot code is running */
- int32 noMagic; /**< A non-zero value here indicates that @ref ibl_MAGIC_VALUE was not found
- in the @ref ibl_t magic field, and default values were loaded. */
+
int32 activePeriph; /**< Describes the active boot peripheral @ref iblActivePeriph */
int32 activeFormat; /**< Describes the format being decoded */
- int32 autoDetectFailCnt; /**< Counts the number of times an auto detect of the data format failed */
- int32 nameDetectFailCnt; /**< Counts the number of times an name detect of the data format failed */
+ uint32 autoDetectFailCnt; /**< Counts the number of times an auto detect of the data format failed */
+ uint32 nameDetectFailCnt; /**< Counts the number of times an name detect of the data format failed */
- int32 invalidDataFormatSpec; /**< Counts the number of times the main boot found an invalid boot format request */
+ uint32 invalidDataFormatSpec; /**< Counts the number of times the main boot found an invalid boot format request */
uint32 exitAddress; /**< If non-zero the IBL exited and branched to this address */
diff --git a/src/main/iblinit.c b/src/main/iblinit.c
index 3fee3f2ec1984dd2ccb13176deebadc2ceffa76a..a5986eb420ff933eb59f2c3d6cc1a9885a60ad21 100644 (file)
--- a/src/main/iblinit.c
+++ b/src/main/iblinit.c
iblI2cMap_t map;
memset (&iblStatus, 0, sizeof(iblStatus_t));
- iblStatus.iblMagic = ibl_MAGIC_VALUE;
+ iblStatus.iblMagic = ibl_MAGIC_VALUE;
+ iblStatus.activePeriph = ibl_ACTIVE_PERIPH_I2C;
/* Read the endianness setting of the device */
littleEndian = deviceIsLittleEndian();
diff --git a/src/main/iblmain.c b/src/main/iblmain.c
index 2bd7e484b530378675041553b02d454fe85d5d98..c734b02d2e85665eef23067621bdde8a30591990 100644 (file)
--- a/src/main/iblmain.c
+++ b/src/main/iblmain.c
#ifndef EXCLUDE_ETH
for (j = 0; j < ibl_N_ETH_PORTS; j++) {
- if (ibl.ethConfig[j].ethPriority == i)
- iblEthBoot (j);
+ if (ibl.ethConfig[j].ethPriority == i) {
+ iblStatus.activePeriph = ibl_ACTIVE_PERIPH_ETH;
+ memcpy (&iblStatus.ethParams, &ibl.ethConfig[j].ethInfo, sizeof (iblEthBootInfo_t));
+ iblEthBoot (j);
+ }
}
#endif
#ifndef EXCLUDE_NAND
- if (ibl.nandConfig.nandPriority == i)
+ if (ibl.nandConfig.nandPriority == i) {
+ iblStatus.activePeriph = ibl_ACTIVE_PERIPH_NAND;
iblNandBoot ();
+ }
#endif
iblStatus.heartBeat += 1;
*/
Uint32 iblBoot (BOOT_MODULE_FXN_TABLE *bootFxn, Int32 dataFormat, void *formatParams)
{
- Uint32 entry = 0;
-
- union {
-
- Uint8 dataBuf[4]; /* Place holder */
- Uint32 bisValue;
- Uint16 coffVer;
-
- } fid;
-
+ Uint32 entry = 0;
+ Uint32 value32;
+ Uint8 dataBuf[4];
+ Uint16 value16;
/* Determine the data format if required */
if (dataFormat == ibl_BOOT_FORMAT_AUTO) {
- (*bootFxn->peek)((Uint8 *)&fid, sizeof(fid));
+ (*bootFxn->peek)(dataBuf, sizeof(dataBuf));
+ value32 = (dataBuf[0] << 24) | (dataBuf[1] << 16) | (dataBuf[2] << 8) | (dataBuf[3] << 0);
+ value16 = (dataBuf[0] << 8) | (dataBuf[1] << 0);
/* BIS */
#ifndef EXCLUDE_BIS
- if (fid.bisValue == BIS_MAGIC_NUMBER)
+ if (value32 == BIS_MAGIC_NUMBER)
dataFormat = ibl_BOOT_FORMAT_BIS;
#endif
#ifndef EXCLUDE_COFF
- if (iblIsCoff (fid.coffVer))
+ if (iblIsCoff (value16))
dataFormat = ibl_BOOT_FORMAT_COFF;
#endif
#ifndef EXCLUDE_ELF
- if (iblIsElf (fid.dataBuf))
+ if (iblIsElf (dataBuf))
dataFormat = ibl_BOOT_FORMAT_ELF;
#endif
- else {
+ if (dataFormat == ibl_BOOT_FORMAT_AUTO) {
iblStatus.autoDetectFailCnt += 1;
return (0);
}
}
+ iblStatus.activeFormat = dataFormat;
+
+
/* Invoke the parser */
switch (dataFormat) {
diff --git a/src/make/Makefile b/src/make/Makefile
index c24fcd041b2052dad6a465b4279cb3744c22b8a5..b894e3e9598141510c63d8c7b860702cd472deac 100644 (file)
--- a/src/make/Makefile
+++ b/src/make/Makefile
#*
#* DESCRIPTION: Builds the Intermediate Boot Loader (IBL)
#*
-#* Usage: make c6455 | c6472 | c6474 | c6474l | c6457 [DEBUG=yes] [ETH=no] [NAND=no] \
+#* Usage: make c6455 | c6472 | c6474 | c6457 [DEBUG=yes] [ETH=no] [NAND=no] \
#* [BIS=no] [COFF=no] [BLOB=no] [ELF=no] [ENDIAN= both | big | little] [I2C_BUS_ADDR= 0x50 | 0x51] \
#* [COMPACT_I2C=yes]
#*
#*
#* or to test the builds by making all the devices and testing excludes
#*
-#* make test
+#* make test_build
#*******************************************************************************************
IBLS_C6X= c6455 c6472 c6474 c6474l c6457
# Test - builds all the targets, with single component exclusion
-test:
+test_build:
make -f makestg1 ARCH=c64x TARGET=c6455 I2C_BUS_ADDR=0x50 COMPACT_I2C=no ENDIAN_MODE=both EXCLUDES= c6455
make -f makestg1 ARCH=c64x TARGET=c6455 I2C_BUS_ADDR=0x50 COMPACT_I2C=no ENDIAN_MODE=both EXCLUDES=ETH c6455
make -f makestg1 ARCH=c64x TARGET=c6455 I2C_BUS_ADDR=0x50 COMPACT_I2C=no ENDIAN_MODE=both EXCLUDES=NAND c6455
index f663967b9084ea4d769eedf1c98721e51f75dc51..8c3c3d30ef24157e81758df18333efa62e4985d3 100644 (file)
MEMORY
{
- TEXT_INIT : origin = 0x800000, length = 0x2800
- TEXT : origin = 0x802800, length = 0xd800
+ TEXT_INIT : origin = 0x800000, length = 0x2900
+ TEXT : origin = 0x802900, length = 0xd700
STACK : origin = 0x810000, length = 0x0800
HEAP : origin = 0x810800, length = 0x6000
DATA_INIT : origin = 0x816800, length = 0x0200
index 744b2306bbe38b757a9182776bb22f3062c7d926..b0f3a7f910aa123f2bcbc059049e779f534c19f4 100644 (file)
ibl.ethConfig[0].doBootp = FALSE;\r
ibl.ethConfig[0].useBootpServerIp = FALSE;\r
ibl.ethConfig[0].useBootpFileName = FALSE;\r
- ibl.ethConfig[0].bootFormat = ibl_BOOT_FORMAT_BBLOB;\r
+ ibl.ethConfig[0].bootFormat = ibl_BOOT_FORMAT_AUTO;\r
\r
\r
SETIP(ibl.ethConfig[0].ethInfo.ipAddr, 10,218,109,21);\r
ibl.ethConfig[0].ethInfo.fileName[2] = 's';\r
ibl.ethConfig[0].ethInfo.fileName[3] = 't';\r
ibl.ethConfig[0].ethInfo.fileName[4] = '.';\r
- ibl.ethConfig[0].ethInfo.fileName[5] = 'b';\r
- ibl.ethConfig[0].ethInfo.fileName[6] = 'l';\r
- ibl.ethConfig[0].ethInfo.fileName[7] = 'o';\r
- ibl.ethConfig[0].ethInfo.fileName[8] = 'b';\r
+ ibl.ethConfig[0].ethInfo.fileName[5] = 'o';\r
+ ibl.ethConfig[0].ethInfo.fileName[6] = 'u';\r
+ ibl.ethConfig[0].ethInfo.fileName[7] = 't';\r
+ ibl.ethConfig[0].ethInfo.fileName[8] = '\0';\r
ibl.ethConfig[0].ethInfo.fileName[9] = '\0';\r
ibl.ethConfig[0].ethInfo.fileName[10] = '\0';\r
ibl.ethConfig[0].ethInfo.fileName[11] = '\0';\r
ibl.ethConfig[1].doBootp = TRUE;\r
ibl.ethConfig[1].useBootpServerIp = TRUE;\r
ibl.ethConfig[1].useBootpFileName = TRUE;\r
- ibl.ethConfig[1].bootFormat = ibl_BOOT_FORMAT_BBLOB;\r
+ ibl.ethConfig[1].bootFormat = ibl_BOOT_FORMAT_AUTO;\r
\r
\r
/* SGMII not present */\r
/* Nand boot is disabled */\r
ibl.nandConfig.nandPriority = ibl_DEVICE_NOBOOT;\r
\r
+ ibl.nandConfig.bootFormat = ibl_BOOT_FORMAT_AUTO;\r
+\r
+ ibl.nandConfig.nandInfo.busWidthBits = 8;\r
+ ibl.nandConfig.nandInfo.pageSizeBytes = 2048;\r
+ ibl.nandConfig.nandInfo.pageEccBytes = 64;\r
+ ibl.nandConfig.nandInfo.pagesPerBlock = 64;\r
+ ibl.nandConfig.nandInfo.totalBlocks = 1024;\r
+\r
+ ibl.nandConfig.nandInfo.addressBytes = 4;\r
+ ibl.nandConfig.nandInfo.lsbFirst = TRUE;\r
+ ibl.nandConfig.nandInfo.blockOffset = 22;\r
+ ibl.nandConfig.nandInfo.pageOffset = 16;\r
+ ibl.nandConfig.nandInfo.columnOffset = 0;\r
+\r
+ ibl.nandConfig.nandInfo.resetCommand = 0xff;\r
+ ibl.nandConfig.nandInfo.readCommandPre = 0;\r
+ ibl.nandConfig.nandInfo.readCommandPost = 0x30;\r
+ ibl.nandConfig.nandInfo.postCommand = TRUE;\r
+\r
}\r
\r
\r