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 | de75a5ed7f0f1b05e32a97423723db7a0719a2f2 (patch) | |
| tree | e94909e0b3b7bd53dcee2d46ce51d1423d0483f5 | |
| parent | 4010712033b988f0be85f790982a12bb4010094b (diff) | |
| download | flashrom-de75a5ed7f0f1b05e32a97423723db7a0719a2f2.tar.gz flashrom-de75a5ed7f0f1b05e32a97423723db7a0719a2f2.tar.bz2 flashrom-de75a5ed7f0f1b05e32a97423723db7a0719a2f2.zip | |
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);  	} | 
