flashrom: Check if erase succeeds and exit with error on failure.
authorPeter Stuge <peter@stuge.se>
Fri, 5 Dec 2008 02:22:30 +0000 (02:22 +0000)
committerPeter Stuge <peter@stuge.se>
Fri, 5 Dec 2008 02:22:30 +0000 (02:22 +0000)
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

util/flashrom/flashrom.c

index a75e45292704d0d2f71d49d7cef0dfcf52caee29..4dd2ea12505a55b70dbee1faa4a73359b4e96634 100644 (file)
@@ -250,6 +250,7 @@ int main(int argc, char *argv[])
 {
        uint8_t *buf;
        unsigned long size;
+       size_t erasedbytes;
        FILE *image;
        /* Probe for up to three flash chips. */
        struct flashchip *flash, *flashes[3];
@@ -533,13 +534,25 @@ int main(int argc, char *argv[])
 
        if (erase_it) {
                printf("Erasing flash chip... ");
-               if (!flash->erase) {
-                       fprintf(stderr, "Error: flashrom has no erase function for this flash chip.\n");
+               if (NULL == flash->erase) {
+                       printf("FAILED!\n");
+                       fprintf(stderr, "ERROR: flashrom has no erase function for this flash chip.\n");
                        return 1;
                }
                flash->erase(flash);
-               printf("done.\n");
-               exit(0);
+               if (NULL == flash->read)
+                       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) {
                if ((image = fopen(filename, "w")) == NULL) {
                        perror(filename);