Added support for NOR/EMAC boot for C6670
authorHao Zhang <hzhang@ti.com>
Mon, 9 May 2011 14:57:58 +0000 (10:57 -0400)
committerBill Mills <wmills@ti.com>
Mon, 9 May 2011 17:07:06 +0000 (13:07 -0400)
14 files changed:
doc/release_info.txt
src/driver/nand/nand.c
src/ibl.h
src/main/iblinit.c
src/main/iblmain.c
src/make/Makefile
src/make/ibl_c661x/i2crom.map.pre
src/make/ibl_c661x/ibl_common.inc
src/make/makestg1
src/make/makestg2
src/make/setupenv.bat
src/make/setupenvMsys.sh [new file with mode: 0644]
src/util/i2cConfig/i2cConfig.gel
src/util/i2cConfig/i2cparam.c

index 5cb8cca2a2ac7595c04fb24ad0cc00f80c052029..f1a663bdd8063cfcca2453fb2cbcb0afe92967ee 100644 (file)
@@ -1,7 +1,7 @@
 =====================================================
 C6x Bootloader Release Note
-Version: 1.0.0.1
-March 2011
+Version: 1.0.0.4
+May 2011
 =====================================================
 
 1) Supported TARGETS:
@@ -16,16 +16,17 @@ March 2011
 
 3) Required toolset
     - TI CGEN compiler CGT_C6000_7.2.0
-NOTE: TI CGEN compiler CGT_C6000_6.1.12 has to be used for building IBL with
-ENDIAN mode "both".
  
 4) Build Instructions
 
     - Change directory to ibl\src\make
-    - Modify the setupenv.bat or setupenvLnx.sh script to match the tool environment
-    - Set the environment by running "setupenv.bat" or "source setupenvLnx.sh"
+    - Modify the environment setup script to match the tool chain installation
+      directory:
+        For building in MINGW-MSYS Bash shell modify setupenvMsys.sh 
+        For building in Linux Bash shell modify setupenvLnx.sh 
+    - Set the environment by running "setupenv.bat" or "source setupenvMsys.sh"
     - For building run:
-        make evm_c6678_i2c ENDIAN=little I2C_BUS_ADDR=0x51
+        make evm_c667x_i2c ENDIAN=little I2C_BUS_ADDR=0x51 INTERNAL_UTILS=no
       or:
         make <TARGET>  ENDIAN=[little|big]
         make c6455 ENDIAN=liitle
index 1261694f9eb4eb007bdb647305f834b5a061c16f..19a2399f3efc785ab800bc45834c2c0764e019da 100644 (file)
@@ -180,7 +180,7 @@ Int32 nand_open (void *ptr_driver, void (*asyncComplete)(void *))
     
     Int32 size;
     Int32 ret;
-    Int32 i, j;
+    Int32 i, j, startBlock;
     Bool  badBlock;
 
     /* Initialize the control info */
@@ -251,7 +251,8 @@ Int32 nand_open (void *ptr_driver, void (*asyncComplete)(void *))
         return (-1);
 
     nandmcb.numBadBlocks = 0;
-    for (i = 0; i < nandmcb.devInfo.totalBlocks; i++)  {
+    startBlock = ibln->bootAddress[iblEndianIdx][iblImageIdx]/(nandmcb.devInfo.pageSizeBytes*nandmcb.devInfo.pagesPerBlock);
+    for (i = startBlock; i < nandmcb.devInfo.totalBlocks; i++)  {
 
         badBlock = FALSE;
         for (j = 0; j < ibl_N_BAD_BLOCK_PAGE; j++)
@@ -287,13 +288,13 @@ Int32 nand_open (void *ptr_driver, void (*asyncComplete)(void *))
     
 
     /* Construct the logical to physical block array */  
-    for (i = j = 0; i < nandmcb.devInfo.totalBlocks; i++)  {
+    for (i = j = startBlock; i < nandmcb.devInfo.totalBlocks; i++)  {
         if (nandmcb.blocks[i] != 0xff)
             nandmcb.logicalToPhysMap[j++] = i;
     }
 
     /* Construct the physical to logical block array */
-    for (i = j = 0; i < nandmcb.devInfo.totalBlocks; i++)  {
+    for (i = j = startBlock; i < nandmcb.devInfo.totalBlocks; i++)  {
         if (nandmcb.blocks[i] == 0xff)
             nandmcb.physToLogicalMap[i] = 0xff;
         else
index db52cce2cb12da2396a684931d34ffad55bfb1e7..73da665144ab779dea67f1ad33c000340761727c 100644 (file)
--- a/src/ibl.h
+++ b/src/ibl.h
@@ -65,9 +65,9 @@
 
 /**
  * @brief
- *  The version number, 1.0.0.3
+ *  The version number, 1.0.0.4
  */
-#define ibl_VERSION  ibl_MAKE_VERSION(1,0,0,3)
+#define ibl_VERSION  ibl_MAKE_VERSION(1,0,0,4)
 
 
 /**
@@ -130,7 +130,7 @@ typedef struct iblEthBootInfo_s
     uint8   gatewayIp[4];   /**< The IP address of the gateway */
     uint8   netmask[4];     /**< The IP netmask */
     uint8   hwAddress[6];   /**< The hardware (mac) address of this device */
-    char8   fileName[128];  /**< The file name to load */
+    char8   fileName[64];  /**< The file name to load */
 
 } iblEthBootInfo_t;
 
@@ -698,6 +698,7 @@ typedef struct iblBoot_s
 #define ibl_EVM_C6457L  0x20   /**< C6457 Low Cost EVM */
 #define ibl_EVM_C6472L  0x30   /**< C6472 Low Cost EVM */
 #define ibl_EVM_C6474L  0x40   /**< C6474 Low Cost EVM */
+#define ibl_EVM_C6474M  0x41   /**< C6474 Mez EVM */
 #define ibl_EVM_C6670L  0x50   /**< C6670 Low Cost EVM */
 #define ibl_EVM_C6678L  0x60   /**< C6678 Low Cost EVM */
 
@@ -735,7 +736,7 @@ typedef struct ibl_s
 
     iblBoot_t  bootModes[ibl_N_BOOT_MODES];   /**< Boot configuration */
 
-    uint16     iblEvmType;                    /**< @ref ibl_MAGIC_VALUE */
+    uint16     iblEvmType;                    /**< @ref ibl_EVM_TYPE */
 
     uint16     chkSum;                        /**< Ones complement checksum over the whole config structure */
 
index ffd62f5f6275b7106ea4773159cec1a31f5b5758..065ba993d1e2a59e81eb797f81d8d350f85b0713 100644 (file)
@@ -315,15 +315,7 @@ void iblSwap (void)
             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);
-            /*for (j = 0; j < ibl_N_ECC_BYTES; j++)
-            {
-                ibl.bootModes[i].u.nandBoot.nandInfo.eccBytesIdx[j] = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.eccBytesIdx[j]);
-            }
-            for (j = 0; j < ibl_N_BAD_BLOCK_PAGE; j++)
-            {
-                ibl.bootModes[i].u.nandBoot.nandInfo.badBlkMarkIdx[j] = swap32val(ibl.bootModes[i].u.nandBoot.nandInfo.badBlkMarkIdx[j]);
-            }
-            ibl.bootModes[i].u.nandBoot.nandInfo.postCommand      = swap16val(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);
             for (j = 0; j < ibl_N_ENDIANS; j++)
index f0d1dd010fe031bcc3d1ed268c78a04bb62981e6..6cd57996e3965de4f10db7fcb089de19b123c0e5 100644 (file)
@@ -311,7 +311,6 @@ void main (void)
             iblImageIdx == boot_para_idx & (ibl_N_IMAGES - 1);
 
             iblStatus.activeBoot = ibl.bootModes[boot_mode_idx].bootMode;
-#endif
 
             switch (ibl.bootModes[boot_mode_idx].bootMode)  
             {
@@ -341,6 +340,7 @@ void main (void)
             iblStatus.heartBeat += 1;
         }
         else
+#endif
         {
             
            /* For C64x devices, loop through the boot modes to find the one with the highest priority
index 6432efdce7c053b55ec0099fd67cd61fd62901df..3a498fdc3c0660700d7a1b7b9f0f2708ee4f8db8 100644 (file)
@@ -57,6 +57,7 @@
 #*                     [SPI=no]                                                        /* Disables SPI */
 #*                     [I2C=no]                                                        /* Disables I2C */
 #*                     [EMIF=no]                                                       /* Disables EMIF */
+#*                     [MULTI_BOOT=no]                                         /* Disables Multi-boot feature */
 #*                     [SPI_MODE=<0,1,2,3>]                            /* Selects the SPI operating mode */
 #*                     [SPI_ADDR_WIDTH=<16,24>]                        /* Selects the SPI address width */
 #*                     [SPI_NPIN=<4,5>]                                        /* Selects the number of pins on the interface */
@@ -178,6 +179,10 @@ ifeq ($(EMIF),no)
 
 endif
 
+ifeq ($(MULTI_BOOT),no)
+  CEXCLUDES+= MULTI_BOOT
+endif
+
 # The endian of the build. The default target builds a single ROM image with both endians present
 ifeq ($(ENDIAN),big)
  ENDIAN_MODE=big
@@ -265,30 +270,30 @@ $(IBLS_C6X):
 # Configurations for individual evms
 # The c6455 EVM has a 128k eeprom (64k at 0x50, 64k at 0x51), so both endians are built with full functionality
 evm_c6455:
-       make -f makestg1 ARCH=c64x TARGET=c6455 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=$(I2C_MAP_ADDR) COMPACT_I2C=no ENDIAN_MODE=both CEXCLUDES= c6455
+       make -f makestg1 ARCH=c64x TARGET=c6455 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=$(I2C_MAP_ADDR) COMPACT_I2C=no ENDIAN_MODE=both CEXCLUDES='MULTI_BOOT' c6455
 
 # The c6472 EVM has a 128k eeprom (64k at 0x50, 64k at 0x51), so both endians are built with full functionality
 evm_c6472:
-       make -f makestg1 ARCH=c64x TARGET=c6472 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=$(I2C_MAP_ADDR) COMPACT_I2C=no ENDIAN_MODE=both CEXCLUDES= c6472
+       make -f makestg1 ARCH=c64x TARGET=c6472 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=$(I2C_MAP_ADDR) COMPACT_I2C=no ENDIAN_MODE=both CEXCLUDES='MULTI_BOOT' c6472
 
 # The 6474 EVM has a 32k eeprom. A stripped down version is build with only one endian.
 evm_c6474:
-       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS' I2C_SIZE_BYTES=0x8000 c6474
+       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' I2C_SIZE_BYTES=0x8000 c6474
        cp ibl_c6474/i2crom.dat ibl_c6474/i2crom_0x50_c6474_le.dat
-       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS' I2C_SIZE_BYTES=0x8000 c6474
+       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' I2C_SIZE_BYTES=0x8000 c6474
        cp ibl_c6474/i2crom.dat ibl_c6474/i2crom_0x50_c6474_be.dat
 
 evm_c6474l:
-       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS' c6474
+       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' c6474
        cp ibl_c6474/i2crom.dat ibl_c6474/i2crom_0x50_c6474l_le.dat
-       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS' c6474
+       make -f makestg1 ARCH=c64x TARGET=c6474 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' c6474
        cp ibl_c6474/i2crom.dat ibl_c6474/i2crom_0x50_c6474l_be.dat
 
 # The 6457 EVM
 evm_c6457:
-       make -f makestg1 ARCH=c64x TARGET=c6457 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS' c6457
+       make -f makestg1 ARCH=c64x TARGET=c6457 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=little CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' c6457
        cp ibl_c6457/i2crom.dat ibl_c6457/i2crom_0x50_c6457_le.dat
-       make -f makestg1 ARCH=c64x TARGET=c6457 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS' c6457
+       make -f makestg1 ARCH=c64x TARGET=c6457 I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=0x200 COMPACT_I2C=yes ENDIAN_MODE=big CEXCLUDES='ELF NAND_GPIO BIS MULTI_BOOT' c6457
        cp ibl_c6457/i2crom.dat ibl_c6457/i2crom_0x50_c6457_be.dat
 
 # The 6608 EVM
@@ -304,7 +309,7 @@ evm_c667x_spi:
        make -f makestg1 ARCH=c64x TARGET=c661x I2C=no I2C_BUS_ADDR=0x51 I2C_MAP_ADDR=0x500 ENDIAN_MODE=little CEXCLUDES=I2C SPI_DEFS='$(EVM_667x_SPI_DEFS)' c661x
 
 evm_c667x_i2c:
-       make -f makestg1 I2C_BUS_ADDR=$(I2C_BUS_ADDR) I2C_MAP_ADDR=$(I2C_MAP_ADDR) ENDIAN_MODE=$(ENDIAN) ARCH=c64x TARGET=c661x SPI=no SPI_DEFS='$(EVM_667x_SPI_DEFS)' c661x
+       make -f makestg1 I2C_BUS_ADDR=$(I2C_BUS_ADDR) I2C_MAP_ADDR=$(I2C_MAP_ADDR) ENDIAN_MODE=$(ENDIAN) ARCH=c64x TARGET=c661x SPI=no INTERNAL_UTILS=no SPI_DEFS='$(EVM_667x_SPI_DEFS)' c661x
 
 test_c661x:
        make -f makestg1 ARCH=c64x TARGET=c661x ENDIAN_MODE=both CEXCLUDES='NOR_SPI' SPI_DEFS='SPI_ROM=1 SPI_MODE=3 SPI_ADDR_WIDTH=24 SPI_NPIN=5 SPI_CSEL=2 SPI_C2TDEL=8 SPI_CLKDIV=0x20' I2C_BUS_ADDR=0x50 I2C_MAP_ADDR=$(I2C_MAP_ADDR) COMPACT_I2C=no c661x
@@ -372,11 +377,6 @@ clean:
        make -C ../util/i2cConfig      clean    ARCH=c64x TARGET=c6474
        make -C ../util/i2cConfig      clean    ARCH=c64x TARGET=c6457
        make -C ../util/i2cConfig      clean    ARCH=c64x TARGET=c661x
-       make -C ../util/nandwriter     clean    ARCH=c64x TARGET=c6455
-       make -C ../util/nandwriter     clean    ARCH=c64x TARGET=c6472
-       make -C ../util/nandwriter     clean    ARCH=c64x TARGET=c6474
-       make -C ../util/nandwriter     clean    ARCH=c64x TARGET=c6457
-       make -C ../util/nandwriter     clean    ARCH=c64x TARGET=c661x
        make -C ../util/romparse       clean
        make -C ../test/test1              clean
        make -C ../test/test2              clean
@@ -384,6 +384,8 @@ clean:
        find ../ -name *.dc | xargs rm -f
        find ../ -name *.oa | xargs rm -f
        find ../ -name *.da | xargs rm -f
+       find ../ -name *.tmp | xargs rm -f
+       find ../ -name cdefdep | xargs rm -f
 
 
 
index 2863cd7bb92ae51bfd0eb043e5fb29c0a05d4a39..72e8cbcaa095fc07486da5db1cdcdc26432c7df9 100644 (file)
@@ -56,7 +56,7 @@ pad
   pad_file_id  = 1
   dev_addr     = 0x500
   dev_addr_ext = I2C_BUS_ADDR
-  len          = 0x400
+  len          = 0x300
 }
 
 #if (PAD_FILE_ID_1 != PAD_FILE_ID_2)
@@ -65,7 +65,7 @@ pad
   pad_file_id  = 2
   dev_addr     = 0x800
   dev_addr_ext = I2C_BUS_ADDR
-  len          = 0x400
+  len          = 0x300
 }
 #endif
 
index 7fdccbbd8db65a225b0961456855eebccf1591b5..95e4e33f115a499fc12a525dc2d78469d72d5a99 100644 (file)
@@ -21,8 +21,8 @@ MEMORY
        HEAP      :  origin = 0x810800, length = 0x8000
        DATA_INIT :  origin = 0x818800, length = 0x0400
        DATA      :  origin = 0x818c00, length = 0x2c00
-       CFG       :  origin = 0x81b800, length = 0x0400
-       STAT      :  origin = 0x81bc00, length = 0x0200
+       CFG       :  origin = 0x81b800, length = 0x0300
+       STAT      :  origin = 0x81bb00, length = 0x0200
 
        LINKRAM   :  origin = 0x1081be00, length = 0x0200
        CPPIRAM   :  origin = 0x1081c000, length = 0x0200
index 622ff112bbf34b4dc8a458c35744771171cc675f..c77490f87bb202bf349ef0c528f55e80ead1a239 100644 (file)
@@ -109,11 +109,11 @@ all:
 
 be_target:
        @echo EXCLUDES= $(EXCLUDES)
-       make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=big    I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) SPI_DEFS='$(SPI_DEFS)' utils
+       make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=big    I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) INTERNAL_UTILS=$(INTERNAL_UTILS) SPI_DEFS='$(SPI_DEFS)' utils
        make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=big    I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) SPI_DEFS='$(SPI_DEFS)' $(TARGET)
 
 le_target:
-       make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=little I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) SPI_DEFS='$(SPI_DEFS)' utils
+       make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=little I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) INTERNAL_UTILS=$(INTERNAL_UTILS) SPI_DEFS='$(SPI_DEFS)' utils
        make -f makestg2 ARCH=c64x TARGET=$(TARGET) ENDIAN=little I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) I2C_BUS_ADDR=$(I2C_BUS_ADDR) SPI_DEFS='$(SPI_DEFS)' $(TARGET)
 
 compare:
index 23062d5502c8cd6cbcf397379a719342f3a3a4d7..760329ade53ce185497dbfd50338c060f5bbc1eb 100644 (file)
@@ -64,6 +64,12 @@ else
     HAS_SPI=0
 endif
 
+ifeq ($(INTERNAL_UTILS), no)
+    HAS_INTERNAL_UTILS = 0
+else
+    HAS_INTERNAL_UTILS = 1
+endif
+
 ifeq (EXCLUDE_SPI, $(strip $(findstring EXCLUDE_SPI, $(MAINDEFS))))
     HAS_SPI=0
 endif
@@ -127,12 +133,16 @@ else
  endif
 endif
 
+ifeq ($(HAS_SPI),0)
+    SPI_CFG=    
+endif
 
 i2crom:
        $(CC) -ppo -I../cfg/$(TARGET) $(I2C_DEFS) ibl_$(TARGET)/$@.map.pre
        ../util/romparse/romparse $(COMPACT) -rom_base $(I2C_BUS_ADDR) ibl_$(TARGET)/$@.map.pp
        $(CP) i2crom.ccs ibl_$(TARGET)/$@.ccs
        $(CP) i2crom.ccs ibl_$(TARGET)/$@.dat
+       ../util/btoccs/ccs2bin -swap ibl_$(TARGET)/$@.ccs ibl_$(TARGET)/$@.bin
        $(RM) i2crom.ccs ibl_le.b ibl.b
 
 spiRom:
@@ -203,14 +213,18 @@ $(CFG_MODULES):
 
 utils:
 ifeq ($(HAS_SPI),1)
+ifeq ($(HAS_INTERNAL_UTILS),1)
        make -C $(IBL_ROOT)/util/spiWrite TARGET=$(TARGET) SPI_DEFS='$(SPI_DEFS)' MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET)
        make -C $(IBL_ROOT)/util/spiConfig TARGET=$(TARGET) SPI_DEFS='$(SPI_DEFS)' MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET)
+endif
 endif
        make -C $(IBL_ROOT)/util/btoccs
        make -C $(IBL_ROOT)/util/romparse TARGET=$(TARGET)
 ifeq ($(HAS_I2C),1)
+ifeq ($(HAS_INTERNAL_UTILS),1)
        make -C $(IBL_ROOT)/util/i2cRead  TARGET=$(TARGET) $(TARGET) 
        make -C $(IBL_ROOT)/util/i2cWrite TARGET=$(TARGET) I2C_SIZE_BYTES=$(I2C_SIZE_BYTES) MAINDEFS='$(MAINDEFS) $(SPI_CFG)' $(TARGET)
+endif
        make -C $(IBL_ROOT)/util/i2cConfig $(TARGET) MAINDEFS='$(MAINDEFS) $(SPI_CFG)' 
 endif
        make -C $(IBL_ROOT)/util/bconvert
@@ -248,19 +262,18 @@ cleant:
        rm -rf ibl_$(TARGET)/ibl_init.i2c.le.ccs
        rm -rf ibl_$(TARGET)/ibl_init.le.ccs
        rm -rf ibl_$(TARGET)/ibl_init.be.ccs
-       rm -rf ibl_$(TARGET)/i2crom.ccs
-       rm -rf ibl_$(TARGET)/i2crom.dat
-       rm -rf ibl_$(TARGET)/i2crom_0x50.dat
-       rm -rf ibl_$(TARGET)/i2crom_0x51.dat
-       rm -rf ibl_$(TARGET)/i2crom.map.pp
+       rm -rf ibl_$(TARGET)/i2crom*.ccs
+       rm -rf ibl_$(TARGET)/i2crom*.dat
+       rm -rf ibl_$(TARGET)/i2crom*.bin
+       rm -rf ibl_$(TARGET)/i2crom*.map.pp
        rm -rf ibl_$(TARGET)/ibl_init_objs.inc
        rm -rf ibl_$(TARGET)/ibl_init_objs.pp
        rm -rf ibl_$(TARGET)/ibl_init_symbols.inc
        rm -rf ibl_$(TARGET)/ibl_objs.inc
        rm -rf ibl_$(TARGET)/ibl_objs.pp
        rm -rf ibl_$(TARGET)/ibl_objs.tmp
-       rm -rf ibl_$(TARGET)/spiRom.dat
-       rm -rf ibl_$(TARGET)/spiRom.map.pp
+       rm -rf ibl_$(TARGET)/spiRom*.dat
+       rm -rf ibl_$(TARGET)/spiRom*.map.pp
        
 
 
index dae9d6c8d4f6337811fe516b8e3ed54e75b1e045..5dd5ff1d438e370f628514e18b70d4f87caa40ae 100644 (file)
 
 @echo off
 
-REM  Setup the ibl build environment
+REM  Setup the ibl build environment if using cygwin for build
 
 REM Modify following lines based on target environment for the toolset installed 
 REM Dependency is related to path for Cygwin and CGEN installed
 
-REM PATH=G:\cygwin\bin;C:\PROGRA~1\TEXASI~1\C6000C~1.12\bin
-
+REM Specify the path to cygwin binaries and the code gen tools
+REM If the path has directory names with spaces use the below format to specify
+REM for e.g PATH=G:\cygwin\bin;C:\PROGRA~1\TEXASI~1\C6000C~1.12\bin
 set PATH=G:\cygwin\bin;t:\c6xx\cgen6_1_12\c6000\cgtools\bin
-set PATH=%PATH%;%SystemRoot%\system32;%SystemRoot%;
-set CYGWINPATH=G:/cygwin/bin
-set BISONSKEL=yacc.c
+
+REM Specify the base directory of the c6000 compiler with UNIX style path separator
 set TOOLSC6X=t:/c6xx/cgen6_1_12/c6000/cgtools
+
+REM Specify the base directory of the c6000 compiler with DOS style path separator
 set TOOLSC6XDOS=t:\c6xx\cgen6_1_12\c6000\cgtools
 
+REM # Don't modify the below variables. They are derived from the above definitions 
+set PATH=%PATH%;%SystemRoot%\system32;%SystemRoot%;
+set BISONSKEL=yacc.c
+
+
diff --git a/src/make/setupenvMsys.sh b/src/make/setupenvMsys.sh
new file mode 100644 (file)
index 0000000..66855aa
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Environment setup to be done if using MSYS Bash shell for build
+
+# Specify the base directory of the c6000 compiler with UNIX style path separator
+export C6X_BASE_DIR='"C:/Program Files/Texas Instruments/ccsv5/tools/compiler/c6000"'
+
+# Specify the base directory of the c6000 compiler in format understandable by the MSYS Bash shell 
+export C6X_BASE_DIR_MSYS=/c/Program\ Files/Texas\ Instruments/ccsv5/tools/compiler/c6000
+
+# Don't modify the below variables. They are derived from the above definitions 
+export PATH=$PATH:$C6X_BASE_DIR_MSYS/bin
+export TOOLSC6X=$C6X_BASE_DIR
+export TOOLSC6XDOS=$C6X_BASE_DIR
+
index bba41bcab8661375b320cdd958794800eec84b5a..10ff08df76ab2f3d51977bda0e9daa3712776d32 100755 (executable)
@@ -73,6 +73,7 @@
 #define ibl_EVM_C6457L  0x20   /**< C6457 Low Cost EVM */
 #define ibl_EVM_C6472L  0x30   /**< C6472 Low Cost EVM */
 #define ibl_EVM_C6474L  0x40   /**< C6474 Low Cost EVM */
+#define ibl_EVM_C6474M  0x41   /**< C6474 Mez EVM */
 #define ibl_EVM_C6670L  0x50   /**< C6670 Low Cost EVM */
 #define ibl_EVM_C6678L  0x60   /**< C6678 Low Cost EVM */
     
@@ -83,6 +84,7 @@ menuitem "EVM c6472 IBL";
 hotmenu setConfig_c6472()
 {
     ibl.iblMagic = ibl_MAGIC_VALUE;
+    ibl.iblEvmType = ibl_EVM_C6472L;
 
     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
@@ -106,8 +108,8 @@ hotmenu setConfig_c6472()
     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
 
     /* SGMII not present */
-       ibl.sgmiiConfig[0].configure = FALSE;
-       ibl.sgmiiConfig[1].configure = FALSE;
+    ibl.sgmiiConfig[0].configure = FALSE;
+    ibl.sgmiiConfig[1].configure = FALSE;
 
     /* MDIO configuration */
     ibl.mdioConfig.nMdioOps = 8;
@@ -127,14 +129,14 @@ hotmenu setConfig_c6472()
     /* spiConfig and emifConfig not needed */
 
     /* Ethernet configuration for Boot mode 0 */
-       ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
-       ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
-       ibl.bootModes[0].port     = 0;
+    ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
+    ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
+    ibl.bootModes[0].port     = 0;
 
     /* Bootp is disabled. The server and file name are provided here */
     ibl.bootModes[0].u.ethBoot.doBootp          = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpServerIp = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpFileName = FALSE;
+    ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
+    ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
     /* Even though the entire range of DDR2 is chosen, the load will
@@ -173,7 +175,7 @@ hotmenu setConfig_c6472()
     ibl.bootModes[0].u.ethBoot.ethInfo.fileName[14] = '\0';
 
     /* Alternative bootMode not configured for now */
-       ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
+    ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
 
     ibl.chkSum = 0;
 }
@@ -184,6 +186,7 @@ menuitem "EVM c6474 Mez IBL";
 hotmenu setConfig_c6474()
 {
     ibl.iblMagic = ibl_MAGIC_VALUE;
+    ibl.iblEvmType = ibl_EVM_C6474M;
 
     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
@@ -207,7 +210,7 @@ hotmenu setConfig_c6474()
     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
 
     /* SGMII 0 is present */
-       ibl.sgmiiConfig[0].configure = TRUE;
+    ibl.sgmiiConfig[0].configure = TRUE;
     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
     ibl.sgmiiConfig[0].control       = 0x20;
     ibl.sgmiiConfig[0].txConfig      = 0x00000ea3;
@@ -215,7 +218,7 @@ hotmenu setConfig_c6474()
     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
 
     /* There is no port 1 on the 6474 */
-       ibl.sgmiiConfig[1].configure = FALSE;
+    ibl.sgmiiConfig[1].configure = FALSE;
 
     /* MDIO configuration */
     ibl.mdioConfig.nMdioOps = 8;
@@ -235,14 +238,14 @@ hotmenu setConfig_c6474()
     /* spiConfig and emifConfig not needed */
 
     /* Ethernet configuration for Boot mode 0 */
-       ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
-       ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
-       ibl.bootModes[0].port     = 0;
+    ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
+    ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
+    ibl.bootModes[0].port     = 0;
 
     /* Bootp is disabled. The server and file name are provided here */
     ibl.bootModes[0].u.ethBoot.doBootp          = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpServerIp = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpFileName = FALSE;
+    ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
+    ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    10,218,109,35);
@@ -281,7 +284,7 @@ hotmenu setConfig_c6474()
     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
 
     /* Alternative bootMode not configured for now */
-       ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
+    ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
 
     ibl.chkSum = 0;
 }
@@ -291,6 +294,7 @@ menuitem "EVM c6474 Lite EVM IBL";
 hotmenu setConfig_c6474lite()
 {
     ibl.iblMagic = ibl_MAGIC_VALUE;
+    ibl.iblEvmType = ibl_EVM_C6474L;
 
     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
@@ -314,7 +318,7 @@ hotmenu setConfig_c6474lite()
     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x50001906; /* PHY read latency for CAS 5 is 5 + 2 - 1 */
 
     /* SGMII 0 is present */
-       ibl.sgmiiConfig[0].configure = TRUE;
+    ibl.sgmiiConfig[0].configure = TRUE;
     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
     ibl.sgmiiConfig[0].control       = 0x20;
     ibl.sgmiiConfig[0].txConfig      = 0x00000e23;
@@ -322,7 +326,7 @@ hotmenu setConfig_c6474lite()
     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
 
     /* There is no port 1 on the 6474 */
-       ibl.sgmiiConfig[1].configure = FALSE;
+    ibl.sgmiiConfig[1].configure = FALSE;
 
     /* MDIO configuration */
     ibl.mdioConfig.nMdioOps = 5;
@@ -339,14 +343,14 @@ hotmenu setConfig_c6474lite()
     /* spiConfig and emifConfig not needed */
 
     /* Ethernet configuration for Boot mode 0 */
-       ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
-       ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
-       ibl.bootModes[0].port     = 0;
+    ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
+    ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
+    ibl.bootModes[0].port     = 0;
 
     /* Bootp is disabled. The server and file name are provided here */
     ibl.bootModes[0].u.ethBoot.doBootp          = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpServerIp = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpFileName = FALSE;
+    ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
+    ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    158,218,100,114);
@@ -387,7 +391,7 @@ hotmenu setConfig_c6474lite()
     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
 
     /* Alternative bootMode not configured for now */
-       ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
+    ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
 
     ibl.chkSum = 0;
 }
@@ -397,6 +401,7 @@ menuitem "EVM c6457 EVM IBL";
 hotmenu setConfig_c6457()
 {
     ibl.iblMagic = ibl_MAGIC_VALUE;
+    ibl.iblEvmType = ibl_EVM_C6457L;
 
     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
@@ -420,7 +425,7 @@ hotmenu setConfig_c6457()
     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x001800C6;
 
     /* SGMII 0 is present */
-       ibl.sgmiiConfig[0].configure = TRUE;
+    ibl.sgmiiConfig[0].configure = TRUE;
     ibl.sgmiiConfig[0].adviseAbility = 0x9801;
     ibl.sgmiiConfig[0].control       = 0x20;
     ibl.sgmiiConfig[0].txConfig      = 0x00000e21;
@@ -428,7 +433,7 @@ hotmenu setConfig_c6457()
     ibl.sgmiiConfig[0].auxConfig     = 0x0000000b;
 
     /* There is no port 1 on the 6457 */
-       ibl.sgmiiConfig[1].configure = FALSE;
+    ibl.sgmiiConfig[1].configure = FALSE;
 
     /* MDIO configuration */
     ibl.mdioConfig.nMdioOps = 5;
@@ -444,14 +449,14 @@ hotmenu setConfig_c6457()
     /* spiConfig and emifConfig not needed */
 
     /* Ethernet configuration for Boot mode 0 */
-       ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
-       ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
-       ibl.bootModes[0].port = 0;
+    ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
+    ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
+    ibl.bootModes[0].port = 0;
 
     /* Bootp is disabled. The server and file name are provided here */
     ibl.bootModes[0].u.ethBoot.doBootp          = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpServerIp = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpFileName = FALSE;
+    ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
+    ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    158,218,100,115);
@@ -491,7 +496,7 @@ hotmenu setConfig_c6457()
     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0xe0000000;       /* Base of DDR2 */
 
     /* Alternative bootMode not configured for now */
-       ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
+    ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
 
     ibl.chkSum = 0;
 }
@@ -501,6 +506,7 @@ menuitem "EVM c6455 IBL";
 hotmenu setConfig_c6455()
 {
     ibl.iblMagic = ibl_MAGIC_VALUE;
+    ibl.iblEvmType = ibl_EVM_C6455L;
 
     ibl.pllConfig[ibl_MAIN_PLL].doEnable      = TRUE;
     ibl.pllConfig[ibl_MAIN_PLL].prediv        = 1;
@@ -524,8 +530,8 @@ hotmenu setConfig_c6455()
     ibl.ddrConfig.uEmif.emif3p1.dmcctl = 0x00000005; /* PHY read latency for CAS 4 is 4 + 2 - 1 */
 
     /* SGMII not present */
-       ibl.sgmiiConfig[0].configure = FALSE;
-       ibl.sgmiiConfig[1].configure = FALSE;
+    ibl.sgmiiConfig[0].configure = FALSE;
+    ibl.sgmiiConfig[1].configure = FALSE;
 
     /* MDIO configuration */
     ibl.mdioConfig.nMdioOps = 0;
@@ -537,14 +543,14 @@ hotmenu setConfig_c6455()
     /* spiConfig and emifConfig not needed */
 
     /* Ethernet configuration for Boot mode 0 */
-       ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
-       ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
-       ibl.bootModes[0].port     = 0;
+    ibl.bootModes[0].bootMode = ibl_BOOT_MODE_TFTP;
+    ibl.bootModes[0].priority = ibl_HIGHEST_PRIORITY;
+    ibl.bootModes[0].port     = 0;
 
     /* Bootp is disabled. The server and file name are provided here */
     ibl.bootModes[0].u.ethBoot.doBootp          = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpServerIp = FALSE;
-    ibl.bootModes[0].u.ethBoot.useBootpFileName = FALSE;
+    ibl.bootModes[0].u.ethBoot.useBootpServerIp = TRUE;
+    ibl.bootModes[0].u.ethBoot.useBootpFileName = TRUE;
     ibl.bootModes[0].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
     SETIP(ibl.bootModes[0].u.ethBoot.ethInfo.ipAddr,    158,218,100,118);
@@ -584,7 +590,7 @@ hotmenu setConfig_c6455()
     ibl.bootModes[0].u.ethBoot.blob.branchAddress = 0xe0000000;       /* Base of DDR2 */
 
     /* Alternative bootMode not configured for now */
-       ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
+    ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NONE;
 
     ibl.chkSum = 0;
 }
@@ -684,31 +690,48 @@ hotmenu setConfig_c6678_main()
        ibl.bootModes[0].port     = 0;
 
        ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
-       ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;
-       ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;
+       ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */ 
+       ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
+       ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */ 
+       ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
        ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
-    ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
+    ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x90000000;       /* Image 1 load start address in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x90000000;       /* Image 1 load start address in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in BE mode */
 
     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
     ibl.bootModes[1].port     = 0;
 
     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
-    ibl.bootModes[1].u.nandBoot.bootAddress[0][0]        = 0x4000;
-    ibl.bootModes[1].u.nandBoot.bootAddress[1][0]        = 0x4000;
+    ibl.bootModes[1].u.nandBoot.bootAddress[0][0]        = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[0][1]        = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[1][0]        = 0x4000;         /* Image 0 NAND offset address (block 1) in BE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[1][1]        = 0x2000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_CHIPSEL_2;
 
-    ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x90000000;       /* Image 1 load start address in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x90000000;       /* Image 1 load start address in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in BE mode */
+
 
     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 512;
@@ -746,8 +769,8 @@ hotmenu setConfig_c6678_main()
        ibl.bootModes[2].port     = ibl_PORT_SWITCH_ALL;
 
        ibl.bootModes[2].u.ethBoot.doBootp          = FALSE;
-       ibl.bootModes[2].u.ethBoot.useBootpServerIp = FALSE;
-       ibl.bootModes[2].u.ethBoot.useBootpFileName = FALSE;
+       ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
+       ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
        ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
 
@@ -781,11 +804,11 @@ hotmenu setConfig_c6678_main()
     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
 
-    ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
+    ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
+    ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0xA00000;         /* Image size (10 MB) */
+    ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
 
-       ibl.chkSum = 0;
+    ibl.chkSum = 0;
 }
 
 menuitem "EVM c6670 IBL";
@@ -882,31 +905,48 @@ hotmenu setConfig_c6670_main()
        ibl.bootModes[0].port     = 0;
 
        ibl.bootModes[0].u.norBoot.bootFormat   = ibl_BOOT_FORMAT_ELF;
-       ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;
-       ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;
+       ibl.bootModes[0].u.norBoot.bootAddress[0][0]    = 0;            /* Image 0 NOR offset byte address in LE mode */ 
+       ibl.bootModes[0].u.norBoot.bootAddress[0][1]    = 0xA00000;     /* Image 1 NOR offset byte address in LE mode  */
+       ibl.bootModes[0].u.norBoot.bootAddress[1][0]    = 0;            /* Image 0 NOR offset byte address in BE mode */ 
+       ibl.bootModes[0].u.norBoot.bootAddress[1][1]    = 0xA00000;     /* Image 1 NOR offset byte address in BE mode  */
        ibl.bootModes[0].u.norBoot.interface    = ibl_PMEM_IF_SPI;
-    ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
+    ibl.bootModes[0].u.norBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].startAddress  = 0x90000000;       /* Image 1 load start address in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[0][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in LE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].startAddress  = 0x90000000;       /* Image 1 load start address in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
+    ibl.bootModes[0].u.norBoot.blob[1][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in BE mode */
 
     ibl.bootModes[1].bootMode = ibl_BOOT_MODE_NAND;
     ibl.bootModes[1].priority = ibl_HIGHEST_PRIORITY;
     ibl.bootModes[1].port     = 0;
 
     ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;
-    ibl.bootModes[1].u.nandBoot.bootAddress[0][0]        = 0x4000;
-    ibl.bootModes[1].u.nandBoot.bootAddress[1][0]        = 0x4000;
+    ibl.bootModes[1].u.nandBoot.bootAddress[0][0]        = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[0][1]        = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[1][0]        = 0x4000;         /* Image 0 NAND offset address (block 1) in BE mode */
+    ibl.bootModes[1].u.nandBoot.bootAddress[1][1]        = 0x2000000;      /* Image 1 NAND offset address (block 2048) in BE mode */
     ibl.bootModes[1].u.nandBoot.interface         = ibl_PMEM_IF_GPIO;
 
-    ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Base address of DDR2 */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress  = 0x80000000;       /* Image 0 load start address in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress  = 0x90000000;       /* Image 1 load start address in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in LE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress  = 0x80000000;       /* Image 0 load start address in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes     = 0xA00000;         /* Image 0 size (10 MB) in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000;       /* Image 0 branch address after loading in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress  = 0x90000000;       /* Image 1 load start address in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes     = 0xA00000;         /* Image 1 size (10 MB) in BE mode */
+    ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x90000000;       /* Image 1 branch address after loading in BE mode */
+
 
     ibl.bootModes[1].u.nandBoot.nandInfo.busWidthBits  = 8;
     ibl.bootModes[1].u.nandBoot.nandInfo.pageSizeBytes = 512;
@@ -944,8 +984,8 @@ hotmenu setConfig_c6670_main()
        ibl.bootModes[2].port     = ibl_PORT_SWITCH_ALL;
 
        ibl.bootModes[2].u.ethBoot.doBootp          = FALSE;
-       ibl.bootModes[2].u.ethBoot.useBootpServerIp = FALSE;
-       ibl.bootModes[2].u.ethBoot.useBootpFileName = FALSE;
+       ibl.bootModes[2].u.ethBoot.useBootpServerIp = TRUE;
+       ibl.bootModes[2].u.ethBoot.useBootpFileName = TRUE;
        ibl.bootModes[2].u.ethBoot.bootFormat       = ibl_BOOT_FORMAT_BBLOB;
 
 
@@ -979,10 +1019,10 @@ hotmenu setConfig_c6670_main()
     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[13] = '\0';
     ibl.bootModes[2].u.ethBoot.ethInfo.fileName[14] = '\0';
 
-    ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Base address of DDR2 */
-    ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0xA00000;         /* 10 MB */
-    ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Base of DDR2 */
+    ibl.bootModes[2].u.ethBoot.blob.startAddress  = 0x80000000;       /* Load start address */
+    ibl.bootModes[2].u.ethBoot.blob.sizeBytes     = 0xA00000;         /* Image size (10 MB) */
+    ibl.bootModes[2].u.ethBoot.blob.branchAddress = 0x80000000;       /* Branch address after loading */
 
-       ibl.chkSum = 0;
+    ibl.chkSum = 0;
 }
 
index 3228f71417c86fff39c44955ddd83c105ebce19f..7ec6e6a548b1e5e6961ed5cb9fe855e5c2bec03d 100644 (file)
@@ -55,7 +55,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-ibl_t ibl;
+ibl_t ibl = {0, };
 
 /* The configAddress must be programmed. On images which support both endians
  * there can be two seperate configurations, one for big endian, and one for little */