flashrom: Check if erase succeeds and exit with error on failure.

flashrom used to exit 0 even if erase failed. Not anymore.

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Stefan Reinauer <stepan@coresystems.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3797 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Peter Stuge 2008-12-05 02:22:30 +00:00
parent e94e2e3d40
commit b4b56e669b
1 changed files with 17 additions and 4 deletions

View File

@ -250,6 +250,7 @@ int main(int argc, char *argv[])
{ {
uint8_t *buf; uint8_t *buf;
unsigned long size; unsigned long size;
size_t erasedbytes;
FILE *image; FILE *image;
/* Probe for up to three flash chips. */ /* Probe for up to three flash chips. */
struct flashchip *flash, *flashes[3]; struct flashchip *flash, *flashes[3];
@ -533,13 +534,25 @@ int main(int argc, char *argv[])
if (erase_it) { if (erase_it) {
printf("Erasing flash chip... "); printf("Erasing flash chip... ");
if (!flash->erase) { if (NULL == flash->erase) {
fprintf(stderr, "Error: flashrom has no erase function for this flash chip.\n"); printf("FAILED!\n");
fprintf(stderr, "ERROR: flashrom has no erase function for this flash chip.\n");
return 1; return 1;
} }
flash->erase(flash); flash->erase(flash);
printf("done.\n"); if (NULL == flash->read)
exit(0); memcpy(buf, (const char *)flash->virtual_memory, size);
else
flash->read(flash, buf);
for (erasedbytes = 0; erasedbytes <= size; erasedbytes++)
if (0xff != buf[erasedbytes]) {
printf("FAILED!\n");
fprintf(stderr, "ERROR at 0x%08x: Expected=0xff, Read=0x%02x\n",
erasedbytes, buf[erasedbytes]);
return 1;
}
printf("SUCCESS.\n");
return 0;
} else if (read_it) { } else if (read_it) {
if ((image = fopen(filename, "w")) == NULL) { if ((image = fopen(filename, "w")) == NULL) {
perror(filename); perror(filename);