sf: spansion: fixing erasing when sector size >64KiB
authorMarc-André Hébert <hebert.marcandre@gmail.com>
Tue, 10 Aug 2010 13:02:09 +0000 (09:02 -0400)
committerMike Frysinger <vapier@gentoo.org>
Thu, 7 Oct 2010 00:50:38 +0000 (20:50 -0400)
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>
drivers/mtd/spi/spansion.c

index d6c1a5f9d3addeab46a449b1d4da1b13ef1de8a4..d9d794a9aeb8468f51b0eba69541f6547a7c74b6 100644 (file)
@@ -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;