diff options
author | Chin Liang See <clsee@altera.com> | 2014-03-06 11:21:11 -0800 |
---|---|---|
committer | Chin Liang See <clsee@altera.com> | 2014-03-06 11:21:11 -0800 |
commit | 09353b4af6d6c72b03a437db4a94680674877d45 (patch) | |
tree | c0e4681b2a24845c866e85961cc3394a5510d11d | |
parent | e0d19aa80086b99a1dacb320eb12cb20e577aebc (diff) | |
download | u-boot-socfpga-09353b4af6d6c72b03a437db4a94680674877d45.tar.gz |
FogBugz #188704: Fix QSPI read flag status sequence
Fixed the QSPI read status and read flag status register sequence.
To ensure reliable flash programming and erase, we would need
to read status register then follow by read flag status register.
While its not documented, its advised by Micron technical support.
Signed-off-by: Chin Liang See <clsee@altera.com>
-rw-r--r-- | drivers/mtd/spi/spi_flash.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 2d73d00943..a6736db6cf 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -123,16 +123,16 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash, u32 offset, break; } + ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT); + if (ret) + break; + if (flash->poll_read_status) { ret = flash->poll_read_status(flash); if (ret) break; } - ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT); - if (ret) - break; - page_addr++; byte_addr = 0; } @@ -264,15 +264,16 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) if (ret) goto out; + ret = spi_flash_cmd_wait_ready(flash, + SPI_FLASH_PAGE_ERASE_TIMEOUT); + if (ret) + goto out; + if (flash->poll_read_status) { ret = flash->poll_read_status(flash); if (ret) goto out; } - - ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PAGE_ERASE_TIMEOUT); - if (ret) - goto out; } debug("SF: Successfully erased %zu bytes @ %#x\n", len, start); |