summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Hébert <hebert.marcandre@gmail.com>2010-08-10 09:02:09 -0400
committerMike Frysinger <vapier@gentoo.org>2010-10-06 20:50:38 -0400
commitc3cb09207f8765dddc67298b08f1f0796c1b98db (patch)
treeaaca5bcfc454bc740a6470bc39d58e2b804942d0
parent74f9e0d8a0e1fa73af43e93b0b67985db973b1ed (diff)
downloadu-boot-imx-c3cb09207f8765dddc67298b08f1f0796c1b98db.zip
u-boot-imx-c3cb09207f8765dddc67298b08f1f0796c1b98db.tar.gz
u-boot-imx-c3cb09207f8765dddc67298b08f1f0796c1b98db.tar.bz2
sf: spansion: fixing erasing when sector size >64KiB
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>
-rw-r--r--drivers/mtd/spi/spansion.c7
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;