Support new feature for multiple device/image boot
[keystone-rtos/ibl.git] / src / main / ibliniti2c.c
index b17d5cd0170ee0a922d8d9a3ff32164eca4bd458..0a3db3a7a06998b15771a2816c2cb39aaf6673f7 100644 (file)
@@ -48,7 +48,7 @@
  *      A global value is used to track the read through the i2c during
  *      the program load.
  */
-uint32 i2cReadAddress;
+uint32 i2cReadAddress, i2cBusAddress;
 
 /**
  *  @brief
@@ -61,10 +61,10 @@ void i2cReadBlock (void)
     uint32 v;
 
     for (;;) {
-        while (hwI2cMasterRead (i2cReadAddress & 0xffff,    /* The address on the eeprom of the table */
+        while (hwI2cMasterRead (i2cReadAddress,             /* The address on the eeprom of the table */
                                 4,                          /* The number of bytes to read */
                                 iData,                      /* Where to store the bytes */
-                                i2cReadAddress >> 16,       /* The bus address of the eeprom */
+                                i2cBusAddress,              /* The bus address of the eeprom */
                                 IBL_CFG_I2C_ADDR_DELAY)     /* The delay between sending the address and reading data */
     
              != I2C_RET_OK)  {
@@ -80,10 +80,10 @@ void i2cReadBlock (void)
             continue;
 
 
-        while (hwI2cMasterRead (i2cReadAddress & 0xffff,    /* The address on the eeprom of the table */
+        while (hwI2cMasterRead (i2cReadAddress,             /* The address on the eeprom of the table */
                                 len,                        /* The number of bytes to read */
                                 iData,                      /* Where to store the bytes */
-                                i2cReadAddress >> 16,       /* The bus address of the eeprom */
+                                i2cBusAddress,              /* The bus address of the eeprom */
                                 IBL_CFG_I2C_ADDR_DELAY)     /* The delay between sending the address and reading data */
     
              != I2C_RET_OK)  {
@@ -107,6 +107,7 @@ void i2cReadBlock (void)
 
 
     i2cReadAddress += len;
+    i2cBusAddress = i2cReadAddress >>16;
     
     iFifoIn  = len;
     iFifoOut = 4;    /* The i2c header is effectively removed */
@@ -210,6 +211,7 @@ BOOT_MODULE_FXN_TABLE *iblInitI2c (void)
 
                 }
 
+                i2cBusAddress = i2cReadAddress >>16;
 
                 if (map.length != sizeof(iblBootMap_t))  {
                     iblStatus.mapSizeFail += 1;