We have a generic unlocking infrastructure, but all SPI chips ignored
it. Fix it.
Actually check if the unlock worked instead of just assuming it worked.

This depends on [PATCH] Convert SPI chips to partial write.

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

diff -ur flashrom-partial_write_spi_intermediate/bitbang_spi.c 
flashrom-spi_unlock_refactor/bitbang_spi.c
--- flashrom-partial_write_spi_intermediate/bitbang_spi.c       2010-07-09 
19:11:10.000000000 +0200
+++ flashrom-spi_unlock_refactor/bitbang_spi.c  2010-07-10 02:55:40.000000000 
+0200
@@ -141,6 +141,5 @@
 
 int bitbang_spi_write_256(struct flashchip *flash, uint8_t *buf, int start, 
int len)
 {
-       spi_disable_blockprotect();
        return spi_write_chunked(flash, buf, start, len, 256);
 }
diff -ur flashrom-partial_write_spi_intermediate/buspirate_spi.c 
flashrom-spi_unlock_refactor/buspirate_spi.c
--- flashrom-partial_write_spi_intermediate/buspirate_spi.c     2010-07-08 
12:15:05.000000000 +0200
+++ flashrom-spi_unlock_refactor/buspirate_spi.c        2010-07-10 
02:53:48.000000000 +0200
@@ -311,6 +311,5 @@
 
 int buspirate_spi_write_256(struct flashchip *flash, uint8_t *buf, int start, 
int len)
 {
-       spi_disable_blockprotect();
        return spi_write_chunked(flash, buf, start, len, 12);
 }
diff -ur flashrom-partial_write_spi_intermediate/chipdrivers.h 
flashrom-spi_unlock_refactor/chipdrivers.h
--- flashrom-partial_write_spi_intermediate/chipdrivers.h       2010-07-09 
19:04:47.000000000 +0200
+++ flashrom-spi_unlock_refactor/chipdrivers.h  2010-07-10 02:53:42.000000000 
+0200
@@ -47,7 +47,7 @@
 int spi_chip_write_256_new(struct flashchip *flash, uint8_t *buf, int start, 
int len);
 int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len);
 uint8_t spi_read_status_register(void);
-int spi_disable_blockprotect(void);
+int spi_disable_blockprotect(struct flashchip *flash);
 int spi_byte_program(int addr, uint8_t databyte);
 int spi_nbyte_program(int addr, uint8_t *bytes, int len);
 int spi_nbyte_read(int addr, uint8_t *bytes, int len);
diff -ur flashrom-partial_write_spi_intermediate/flashchips.c 
flashrom-spi_unlock_refactor/flashchips.c
--- flashrom-partial_write_spi_intermediate/flashchips.c        2010-07-09 
19:05:21.000000000 +0200
+++ flashrom-spi_unlock_refactor/flashchips.c   2010-07-10 02:52:48.000000000 
+0200
@@ -335,6 +335,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -369,6 +370,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -403,6 +405,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -437,6 +440,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -471,6 +475,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -505,6 +510,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -539,6 +545,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -573,6 +580,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -607,6 +615,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -641,6 +650,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -697,6 +707,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -731,6 +742,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -765,6 +777,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -781,6 +794,7 @@
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
          },*/
@@ -1184,6 +1198,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1215,6 +1230,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1392,6 +1408,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = read_memmapped,
        },
@@ -1422,6 +1439,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1452,6 +1470,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1482,6 +1501,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1512,6 +1532,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1543,6 +1564,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1574,6 +1596,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1605,6 +1628,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1636,6 +1660,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1667,6 +1692,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1698,6 +1724,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1729,6 +1756,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1760,6 +1788,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1791,6 +1820,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1822,6 +1852,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1853,6 +1884,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1884,6 +1916,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1918,6 +1951,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1952,6 +1986,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -1986,6 +2021,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2020,6 +2056,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2051,6 +2088,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2082,6 +2120,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2113,6 +2152,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2144,6 +2184,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2687,6 +2728,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2718,6 +2760,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2752,6 +2795,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2786,6 +2830,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2820,6 +2865,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2854,6 +2900,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2885,6 +2932,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2916,6 +2964,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2947,6 +2996,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -2978,6 +3028,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3009,6 +3060,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3189,6 +3241,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3217,6 +3270,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3245,6 +3299,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3273,6 +3328,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3301,6 +3357,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3329,6 +3386,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3363,6 +3421,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3391,6 +3450,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3419,6 +3479,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3453,6 +3514,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3481,6 +3543,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3715,6 +3778,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3772,6 +3836,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3797,6 +3862,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -3831,6 +3897,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -3865,6 +3932,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -3893,6 +3961,7 @@
                                .block_erase = spi_block_erase_60,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -3927,6 +3996,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -3955,6 +4025,7 @@
                                .block_erase = spi_block_erase_60,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -3989,6 +4060,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -4023,6 +4095,7 @@
                                .block_erase = spi_block_erase_c7,
                        },
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1,
                .read           = spi_chip_read,
        },
@@ -4803,6 +4876,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -4833,6 +4907,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1, /* 128 */
                .read           = spi_chip_read,
        },
@@ -4858,6 +4933,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -4884,6 +4960,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_1, /* 128 */
                .read           = spi_chip_read,
        },
@@ -4909,6 +4986,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -4934,6 +5012,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -4959,6 +5038,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -4984,6 +5064,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5009,6 +5090,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5034,6 +5116,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5059,6 +5142,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5084,6 +5168,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5765,6 +5850,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5799,6 +5885,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5833,6 +5920,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5867,6 +5955,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5895,6 +5984,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5923,6 +6013,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5951,6 +6042,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -5979,6 +6071,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -6013,6 +6106,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -6047,6 +6141,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
@@ -6081,6 +6176,7 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
+               .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
diff -ur flashrom-partial_write_spi_intermediate/ft2232_spi.c 
flashrom-spi_unlock_refactor/ft2232_spi.c
--- flashrom-partial_write_spi_intermediate/ft2232_spi.c        2010-07-08 
12:15:05.000000000 +0200
+++ flashrom-spi_unlock_refactor/ft2232_spi.c   2010-07-10 02:55:44.000000000 
+0200
@@ -290,7 +290,6 @@
 
 int ft2232_spi_write_256(struct flashchip *flash, uint8_t *buf, int start, int 
len)
 {
-       spi_disable_blockprotect();
        return spi_write_chunked(flash, buf, start, len, 256);
 }
 
diff -ur flashrom-partial_write_spi_intermediate/ichspi.c 
flashrom-spi_unlock_refactor/ichspi.c
--- flashrom-partial_write_spi_intermediate/ichspi.c    2010-07-09 
19:12:42.000000000 +0200
+++ flashrom-spi_unlock_refactor/ichspi.c       2010-07-10 02:53:55.000000000 
+0200
@@ -690,7 +690,6 @@
        if (spi_controller == SPI_CONTROLLER_VIA)
                maxdata = 16;
 
-       spi_disable_blockprotect();
        return spi_write_chunked(flash, buf, start, len, maxdata);
 }
 
diff -ur flashrom-partial_write_spi_intermediate/it87spi.c 
flashrom-spi_unlock_refactor/it87spi.c
--- flashrom-partial_write_spi_intermediate/it87spi.c   2010-07-09 
23:28:52.000000000 +0200
+++ flashrom-spi_unlock_refactor/it87spi.c      2010-07-10 02:55:48.000000000 
+0200
@@ -355,7 +355,6 @@
                spi_chip_write_1_new(flash, buf, start, len);
        } else {
                int writehere;
-               spi_disable_blockprotect();
 
                if (start % 256) {
                        /* start to the end of the page or start + len,
diff -ur flashrom-partial_write_spi_intermediate/sb600spi.c 
flashrom-spi_unlock_refactor/sb600spi.c
--- flashrom-partial_write_spi_intermediate/sb600spi.c  2010-05-31 
00:36:09.000000000 +0200
+++ flashrom-spi_unlock_refactor/sb600spi.c     2010-07-10 02:53:50.000000000 
+0200
@@ -50,7 +50,6 @@
 
 int sb600_spi_write_256(struct flashchip *flash, uint8_t *buf, int start, int 
len)
 {
-       spi_disable_blockprotect();
        return spi_write_chunked(flash, buf, start, len, 5);
 }
 
diff -ur flashrom-partial_write_spi_intermediate/spi25.c 
flashrom-spi_unlock_refactor/spi25.c
--- flashrom-partial_write_spi_intermediate/spi25.c     2010-07-09 
23:40:22.000000000 +0200
+++ flashrom-spi_unlock_refactor/spi25.c        2010-07-10 02:56:49.000000000 
+0200
@@ -436,12 +436,6 @@
                .readarr        = NULL,
        }};
        
-       result = spi_disable_blockprotect();
-       if (result) {
-               msg_cerr("spi_disable_blockprotect failed\n");
-               return result;
-       }
-       
        result = spi_send_multicommand(cmds);
        if (result) {
                msg_cerr("%s failed during command execution\n",
@@ -482,12 +476,6 @@
                .readarr        = NULL,
        }};
 
-       result = spi_disable_blockprotect();
-       if (result) {
-               msg_cerr("spi_disable_blockprotect failed\n");
-               return result;
-       }
-
        result = spi_send_multicommand(cmds);
        if (result) {
                msg_cerr("%s failed during command execution\n", __func__);
@@ -841,7 +829,7 @@
        return result;
 }
 
-int spi_disable_blockprotect(void)
+int spi_disable_blockprotect(struct flashchip *flash)
 {
        uint8_t status;
        int result;
@@ -855,6 +843,11 @@
                        msg_cerr("spi_write_status_register failed\n");
                        return result;
                }
+               status = spi_read_status_register();
+               if ((status & 0x3c) != 0) {
+                       msg_cerr("Block protection could not be disabled!\n");
+                       /* Should we error out here? */
+               }
        }
        return 0;
 }
@@ -970,7 +963,6 @@
 {
        int i, result = 0;
 
-       spi_disable_blockprotect();
        for (i = start; i < start + len; i++) {
                result = spi_byte_program(i, buf[i]);
                if (result)
@@ -984,7 +976,6 @@
 
 int spi_chip_write_1(struct flashchip *flash, uint8_t *buf)
 {
-       spi_disable_blockprotect();
        /* Erase first */
        msg_cinfo("Erasing flash before programming... ");
        if (erase_flash(flash)) {
diff -ur flashrom-partial_write_spi_intermediate/spi.c 
flashrom-spi_unlock_refactor/spi.c
--- flashrom-partial_write_spi_intermediate/spi.c       2010-07-09 
19:16:09.000000000 +0200
+++ flashrom-spi_unlock_refactor/spi.c  2010-07-10 02:54:07.000000000 +0200
@@ -215,7 +215,6 @@
 {
        int ret;
 
-       spi_disable_blockprotect();
        msg_pinfo("Erasing flash before programming... ");
        if (erase_flash(flash)) {
                msg_perr("ERASE FAILED!\n");


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


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

Reply via email to