
From: Marc-André Hébert hebert.marcandre@gmail.com
The spansion_erase currently only works when the sector size is 64KB. cmd[1] should contain the higher 8 bit of the 24 bit address of the sector to be erased. Currently it is holding the sector index to be erased which happens to be the same thing when the sector size is 64KB.
Signed-off-by: Marc-Andre Hebert marc-andre.hebert@humanware.com Signed-off-by: Mike Frysinger vapier@gentoo.org --- v2 - fix style pointed out by Sergei Shtylyov
drivers/mtd/spi/spansion.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index d6c1a5f..d9d794a 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -262,7 +262,6 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) return -1; }
- len /= sector_size; cmd[0] = CMD_S25FLXX_SE; cmd[2] = 0x00; cmd[3] = 0x00; @@ -274,8 +273,8 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
ret = 0; - for (actual = 0; actual < len; actual++) { - cmd[1] = (offset / sector_size) + actual; + for (actual = 0; actual < len; actual += sector_size) { + cmd[1] = (offset + actual) >> 16;
ret = spi_flash_cmd(flash->spi, CMD_S25FLXX_WREN, NULL, 0); if (ret < 0) { @@ -298,7 +297,7 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
debug("SF: SPANSION: Successfully erased %u bytes @ 0x%x\n", - len * sector_size, offset); + len, offset);
spi_release_bus(flash->spi); return ret;