From 8722da89f2c75ae13fbdc991833f4c07e8e22df2 Mon Sep 17 00:00:00 2001 From: Donald Huang Date: Thu, 30 Aug 2018 17:09:26 +0800 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/1195309 Commit-Ready: Donald Huang Tested-by: Donald Huang Tested-by: Matthew Blecker Reviewed-by: Matthew Blecker --- util/iteflash.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'util') 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); -- cgit v1.2.1