diff options
author | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-10-01 13:16:32 +0000 |
---|---|---|
committer | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-10-01 13:16:32 +0000 |
commit | aa2d79289131659e710c86ca9baa44ebd5b7ed34 (patch) | |
tree | e94909e0b3b7bd53dcee2d46ce51d1423d0483f5 | |
parent | 643130468b20af1a1dbd94e69a46343d493cf574 (diff) | |
download | flashrom-aa2d79289131659e710c86ca9baa44ebd5b7ed34.zip flashrom-aa2d79289131659e710c86ca9baa44ebd5b7ed34.tar.gz |
Introduce proper error checking for SPI programming
Corresponding to flashrom svn r739.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
-rw-r--r-- | sb600spi.c | 12 | ||||
-rw-r--r-- | spi.c | 6 |
2 files changed, 10 insertions, 8 deletions
@@ -48,9 +48,9 @@ int sb600_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len) /* FIXME: SB600 can write 5 bytes per transaction. */ int sb600_spi_write_1(struct flashchip *flash, uint8_t *buf) { - int rc = 0, i; + int i; int total_size = flash->total_size * 1024; - int result; + int result = 0; spi_disable_blockprotect(); /* Erase first */ @@ -63,10 +63,10 @@ int sb600_spi_write_1(struct flashchip *flash, uint8_t *buf) printf("Programming flash"); for (i = 0; i < total_size; i++, buf++) { - result = spi_byte_program(i, *buf); + result = spi_nbyte_program(i, buf, 1); if (result) { - // spi_byte_program reported the error for us already - printf_debug("... continuing anyway.\n"); + fprintf(stderr, "Write error!\n"); + return result; } /* wait program complete. */ @@ -76,7 +76,7 @@ int sb600_spi_write_1(struct flashchip *flash, uint8_t *buf) ; } printf(" done.\n"); - return rc; + return result; } static void reset_internal_fifo_pointer(void) @@ -970,7 +970,7 @@ int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len) int spi_chip_write_1(struct flashchip *flash, uint8_t *buf) { int total_size = 1024 * flash->total_size; - int i; + int i, result = 0; spi_disable_blockprotect(); /* Erase first */ @@ -981,7 +981,9 @@ int spi_chip_write_1(struct flashchip *flash, uint8_t *buf) } printf("done.\n"); for (i = 0; i < total_size; i++) { - spi_byte_program(i, buf[i]); + result = spi_byte_program(i, buf[i]); + if (result) + return 1; while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP) programmer_delay(10); } |