1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 07:02:34 +02:00

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>
This commit is contained in:
Carl-Daniel Hailfinger 2009-10-01 13:16:32 +00:00
parent 4010712033
commit de75a5ed7f
2 changed files with 10 additions and 8 deletions

View File

@ -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)

6
spi.c
View File

@ -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);
}