Introduce proper error checking for SPI programming.

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>

Index: flashrom-spi_program_errorcheck/spi.c
===================================================================
--- flashrom-spi_program_errorcheck/spi.c       (Revision 725)
+++ flashrom-spi_program_errorcheck/spi.c       (Arbeitskopie)
@@ -971,7 +971,7 @@
 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 */
@@ -982,7 +982,9 @@
        }
        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);
        }
Index: flashrom-spi_program_errorcheck/sb600spi.c
===================================================================
--- flashrom-spi_program_errorcheck/sb600spi.c  (Revision 725)
+++ flashrom-spi_program_errorcheck/sb600spi.c  (Arbeitskopie)
@@ -48,9 +48,9 @@
 /* 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 @@
 
        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 @@
                        ;
        }
        printf(" done.\n");
-       return rc;
+       return result;
 }
 
 static void reset_internal_fifo_pointer(void)


-- 
http://www.hailfinger.org/


_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to