Author: hailfinger
Date: 2009-10-01 15:16:32 +0200 (Thu, 01 Oct 2009)
New Revision: 739

Modified:
   trunk/sb600spi.c
   trunk/spi.c
Log:
Introduce proper error checking for SPI programming.

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


Modified: trunk/sb600spi.c
===================================================================
--- trunk/sb600spi.c    2009-10-01 13:15:01 UTC (rev 738)
+++ trunk/sb600spi.c    2009-10-01 13:16:32 UTC (rev 739)
@@ -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)

Modified: trunk/spi.c
===================================================================
--- trunk/spi.c 2009-10-01 13:15:01 UTC (rev 738)
+++ trunk/spi.c 2009-10-01 13:16:32 UTC (rev 739)
@@ -970,7 +970,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 */
@@ -981,7 +981,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);
        }


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

Reply via email to