diff options
author | Donald Huang <donald.huang@ite.com.tw> | 2018-08-30 17:09:26 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-09-03 02:20:50 -0700 |
commit | 8722da89f2c75ae13fbdc991833f4c07e8e22df2 (patch) | |
tree | 8e3e5f83409e808ffb314220e23256a6e55c2cde /util | |
parent | c355ba59732e25a4c8bff89e63e89f0faafa8afc (diff) | |
download | chrome-ec-8722da89f2c75ae13fbdc991833f4c07e8e22df2.tar.gz |
iteflash : fix program page address
The original program only assign the eflash high byte address.
Filled the eflash address for high byte, mid byte , low byte.
BUG=none
BRANCH=none
TEST=1.make -j BOARD=reef_it8320
2.sudo servod -b reef &
3.~/trunk/src/platform/ec/util/flash_ec --board=reef_it8320
It also test ok with different block size as below.
Change-Id: I7c27836b667b078e88e0a12a3ea79c97f3de38e3
Signed-off-by: Donald Huang <donald.huang@ite.com.tw>
Reviewed-on: https://chromium-review.googlesource.com/1195309
Commit-Ready: Donald Huang <cguwinds@gmail.com>
Tested-by: Donald Huang <cguwinds@gmail.com>
Tested-by: Matthew Blecker <matthewb@chromium.org>
Reviewed-by: Matthew Blecker <matthewb@chromium.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/iteflash.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/util/iteflash.c b/util/iteflash.c index a93e98d33e..78f3ff35f3 100644 --- a/util/iteflash.c +++ b/util/iteflash.c @@ -695,7 +695,7 @@ int command_write_pages(struct ftdi_context *ftdi, uint32_t address, int res = -EIO; uint32_t remaining = size; int cnt; - uint8_t page; + uint8_t addr_H, addr_M, addr_L; uint8_t cmd; if (spi_flash_follow_mode(ftdi, "AAI write") < 0) @@ -704,7 +704,9 @@ int command_write_pages(struct ftdi_context *ftdi, uint32_t address, while (remaining) { cnt = (remaining > BLOCK_WRITE_SIZE) ? BLOCK_WRITE_SIZE : remaining; - page = address / BLOCK_WRITE_SIZE; + addr_H = (address >> 16) & 0xFF; + addr_M = (address >> 8) & 0xFF; + addr_L = (address) & 0xFF; draw_spinner(remaining, size); @@ -722,11 +724,10 @@ int command_write_pages(struct ftdi_context *ftdi, uint32_t address, "AAI write") < 0) goto failed_write; - /* Set page */ - cmd = 0; - res = i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &page, 1, 1); - res |= i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &cmd, 1, 1); - res |= i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &cmd, 1, 1); + /* Set eflash page address */ + res = i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &addr_H, 1, 1); + res |= i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &addr_M, 1, 1); + res |= i2c_byte_transfer(ftdi, I2C_DATA_ADDR, &addr_L, 1, 1); if (res < 0) { fprintf(stderr, "Flash write set page FAILED (%d)\n", res); |