
2010/8/11 Marc-André Hébert :
2010/8/10 Mike Frysinger:
2010/8/10 Marc-André Hébert:
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.
ugh, this is why the current sf framework annoys me. so much duplication across drivers including bugs.
--- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -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;
how about the bug fix that went into stmicro:
- cmd[1] = (offset / sector_size) + actual;
- cmd[1] = offset >> 16;
- offset += sector_size;
Yeah I saw how stmicro did it, but I didn't do it that way simply because modifying the offset invalidates the debug statement afterwards:
debug("SF: SPANSION: Successfully erased %u bytes @ 0x%x\n", len, offset);
and this just reinforces my point. you're basically saying the stmicro flash code has a broken debug() statement now. -mike