[coreboot] [flashrom][patch] enable/use flash chip read/erase return codes

Stephan GUILLOUX stephan.guilloux at free.fr
Tue May 26 02:51:31 CEST 2009


    Hello,

A last patch for tonight, to use chips read/erase return codes. erase()
is not
fully modified, though.
flash_read() is unchanged, as I also have a patch pending in this area.

Make good use of it ;-)

    Stephan.

Signed-off-by: Stephan Guilloux <stephan.guilloux at free.fr>
Index: flashrom-read-return-code/trunk/it87spi.c
===================================================================
--- flashrom-read-return-code/trunk/it87spi.c    (révision 547)
+++ flashrom-read-return-code/trunk/it87spi.c    (copie de travail)
@@ -238,21 +238,22 @@
 int it8716f_spi_chip_read(struct flashchip *flash, uint8_t *buf)
 {
     int total_size = 1024 * flash->total_size;
+    int rc = 0;
     int i;
     fast_spi = 0;
 
     if (total_size > 512 * 1024) {
-        for (i = 0; i < total_size; i += 3) {
+        for (i = 0; (i < total_size) && (rc == 0); i += 3) {
             int toread = 3;
             if (total_size - i < toread)
                 toread = total_size - i;
-            spi_nbyte_read(i, buf + i, toread);
+            rc = spi_nbyte_read(i, buf + i, toread);
         }
     } else {
         memcpy(buf, (const char *)flash->virtual_memory, total_size);
     }
 
-    return 0;
+    return rc;
 }
 
 int it8716f_spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
Index: flashrom-read-return-code/trunk/sb600spi.c
===================================================================
--- flashrom-read-return-code/trunk/sb600spi.c    (révision 547)
+++ flashrom-read-return-code/trunk/sb600spi.c    (copie de travail)
@@ -45,9 +45,9 @@
     int total_size = flash->total_size * 1024;
     int page_size = 8;
 
-    for (i = 0; i < total_size / page_size; i++)
-        spi_nbyte_read(i * page_size, (void *)(buf + i * page_size),
-                   page_size);
+    for (i = 0; (i < total_size / page_size) && (rc == 0); i++)
+        rc = spi_nbyte_read(i * page_size, (void *)(buf + i * page_size),
+                    page_size);
     return rc;
 }
 
Index: flashrom-read-return-code/trunk/flashrom.c
===================================================================
--- flashrom-read-return-code/trunk/flashrom.c    (révision 547)
+++ flashrom-read-return-code/trunk/flashrom.c    (copie de travail)
@@ -208,12 +208,19 @@
     int idx;
     int total_size = flash->total_size * 1024;
     uint8_t *buf2 = (uint8_t *) calloc(total_size, sizeof(char));
+
+    printf ("Reading flash... ");
     if (!flash->read) {
         printf("FAILED!\n");
         fprintf(stderr, "ERROR: flashrom has no read function for this
flash chip.\n");
         return 1;
-    } else
-        flash->read(flash, buf2);
+    }
+    if (flash->read(flash, buf2)) {
+        printf("FAILED!\n");
+        fprintf(stderr, "ERROR : flashrom cannot read this flash chip.\n");
+        return 1;
+    }
+    printf ("passed\n");
 
     printf("Verifying flash... ");
 
@@ -286,15 +293,28 @@
         fprintf(stderr, "ERROR: flashrom has no erase function for this
flash chip.\n");
         return 1;
     }
-    flash->erase(flash);
+    if (flash->erase(flash)) {
+        printf("FAILED!\n");
+        fprintf(stderr, "ERROR: flashrom cannot erase this flash chip.\n");
+        return 1;
+    }
+    printf ("passed.\n");
 
     if (!flash->read) {
         printf("FAILED!\n");
         fprintf(stderr, "ERROR: flashrom has no read function for this
flash chip.\n");
         return 1;
-    } else
-        flash->read(flash, buf);
+    }
 
+    printf ("Reading flash... ");
+    if (flash->read(flash, buf)) {
+        printf("FAILED!\n");
+        fprintf(stderr, "ERROR: flashrom cannot read this flash chip.\n");
+        return 1;
+    }
+    printf ("passed.\n");
+
+    printf ("Checking... ");
     for (erasedbytes = 0; erasedbytes < size; erasedbytes++)
         if (0xff != buf[erasedbytes]) {
             printf("FAILED!\n");
@@ -618,8 +638,12 @@
                 printf("FAILED!\n");
                 fprintf(stderr, "ERROR: flashrom has no read function
for this flash chip.\n");
                 return 1;
-            } else
-                flashes[0]->read(flashes[0], buf);
+            }
+            if (flashes[0]->read(flashes[0], buf)) {
+                printf("FAILED!\n");
+                fprintf(stderr, "ERROR : flashrom cannot read this
flash chip.\n");
+                return 1;
+            }
 
             if (exclude_end_position - exclude_start_position > 0)
                 memset(buf + exclude_start_position, 0,

-------------- next part --------------
A non-text attachment was scrubbed...
Name: flashrom-read-return-code.patch
Type: text/x-diff
Size: 3678 bytes
Desc: not available
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20090526/fc766d5d/attachment.bin>


More information about the coreboot mailing list