Changes to make IBL NAND boot work on C6670 Beta-2 EVM DEV.MAD_UTILS.IBL.01.00.00.05
authorSandeep Nair <sandeep_n@ti.com>
Wed, 1 Jun 2011 03:04:00 +0000 (23:04 -0400)
committerSandeep Nair <sandeep_n@ti.com>
Wed, 1 Jun 2011 03:04:00 +0000 (23:04 -0400)
Verified NAND boot on C6678 EVM & C6670 Beta-2 EVM

src/device/c661x/c661x.c
src/device/c661x/c661xinit.c
src/device/c661x/c661xutil.c
src/device/c661x/target.h
src/hw/ddrs/emif4/emif4.c
src/main/iblmain.c
src/make/Makefile

index 8be48a888c4adf4cfaed4bdefcdc1d088a836756..df1ec6adacb467f250f9b5f19d648f51253c0c41 100644 (file)
@@ -73,7 +73,7 @@ extern cregister unsigned int DNUM;
  *
  *  @details
  *    Examines an input address to determine if it is a local address. Using the largest
- *    L2 size on the 6616.
+ *    L2 size on the C6670.
  */
 bool address_is_local (Uint32 addr)
 {
@@ -169,15 +169,16 @@ uint32 deviceEmif25MemBase (int32 cs)
 
 /**
  *  @brief
- *      Return the PSC number for NAND/NOR through emif. Only 6618 has the emif
+ *      Return the PSC number for NAND/NOR through emif. Only 6678 has the emif
  */
 Int32 deviceEmifPscNum (void)
 {
     Uint32 v;
 
     v = *((Uint32 *)DEVICE_JTAG_ID_REG);
-    if (v == DEVICE_C6618_JTAG_ID_VAL)
-        return (TARGET_PWR_EMIF_C6618);
+    v &= DEVICE_JTAG_ID_MASK;
+    if (v == DEVICE_C6678_JTAG_ID_VAL)
+        return (TARGET_PWR_EMIF_C6678);
 
     /* Return a negative number to indicate no PSC module is associated with NAND */
     return (-1);
index 03dbcd1deb228d1f4ccb0d1e740230e2ca3da009..96b159aee4bc0e1c7fabbe28c261ddd6276c30b3 100644 (file)
@@ -101,11 +101,12 @@ int32 deviceReadBootDevice (void)
 #endif
 
     v = *((Uint32 *)DEVICE_JTAG_ID_REG);
+    v &= DEVICE_JTAG_ID_MASK;
 
-    if (v == DEVICE_C6618_JTAG_ID_VAL)
-        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6618;
+    if (v == DEVICE_C6678_JTAG_ID_VAL)
+        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6678;
     else
-        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6616;
+        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6670;
 
     switch (params->boot_mode)  {
 
@@ -258,11 +259,12 @@ void deviceLoadInitSpiConfig (void *vcfg)
     BOOT_PARAMS_SPI_T    *spip;
 
     v = *((Uint32 *)DEVICE_JTAG_ID_REG);
+    v &= DEVICE_JTAG_ID_MASK;
 
-    if (v == DEVICE_C6618_JTAG_ID_VAL)
-        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6618;
+    if (v == DEVICE_C6678_JTAG_ID_VAL)
+        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6678;
     else
-        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6616;
+        params = (BOOT_PARAMS_COMMON_T *)ROM_BOOT_PARAMS_ADDR_C6670;
 
 
     /* SPI_ROM is a constant defined during make which enables the use of the
index 1fe5f145b7479e0f930339c6dba94b2757180a63..12af098e731a57eb46bddbbcca0985f51ba14d83 100644 (file)
@@ -85,10 +85,11 @@ int32 deviceSpiPscNum (void)
 {
     uint32 v;
 
-    /* SPI is module number 3 only on the c6618. On the c6616 the SPI is in the
+    /* SPI is module number 3 only on the c6678. On the c6670 the SPI is in the
      * always on domain */
     v = *((Uint32 *)DEVICE_JTAG_ID_REG);
-    if (v == DEVICE_C6618_JTAG_ID_VAL)
+    v &= DEVICE_JTAG_ID_MASK;
+    if (v == DEVICE_C6678_JTAG_ID_VAL)
         return (3);
 
     return (-1);  /* A negative number indicates the always on domain */
index 4cf3e255c6341a2edf62d3ba99274e7cbd82f467..b38d3e3428e82dcbb267995495e507aba9526dac 100644 (file)
 /** 
  * @brief
  *   The PSC numbers for EMIF16 and SPI vary between devices. The devices are run time
- *   identified by reading the JTAG ID register 
+ *   identified by reading the JTAG ID register,
+ *   NOTE: Have the variant bits as zero while defining the JTAG ID 
  */
-#define DEVICE_C6616_JTAG_ID_VAL    0x9d02f     /* C6670 */
-#define DEVICE_C6618_JTAG_ID_VAL    0x9e02f     /* C6678 */     
+#define DEVICE_C6678_JTAG_ID_VAL   0x9e02f      /* C6678 */     
+#define DEVICE_C6670_JTAG_ID_VAL   0xb94102f    /* C6670 */     
+
 #define DEVICE_JTAG_ID_REG          0x2620018
+#define DEVICE_JTAG_ID_MASK         0x0fffffff /* exclude variant bits(31:28) */
 
 
 /**
  *    The PSC number for NAND depends on the device
  */
 #define TARGET_PWR_EMIF         deviceEmifPscNum()
-#define TARGET_PWR_EMIF_C6618   3
+#define TARGET_PWR_EMIF_C6678   3
 
 /*
  *  @brief
@@ -351,8 +354,8 @@ Int32 targetMacRcv (void *ptr_device, UINT8 *buffer);
 #define BOOT_MODE_SPI               50
 
 
-#define ROM_BOOT_PARAMS_ADDR_C6618   0x873680
-#define ROM_BOOT_PARAMS_ADDR_C6616   0x8f3680
+#define ROM_BOOT_PARAMS_ADDR_C6678   0x873680
+#define ROM_BOOT_PARAMS_ADDR_C6670   0x8f3680
 
 /**
  *  @brief
index ba0a63cc7ce2c9593475b480c8e2e149fcd20594..8043e19f9b5d53153dcd7ffb858da1b2f6a91dec 100644 (file)
@@ -96,8 +96,9 @@ SINT16 hwEmif4p0Enable (iblEmif4p0_t *cfg)
     UINT32 v, i;
     
     v = DEVICE_REG32_R(DEVICE_JTAG_ID_REG);
+    v &= DEVICE_JTAG_ID_MASK;
     
-    if (v == DEVICE_C6618_JTAG_ID_VAL)
+    if (v == DEVICE_C6678_JTAG_ID_VAL)
     {
 #if 0
         /* C6678 Old 1066 configuration */
@@ -284,7 +285,7 @@ SINT16 hwEmif4p0Enable (iblEmif4p0_t *cfg)
         DDR_RDWR_LVL_CTRL = 0x80000000;
 #endif
     }
-    else if (v == DEVICE_C6616_JTAG_ID_VAL)
+    else if (v == DEVICE_C6670_JTAG_ID_VAL)
     {
         /* C6670 800 M rate */
         DDR3PLLCTL1 |= 0x00000040;    //Set ENSAT = 1
index c8e2746c051cbc23c4a613f8826311f351425ad4..1c5a20b08b23c631b4d89dd74ec25d2c453d8194 100644 (file)
@@ -270,9 +270,10 @@ void main (void)
 
 #ifndef EXCLUDE_MULTI_BOOT
         v = DEVICE_REG32_R(DEVICE_JTAG_ID_REG);
+        v &= DEVICE_JTAG_ID_MASK;
         if (
-            (v == DEVICE_C6618_JTAG_ID_VAL)         || 
-            (v == DEVICE_C6616_JTAG_ID_VAL)
+            (v == DEVICE_C6678_JTAG_ID_VAL)         || 
+            (v == DEVICE_C6670_JTAG_ID_VAL)
            )
         {
             IER = 0;
index 3362377fab469a9f919f9c2ce3961e0bdfd4497b..d6b6514c29cae7b8232d54f612859fdaa5dc67a9 100644 (file)
@@ -248,7 +248,7 @@ SPI_DEFS+= SPI_CLKDIV=$(SPI_CLKDIV)
 SPI_DEFS+= SPI_ROM=$(SPI_ROM)
 
 
-.PHONY: all $(IBLS_C6X) evm_c6455 evm_c6472 evm_c6474 evm_c6457 evm_c6618 
+.PHONY: all $(IBLS_C6X) evm_c6455 evm_c6472 evm_c6474 evm_c6457 evm_c6678_i2c evm_c6670_i2c 
 .PHONY: test_c661x test_c6455 test_c6472 test_c6474 test_c6457 clean