On 22.04.2009 01:29, Carl-Daniel Hailfinger wrote:
Flashrom does not support any notion of multiple probe functions for the same chip nor does it support multiple IDs for the same chip. For external flasher support with a clean design, this has to be changed.
Group each probe function together with the associated IDs in the flash chip description. They belong together.
The trick in this patch is to use an anonymous struct which allows the chip-specific code to stay unchanged for now, while still keeping full functionality. Besides easing review, it also keeps the tree working and bisectable.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Now that flashrom 0.9.0 is out, can we please merge this?
Regards, Carl-Daniel
Index: flashrom-probe_grouping/flash.h
--- flashrom-probe_grouping/flash.h (Revision 4161) +++ flashrom-probe_grouping/flash.h (Arbeitskopie) @@ -98,8 +98,11 @@ * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's * Identification code. */
struct { uint32_t manufacture_id; uint32_t model_id;
int (*probe) (struct flashchip *flash);
};
int total_size; int page_size;
@@ -110,7 +113,6 @@ */ uint32_t tested;
- int (*probe) (struct flashchip *flash); int (*erase) (struct flashchip *flash); int (*write) (struct flashchip *flash, uint8_t *buf); int (*read) (struct flashchip *flash, uint8_t *buf);
Index: flashrom-probe_grouping/flashchips.c
--- flashrom-probe_grouping/flashchips.c (Revision 4161) +++ flashrom-probe_grouping/flashchips.c (Arbeitskopie) @@ -31,21 +31,33 @@ */ struct flashchip flashchips[] = {
- /* Vendor, Chip, Vendor ID, Chip ID,
* Total size (kB), Page size (B),
* Test status,
* Probe function, Erase function, Write function, Read function
/*
* .vendor = Vendor name
* .name = Chip name
* { Probe/ID tuple
* .manufacture_id = Manufacturer chip ID
* .model_id = Model chip ID
* .probe = Probe function
* },
* .total_size = Total size in (binary) kbytes
* .page_size = Page or eraseblock(?) size in bytes
* .tested = Test status
* .erase = Chip erase function
* .write = Chip write function
* .read = Chip read function
*/
{ .vendor = "AMD", .name = "Am29F002(N)BB",
{
.manufacture_id = AMD_ID, .model_id = AM_29F002BB,
.probe = probe_jedec,
},
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,
.erase = erase_chip_jedec, .write = write_en29f002a, },.probe = probe_jedec,
@@ -53,12 +65,14 @@ { .vendor = "AMD", .name = "Am29F002(N)BT",
.manufacture_id = AMD_ID, .model_id = AM_29F002BT,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_en29f002a, },.probe = probe_jedec,
@@ -66,12 +80,14 @@ { .vendor = "AMD", .name = "Am29F016D",
.manufacture_id = AMD_ID, .model_id = AM_29F016D,{
.probe = probe_29f040b,
.total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -79,12 +95,14 @@ { .vendor = "AMD", .name = "Am29F040B",
.manufacture_id = AMD_ID, .model_id = AM_29F040B,{
.probe = probe_29f040b,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -92,12 +110,14 @@ { .vendor = "AMD", .name = "Am29F080B",
.manufacture_id = 0x01, .model_id = 0xd5,{
.probe = probe_jedec,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_jedec,
@@ -105,12 +125,14 @@ { .vendor = "AMD", .name = "Am29LV040B",
.manufacture_id = AMD_ID, .model_id = AM_29LV040B,{
.probe = probe_29f040b,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -118,12 +140,14 @@ { .vendor = "AMD", .name = "Am29LV081B",
.manufacture_id = 0x01, .model_id = 0x38,{
.probe = probe_29f040b,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -131,12 +155,14 @@ { .vendor = "ASD", .name = "AE49F2008",
.manufacture_id = ASD_ID, .model_id = ASD_AE49F2008,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -144,12 +170,14 @@ { .vendor = "Atmel", .name = "AT25DF021",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF021,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -158,12 +186,14 @@ { .vendor = "Atmel", .name = "AT25DF041A",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF041A,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -172,12 +202,14 @@ { .vendor = "Atmel", .name = "AT25DF081",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF081,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -186,12 +218,14 @@ { .vendor = "Atmel", .name = "AT25DF161",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF161,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -200,12 +234,14 @@ { .vendor = "Atmel", .name = "AT25DF321",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF321,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -214,12 +250,14 @@ { .vendor = "Atmel", .name = "AT25DF321A",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF321A,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -228,12 +266,14 @@ { .vendor = "Atmel", .name = "AT25DF641",
.manufacture_id = ATMEL_ID, .model_id = AT_25DF641,{
.probe = probe_spi_rdid,
.total_size = 8192, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -242,12 +282,14 @@ { .vendor = "Atmel", .name = "AT25F512B",
.manufacture_id = ATMEL_ID, .model_id = AT_25F512B,{
.probe = probe_spi_rdid,
.total_size = 64, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -256,12 +298,14 @@ { .vendor = "Atmel", .name = "AT25FS010",
.manufacture_id = ATMEL_ID, .model_id = AT_25FS010,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -270,12 +314,14 @@ { .vendor = "Atmel", .name = "AT25FS040",
.manufacture_id = ATMEL_ID, .model_id = AT_25FS040,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -284,12 +330,14 @@ { .vendor = "Atmel", .name = "AT26DF041",
.manufacture_id = ATMEL_ID, .model_id = AT_26DF041,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL /* Incompatible Page write */, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -298,12 +346,14 @@ { .vendor = "Atmel", .name = "AT26DF081A",
.manufacture_id = ATMEL_ID, .model_id = AT_26DF081A,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -312,12 +362,14 @@ { .vendor = "Atmel", .name = "AT26DF161",
.manufacture_id = ATMEL_ID, .model_id = AT_26DF161,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -326,12 +378,14 @@ { .vendor = "Atmel", .name = "AT26DF161A",
.manufacture_id = ATMEL_ID, .model_id = AT_26DF161A,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -341,12 +395,14 @@ /*{ .vendor = "Atmel", .name = "AT26DF321",
.manufacture_id = ATMEL_ID, .model_id = AT_26DF321,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -355,12 +411,14 @@ { .vendor = "Atmel", .name = "AT26F004",
.manufacture_id = ATMEL_ID, .model_id = AT_26F004,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = NULL /* Incompatible Page write */, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -369,12 +427,14 @@ { .vendor = "Atmel", .name = "AT29C020",
.manufacture_id = ATMEL_ID, .model_id = AT_29C020,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -382,12 +442,14 @@ { .vendor = "Atmel", .name = "AT29C040A",
.manufacture_id = ATMEL_ID, .model_id = AT_29C040A,{
.probe = probe_jedec,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -395,12 +457,14 @@ { .vendor = "Atmel", .name = "AT45CS1282",
.manufacture_id = ATMEL_ID, .model_id = AT_45CS1282,{
.probe = probe_spi_rdid,
.total_size = 16896 /* No power of two sizes */, .page_size = 1056 /* No power of two sizes */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL /* Incompatible Page write */, .read = NULL /* Incompatible read */,.probe = probe_spi_rdid,
@@ -409,12 +473,14 @@ { .vendor = "Atmel", .name = "AT45DB011D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB011D,{
.probe = probe_spi_rdid,
.total_size = 128 /* Size can only be determined from status register */, .page_size = 256 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -423,12 +489,14 @@ { .vendor = "Atmel", .name = "AT45DB021D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB021D,{
.probe = probe_spi_rdid,
.total_size = 256 /* Size can only be determined from status register */, .page_size = 256 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -437,12 +505,14 @@ { .vendor = "Atmel", .name = "AT45DB041D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB041D,{
.probe = probe_spi_rdid,
.total_size = 512 /* Size can only be determined from status register */, .page_size = 256 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -451,12 +521,14 @@ { .vendor = "Atmel", .name = "AT45DB081D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB081D,{
.probe = probe_spi_rdid,
.total_size = 1024 /* Size can only be determined from status register */, .page_size = 256 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -465,12 +537,14 @@ { .vendor = "Atmel", .name = "AT45DB161D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB161D,{
.probe = probe_spi_rdid,
.total_size = 2048 /* Size can only be determined from status register */, .page_size = 512 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -479,12 +553,14 @@ { .vendor = "Atmel", .name = "AT45DB321C",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB321C,{
.probe = probe_spi_rdid,
.total_size = 4224 /* No power of two sizes */, .page_size = 528 /* No power of two sizes */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL /* Incompatible read */,.probe = probe_spi_rdid,
@@ -493,12 +569,14 @@ { .vendor = "Atmel", .name = "AT45DB321D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB321D,{
.probe = probe_spi_rdid,
.total_size = 4096 /* Size can only be determined from status register */, .page_size = 512 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -507,12 +585,14 @@ { .vendor = "Atmel", .name = "AT45DB642D",
.manufacture_id = ATMEL_ID, .model_id = AT_45DB642D,{
.probe = probe_spi_rdid,
.total_size = 8192 /* Size can only be determined from status register */, .page_size = 1024 /* Size can only be determined from status register */, .tested = TEST_BAD_READ,},
.erase = NULL, .write = NULL, .read = NULL,.probe = probe_spi_rdid,
@@ -521,12 +601,14 @@ { .vendor = "Atmel", .name = "AT49F002(N)",
.manufacture_id = ATMEL_ID, .model_id = AT_49F002N,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -534,12 +616,14 @@ { .vendor = "Atmel", .name = "AT49F002(N)T",
.manufacture_id = ATMEL_ID, .model_id = AT_49F002NT,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -547,12 +631,14 @@ { .vendor = "AMIC", .name = "A25L40P",
.manufacture_id = AMIC_ID, .model_id = AMIC_A25L40P,{
.probe = probe_spi_rdid4,
.total_size = 512, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid4,
@@ -561,12 +647,14 @@ { .vendor = "AMIC", .name = "A29002B",
.manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29002B,{
.probe = probe_29f002,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f002, .write = write_29f002, },.probe = probe_29f002,
@@ -574,12 +662,14 @@ { .vendor = "AMIC", .name = "A29002T",
.manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29002T,{
.probe = probe_29f002,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_29f002, .write = write_29f002, },.probe = probe_29f002,
@@ -587,12 +677,14 @@ { .vendor = "AMIC", .name = "A29040B",
.manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29040B,{
.probe = probe_29f040b,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PR,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -600,12 +692,14 @@ { .vendor = "AMIC", .name = "A49LF040A",
.manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A49LF040A,{
.probe = probe_49fl00x,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_49fl00x, .write = write_49fl00x, },.probe = probe_49fl00x,
@@ -613,12 +707,14 @@ { .vendor = "EMST", .name = "F49B002UA",
.manufacture_id = EMST_ID, .model_id = EMST_F49B002UA,{
.probe = probe_jedec,
.total_size = 256, .page_size = 4096, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -626,12 +722,14 @@ { .vendor = "EON", .name = "EN29F002(A)(N)B",
.manufacture_id = EON_ID, .model_id = EN_29F002B,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_en29f002a, },.probe = probe_jedec,
@@ -639,12 +737,14 @@ { .vendor = "EON", .name = "EN29F002(A)(N)T",
.manufacture_id = EON_ID, .model_id = EN_29F002T,{
.probe = probe_jedec,
.total_size = 256, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_en29f002a, },.probe = probe_jedec,
@@ -652,12 +752,14 @@ { .vendor = "Fujitsu", .name = "MBM29F004BC",
.manufacture_id = FUJITSU_ID, .model_id = MBM29F004BC,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_jedec,
@@ -665,12 +767,14 @@ { .vendor = "Fujitsu", .name = "MBM29F004TC",
.manufacture_id = FUJITSU_ID, .model_id = MBM29F004TC,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_jedec,
@@ -678,12 +782,14 @@ { .vendor = "Fujitsu", .name = "MBM29F400BC",
.manufacture_id = FUJITSU_ID, .model_id = MBM29F400BC,{
.probe = probe_m29f400bt,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, },.probe = probe_m29f400bt,
@@ -691,12 +797,14 @@ { .vendor = "Fujitsu", .name = "MBM29F400TC",
.manufacture_id = FUJITSU_ID, .model_id = MBM29F400TC,{
.probe = probe_m29f400bt,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, },.probe = probe_m29f400bt,
@@ -704,12 +812,14 @@ { .vendor = "Intel", .name = "82802AB",
.manufacture_id = INTEL_ID, .model_id = 173,{
.probe = probe_82802ab,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_82802ab, .write = write_82802ab, },.probe = probe_82802ab,
@@ -717,12 +827,14 @@ { .vendor = "Intel", .name = "82802AC",
.manufacture_id = INTEL_ID, .model_id = 172,{
.probe = probe_82802ab,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_82802ab, .write = write_82802ab, },.probe = probe_82802ab,
@@ -730,12 +842,14 @@ { .vendor = "Macronix", .name = "MX25L512",
.manufacture_id = MX_ID, .model_id = MX_25L512,{
.probe = probe_spi_rdid,
.total_size = 64, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -744,12 +858,14 @@ { .vendor = "Macronix", .name = "MX25L1005",
.manufacture_id = MX_ID, .model_id = MX_25L1005,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -758,12 +874,14 @@ { .vendor = "Macronix", .name = "MX25L2005",
.manufacture_id = MX_ID, .model_id = MX_25L2005,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -772,12 +890,14 @@ { .vendor = "Macronix", .name = "MX25L4005",
.manufacture_id = MX_ID, .model_id = MX_25L4005,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -786,12 +906,14 @@ { .vendor = "Macronix", .name = "MX25L8005",
.manufacture_id = MX_ID, .model_id = MX_25L8005,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -800,12 +922,14 @@ { .vendor = "Macronix", .name = "MX25L1605",
.manufacture_id = MX_ID, .model_id = MX_25L1605,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -814,12 +938,14 @@ { .vendor = "Macronix", .name = "MX25L1635D",
.manufacture_id = MX_ID, .model_id = MX_25L1635D,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -828,12 +954,14 @@ { .vendor = "Macronix", .name = "MX25L3205",
.manufacture_id = MX_ID, .model_id = MX_25L3205,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -842,12 +970,14 @@ { .vendor = "Macronix", .name = "MX25L6405",
.manufacture_id = MX_ID, .model_id = MX_25L6405,{
.probe = probe_spi_rdid,
.total_size = 8192, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -856,12 +986,14 @@ { .vendor = "Macronix", .name = "MX25L12805",
.manufacture_id = MX_ID, .model_id = MX_25L12805,{
.probe = probe_spi_rdid,
.total_size = 16384, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -870,12 +1002,14 @@ { .vendor = "Macronix", .name = "MX29F002B",
.manufacture_id = MX_ID, .model_id = MX_29F002B,{
.probe = probe_29f002,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f002, .write = write_29f002, },.probe = probe_29f002,
@@ -883,12 +1017,14 @@ { .vendor = "Macronix", .name = "MX29F002T",
.manufacture_id = MX_ID, .model_id = MX_29F002T,{
.probe = probe_29f002,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_29f002, .write = write_29f002, },.probe = probe_29f002,
@@ -896,12 +1032,14 @@ { .vendor = "Macronix", .name = "MX29LV040C",
.manufacture_id = MX_ID, .model_id = MX_29LV040C,{
.probe = probe_29f002,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PR,},
.erase = erase_29f002, .write = write_29f002, },.probe = probe_29f002,
@@ -909,12 +1047,14 @@ { .vendor = "Numonyx", .name = "M25PE10",
.manufacture_id = ST_ID, .model_id = 0x8011,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -923,12 +1063,14 @@ { .vendor = "Numonyx", .name = "M25PE20",
.manufacture_id = ST_ID, .model_id = 0x8012,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -937,12 +1079,14 @@ { .vendor = "Numonyx", .name = "M25PE40",
.manufacture_id = ST_ID, .model_id = 0x8013,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -951,12 +1095,14 @@ { .vendor = "Numonyx", .name = "M25PE80",
.manufacture_id = ST_ID, .model_id = 0x8014,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -965,12 +1111,14 @@ { .vendor = "Numonyx", .name = "M25PE16",
.manufacture_id = ST_ID, .model_id = 0x8015,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -979,12 +1127,14 @@ { .vendor = "PMC", .name = "Pm25LV010",
.manufacture_id = PMC_ID, .model_id = PMC_25LV010,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -993,12 +1143,14 @@ { .vendor = "PMC", .name = "Pm25LV016B",
.manufacture_id = PMC_ID, .model_id = PMC_25LV016B,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1007,12 +1159,14 @@ { .vendor = "PMC", .name = "Pm25LV020",
.manufacture_id = PMC_ID, .model_id = PMC_25LV020,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1021,12 +1175,14 @@ { .vendor = "PMC", .name = "Pm25LV040",
.manufacture_id = PMC_ID, .model_id = PMC_25LV040,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1035,12 +1191,14 @@ { .vendor = "PMC", .name = "Pm25LV080B",
.manufacture_id = PMC_ID, .model_id = PMC_25LV080B,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1049,12 +1207,14 @@ { .vendor = "PMC", .name = "Pm25LV512",
.manufacture_id = PMC_ID, .model_id = PMC_25LV512,{
.probe = probe_spi_rdid,
.total_size = 64, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1063,12 +1223,14 @@ { .vendor = "PMC", .name = "Pm49FL002",
.manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL002,{
.probe = probe_49fl00x,
.total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_49fl00x, .write = write_49fl00x, },.probe = probe_49fl00x,
@@ -1076,12 +1238,14 @@ { .vendor = "PMC", .name = "Pm49FL004",
.manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL004,{
.probe = probe_49fl00x,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_49fl00x, .write = write_49fl00x, },.probe = probe_49fl00x,
@@ -1089,12 +1253,14 @@ { .vendor = "Sharp", .name = "LHF00L04",
.manufacture_id = SHARP_ID, .model_id = SHARP_LHF00L04,{
.probe = probe_lhf00l04,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_lhf00l04, .write = write_lhf00l04, },.probe = probe_lhf00l04,
@@ -1102,12 +1268,14 @@ { .vendor = "Spansion", .name = "S25FL016A",
.manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL016A,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1116,12 +1284,14 @@ { .vendor = "SST", .name = "SST25VF016B",
.manufacture_id = SST_ID, .model_id = SST_25VF016B,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1130,12 +1300,14 @@ { .vendor = "SST", .name = "SST25VF032B",
.manufacture_id = SST_ID, .model_id = SST_25VF032B,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1144,12 +1316,14 @@ { .vendor = "SST", .name = "SST25VF040B",
.manufacture_id = SST_ID, .model_id = SST_25VF040B,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1158,12 +1332,14 @@ { .vendor = "SST", .name = "SST25VF040.REMS",
.manufacture_id = 0xbf, .model_id = 0x44,{
.probe = probe_spi_rems,
.total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PR,},
.erase = spi_chip_erase_60, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rems,
@@ -1172,12 +1348,14 @@ { .vendor = "SST", .name = "SST25VF040B.REMS",
.manufacture_id = 0xbf, .model_id = 0x8d,{
.probe = probe_spi_rems,
.total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PR,},
.erase = spi_chip_erase_c7, .write = spi_aai_write, .read = spi_chip_read,.probe = probe_spi_rems,
@@ -1186,12 +1364,14 @@ { .vendor = "SST", .name = "SST25VF080B",
.manufacture_id = SST_ID, .model_id = SST_25VF080B,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_OK_PROBE,},
.erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1200,12 +1380,14 @@ { .vendor = "SST", .name = "SST28SF040A",
.manufacture_id = SST_ID, .model_id = SST_28SF040,{
.probe = probe_28sf040,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = erase_28sf040, .write = write_28sf040, },.probe = probe_28sf040,
@@ -1213,12 +1395,14 @@ { .vendor = "SST", .name = "SST29EE010",
.manufacture_id = SST_ID, .model_id = SST_29EE010,{
.probe = probe_jedec,
.total_size = 128, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1226,12 +1410,14 @@ { .vendor = "SST", .name = "SST29LE010",
.manufacture_id = SST_ID, .model_id = SST_29LE010,{
.probe = probe_jedec,
.total_size = 128, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1239,12 +1425,14 @@ { .vendor = "SST", .name = "SST29EE020A",
.manufacture_id = SST_ID, .model_id = SST_29EE020A,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1252,12 +1440,14 @@ { .vendor = "SST", .name = "SST29LE020",
.manufacture_id = SST_ID, .model_id = SST_29LE020,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1265,12 +1455,14 @@ { .vendor = "SST", .name = "SST39SF010A",
.manufacture_id = SST_ID, .model_id = SST_39SF010,{
.probe = probe_jedec,
.total_size = 128, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1278,12 +1470,14 @@ { .vendor = "SST", .name = "SST39SF020A",
.manufacture_id = SST_ID, .model_id = SST_39SF020,{
.probe = probe_jedec,
.total_size = 256, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1291,12 +1485,14 @@ { .vendor = "SST", .name = "SST39SF040",
.manufacture_id = SST_ID, .model_id = SST_39SF040,{
.probe = probe_jedec,
.total_size = 512, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1304,12 +1500,14 @@ { .vendor = "SST", .name = "SST39VF512",
.manufacture_id = SST_ID, .model_id = SST_39VF512,{
.probe = probe_jedec,
.total_size = 64, .page_size = 4096, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1317,12 +1515,14 @@ { .vendor = "SST", .name = "SST39VF010",
.manufacture_id = SST_ID, .model_id = SST_39VF010,{
.probe = probe_jedec,
.total_size = 128, .page_size = 4096, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1330,12 +1530,14 @@ { .vendor = "SST", .name = "SST39VF020",
.manufacture_id = SST_ID, .model_id = SST_39VF020,{
.probe = probe_jedec,
.total_size = 256, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1343,12 +1545,14 @@ { .vendor = "SST", .name = "SST39VF040",
.manufacture_id = SST_ID, .model_id = SST_39VF040,{
.probe = probe_jedec,
.total_size = 512, .page_size = 4096, .tested = TEST_OK_PROBE,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1356,12 +1560,14 @@ { .vendor = "SST", .name = "SST39VF080",
.manufacture_id = 0xbf, .model_id = 0xd8,{
.probe = probe_jedec,
.total_size = 1024, .page_size = 4096, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -1369,12 +1575,14 @@ { .vendor = "SST", .name = "SST49LF002A/B",
.manufacture_id = SST_ID, .model_id = SST_49LF002A,{
.probe = probe_sst_fwhub,
.total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_sst_fwhub, .write = write_sst_fwhub, },.probe = probe_sst_fwhub,
@@ -1382,12 +1590,14 @@ { .vendor = "SST", .name = "SST49LF003A/B",
.manufacture_id = SST_ID, .model_id = SST_49LF003A,{
.probe = probe_sst_fwhub,
.total_size = 384, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_sst_fwhub, .write = write_sst_fwhub, },.probe = probe_sst_fwhub,
@@ -1395,12 +1605,14 @@ { .vendor = "SST", .name = "SST49LF004A/B",
.manufacture_id = SST_ID, .model_id = SST_49LF004A,{
.probe = probe_sst_fwhub,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_sst_fwhub, .write = write_sst_fwhub, },.probe = probe_sst_fwhub,
@@ -1408,12 +1620,14 @@ { .vendor = "SST", .name = "SST49LF004C",
.manufacture_id = SST_ID, .model_id = SST_49LF004C,{
.probe = probe_49lfxxxc,
.total_size = 512, .page_size = 4 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_49lfxxxc, .write = write_49lfxxxc, },.probe = probe_49lfxxxc,
@@ -1421,12 +1635,14 @@ { .vendor = "SST", .name = "SST49LF008A",
.manufacture_id = SST_ID, .model_id = SST_49LF008A,{
.probe = probe_sst_fwhub,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_sst_fwhub, .write = write_sst_fwhub, },.probe = probe_sst_fwhub,
@@ -1434,12 +1650,14 @@ { .vendor = "SST", .name = "SST49LF008C",
.manufacture_id = SST_ID, .model_id = SST_49LF008C,{
.probe = probe_49lfxxxc,
.total_size = 1024, .page_size = 4 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_49lfxxxc, .write = write_49lfxxxc, },.probe = probe_49lfxxxc,
@@ -1447,12 +1665,14 @@ { .vendor = "SST", .name = "SST49LF016C",
.manufacture_id = SST_ID, .model_id = SST_49LF016C,{
.probe = probe_49lfxxxc,
.total_size = 2048, .page_size = 4 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_49lfxxxc, .write = write_49lfxxxc, },.probe = probe_49lfxxxc,
@@ -1460,12 +1680,14 @@ { .vendor = "SST", .name = "SST49LF020",
.manufacture_id = SST_ID, .model_id = SST_49LF020,{
.probe = probe_jedec,
.total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PR,},
.erase = erase_49lf040, .write = write_49lf040, },.probe = probe_jedec,
@@ -1473,12 +1695,14 @@ { .vendor = "SST", .name = "SST49LF020A",
.manufacture_id = SST_ID, .model_id = SST_49LF020A,{
.probe = probe_jedec,
.total_size = 256, .page_size = 16 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_49lf040, .write = write_49lf040, },.probe = probe_jedec,
@@ -1486,12 +1710,14 @@ { .vendor = "SST", .name = "SST49LF040",
.manufacture_id = SST_ID, .model_id = SST_49LF040,{
.probe = probe_jedec,
.total_size = 512, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_49lf040, .write = write_49lf040, },.probe = probe_jedec,
@@ -1499,12 +1725,14 @@ { .vendor = "SST", .name = "SST49LF040B",
.manufacture_id = SST_ID, .model_id = SST_49LF040B,{
.probe = probe_sst_fwhub,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_sst_fwhub, .write = write_sst_fwhub, },.probe = probe_sst_fwhub,
@@ -1512,12 +1740,14 @@ { .vendor = "SST", .name = "SST49LF080A",
.manufacture_id = SST_ID, .model_id = SST_49LF080A,{
.probe = probe_jedec,
.total_size = 1024, .page_size = 4096, .tested = TEST_OK_PREW,},
.erase = erase_49lf040, .write = write_49lf040, },.probe = probe_jedec,
@@ -1525,12 +1755,14 @@ { .vendor = "SST", .name = "SST49LF160C",
.manufacture_id = SST_ID, .model_id = SST_49LF160C,{
.probe = probe_49lfxxxc,
.total_size = 2048, .page_size = 4 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_49lfxxxc, .write = write_49lfxxxc, },.probe = probe_49lfxxxc,
@@ -1538,12 +1770,14 @@ { .vendor = "ST", .name = "M25P05-A",
.manufacture_id = ST_ID, .model_id = ST_M25P05A,{
.probe = probe_spi_rdid,
.total_size = 64, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1552,12 +1786,14 @@ { .vendor = "ST", .name = "M25P10-A",
.manufacture_id = ST_ID, .model_id = ST_M25P10A,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1566,12 +1802,14 @@ { .vendor = "ST", .name = "M25P20",
.manufacture_id = ST_ID, .model_id = ST_M25P20,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1580,12 +1818,14 @@ { .vendor = "ST", .name = "M25P40",
.manufacture_id = ST_ID, .model_id = ST_M25P40,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1594,12 +1834,14 @@ { .vendor = "ST", .name = "M25P40-old",
.manufacture_id = ST_ID, .model_id = ST_M25P40_RES,{
.probe = probe_spi_res,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_res,
@@ -1608,12 +1850,14 @@ { .vendor = "ST", .name = "M25P80",
.manufacture_id = ST_ID, .model_id = ST_M25P80,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1622,12 +1866,14 @@ { .vendor = "ST", .name = "M25P16",
.manufacture_id = ST_ID, .model_id = ST_M25P16,{
.probe = probe_spi_rdid,
.total_size = 2048, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1636,12 +1882,14 @@ { .vendor = "ST", .name = "M25P32",
.manufacture_id = ST_ID, .model_id = ST_M25P32,{
.probe = probe_spi_rdid,
.total_size = 4096, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1650,12 +1898,14 @@ { .vendor = "ST", .name = "M25P64",
.manufacture_id = ST_ID, .model_id = ST_M25P64,{
.probe = probe_spi_rdid,
.total_size = 8192, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1664,12 +1914,14 @@ { .vendor = "ST", .name = "M25P128",
.manufacture_id = ST_ID, .model_id = ST_M25P128,{
.probe = probe_spi_rdid,
.total_size = 16384, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1678,12 +1930,14 @@ { .vendor = "ST", .name = "M29F002B",
.manufacture_id = ST_ID, .model_id = ST_M29F002B,{
.probe = probe_jedec,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_m29f002, .write = write_m29f002b, },.probe = probe_jedec,
@@ -1691,12 +1945,14 @@ { .vendor = "ST", .name = "M29F002T/NT",
.manufacture_id = ST_ID, .model_id = ST_M29F002T,{
.probe = probe_jedec,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_m29f002, .write = write_m29f002t, },.probe = probe_jedec,
@@ -1704,12 +1960,14 @@ { .vendor = "ST", .name = "M29F040B",
.manufacture_id = ST_ID, .model_id = ST_M29F040B,{
.probe = probe_29f040b,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_29f040b, .write = write_29f040b, },.probe = probe_29f040b,
@@ -1717,12 +1975,14 @@ { .vendor = "ST", .name = "M29F400BT",
.manufacture_id = ST_ID, .model_id = ST_M29F400BT,{
.probe = probe_m29f400bt,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, },.probe = probe_m29f400bt,
@@ -1730,12 +1990,14 @@ { .vendor = "ST", .name = "M29W010B",
.manufacture_id = ST_ID, .model_id = ST_M29W010B,{
.probe = probe_jedec,
.total_size = 128, .page_size = 16 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1743,12 +2005,14 @@ { .vendor = "ST", .name = "M29W040B",
.manufacture_id = ST_ID, .model_id = ST_M29W040B,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1756,12 +2020,14 @@ { .vendor = "ST", .name = "M50FLW040A",
.manufacture_id = ST_ID, .model_id = ST_M50FLW040A,{
.probe = probe_stm50flw0x0x,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, },.probe = probe_stm50flw0x0x,
@@ -1769,12 +2035,14 @@ { .vendor = "ST", .name = "M50FLW040B",
.manufacture_id = ST_ID, .model_id = ST_M50FLW040B,{
.probe = probe_stm50flw0x0x,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, },.probe = probe_stm50flw0x0x,
@@ -1782,12 +2050,14 @@ { .vendor = "ST", .name = "M50FLW080A",
.manufacture_id = ST_ID, .model_id = ST_M50FLW080A,{
.probe = probe_stm50flw0x0x,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, },.probe = probe_stm50flw0x0x,
@@ -1795,12 +2065,14 @@ { .vendor = "ST", .name = "M50FLW080B",
.manufacture_id = ST_ID, .model_id = ST_M50FLW080B,{
.probe = probe_stm50flw0x0x,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, },.probe = probe_stm50flw0x0x,
@@ -1808,12 +2080,14 @@ { .vendor = "ST", .name = "M50FW002",
.manufacture_id = ST_ID, .model_id = ST_M50FW002,{
.probe = probe_49lfxxxc,
.total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_49lfxxxc,
@@ -1821,12 +2095,14 @@ { .vendor = "ST", .name = "M50FW016",
.manufacture_id = ST_ID, .model_id = ST_M50FW016,{
.probe = probe_82802ab,
.total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_82802ab, .write = write_82802ab, },.probe = probe_82802ab,
@@ -1834,12 +2110,14 @@ { .vendor = "ST", .name = "M50FW040",
.manufacture_id = ST_ID, .model_id = ST_M50FW040,{
.probe = probe_82802ab,
.total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_82802ab, .write = write_82802ab, },.probe = probe_82802ab,
@@ -1847,12 +2125,14 @@ { .vendor = "ST", .name = "M50FW080",
.manufacture_id = ST_ID, .model_id = ST_M50FW080,{
.probe = probe_82802ab,
.total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW,},
.erase = erase_82802ab, .write = write_82802ab, },.probe = probe_82802ab,
@@ -1860,12 +2140,14 @@ { .vendor = "ST", .name = "M50LPW116",
.manufacture_id = ST_ID, .model_id = ST_M50LPW116,{
.probe = probe_jedec,
.total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1873,12 +2155,14 @@ { .vendor = "SyncMOS", .name = "S29C31004T",
.manufacture_id = SYNCMOS_ID, .model_id = S29C31004T,{
.probe = probe_jedec,
.total_size = 512, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -1886,12 +2170,14 @@ { .vendor = "SyncMOS", .name = "S29C51001T",
.manufacture_id = SYNCMOS_ID, .model_id = S29C51001T,{
.probe = probe_jedec,
.total_size = 128, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -1899,12 +2185,14 @@ { .vendor = "SyncMOS", .name = "S29C51002T",
.manufacture_id = SYNCMOS_ID, .model_id = S29C51002T,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -1912,12 +2200,14 @@ { .vendor = "SyncMOS", .name = "S29C51004T",
.manufacture_id = SYNCMOS_ID, .model_id = S29C51004T,{
.probe = probe_jedec,
.total_size = 512, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -1925,12 +2215,14 @@ { .vendor = "Winbond", .name = "W25x10",
.manufacture_id = WINBOND_NEX_ID, .model_id = W_25X10,{
.probe = probe_spi_rdid,
.total_size = 128, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1939,12 +2231,14 @@ { .vendor = "Winbond", .name = "W25x20",
.manufacture_id = WINBOND_NEX_ID, .model_id = W_25X20,{
.probe = probe_spi_rdid,
.total_size = 256, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1953,12 +2247,14 @@ { .vendor = "Winbond", .name = "W25x40",
.manufacture_id = WINBOND_NEX_ID, .model_id = W_25X40,{
.probe = probe_spi_rdid,
.total_size = 512, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1967,12 +2263,14 @@ { .vendor = "Winbond", .name = "W25x80",
.manufacture_id = WINBOND_NEX_ID, .model_id = W_25X80,{
.probe = probe_spi_rdid,
.total_size = 1024, .page_size = 256, .tested = TEST_OK_PREW,},
.erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read,.probe = probe_spi_rdid,
@@ -1981,12 +2279,14 @@ { .vendor = "Winbond", .name = "W29C011",
.manufacture_id = WINBOND_ID, .model_id = W_29C011,{
.probe = probe_jedec,
.total_size = 128, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -1994,12 +2294,14 @@ { .vendor = "Winbond", .name = "W29C020C",
.manufacture_id = WINBOND_ID, .model_id = W_29C020C,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -2007,12 +2309,14 @@ { .vendor = "Winbond", .name = "W29C040P",
.manufacture_id = WINBOND_ID, .model_id = W_29C040P,{
.probe = probe_jedec,
.total_size = 512, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_jedec,
@@ -2020,12 +2324,14 @@ { .vendor = "Winbond", .name = "W29EE011",
.manufacture_id = WINBOND_ID, .model_id = W_29C011,{
.probe = probe_w29ee011,
.total_size = 128, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_jedec, },.probe = probe_w29ee011,
@@ -2033,12 +2339,14 @@ { .vendor = "Winbond", .name = "W39V040A",
.manufacture_id = WINBOND_ID, .model_id = W_39V040A,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64*1024, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -2046,12 +2354,14 @@ { .vendor = "Winbond", .name = "W39V040B",
.manufacture_id = WINBOND_ID, .model_id = W_39V040B,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -2059,12 +2369,14 @@ { .vendor = "Winbond", .name = "W39V040C",
.manufacture_id = WINBOND_ID, .model_id = 0x50,{
.probe = probe_w39v040c,
.total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW,},
.erase = erase_w39v040c, .write = write_w39v040c, },.probe = probe_w39v040c,
@@ -2072,12 +2384,14 @@ { .vendor = "Winbond", .name = "W39V040FA",
.manufacture_id = WINBOND_ID, .model_id = W_39V040FA,{
.probe = probe_jedec,
.total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -2085,12 +2399,14 @@ { .vendor = "Winbond", .name = "W39V080A",
.manufacture_id = WINBOND_ID, .model_id = W_39V080A,{
.probe = probe_jedec,
.total_size = 1024, .page_size = 64*1024, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_39sf020, },.probe = probe_jedec,
@@ -2098,12 +2414,14 @@ { .vendor = "Winbond", .name = "W49F002U",
.manufacture_id = WINBOND_ID, .model_id = W_49F002U,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -2111,12 +2429,14 @@ { .vendor = "Winbond", .name = "W49V002A",
.manufacture_id = WINBOND_ID, .model_id = W_49V002A,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_OK_PREW,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -2124,12 +2444,14 @@ { .vendor = "Winbond", .name = "W49V002FA",
.manufacture_id = WINBOND_ID, .model_id = W_49V002FA,{
.probe = probe_jedec,
.total_size = 256, .page_size = 128, .tested = TEST_UNTESTED,},
.erase = erase_chip_jedec, .write = write_49f002, },.probe = probe_jedec,
@@ -2137,12 +2459,14 @@ { .vendor = "Winbond", .name = "W39V080FA",
.manufacture_id = WINBOND_ID, .model_id = W_39V080FA,{
.probe = probe_winbond_fwhub,
.total_size = 1024, .page_size = 64*1024, .tested = TEST_OK_PREW,},
.erase = erase_winbond_fwhub, .write = write_winbond_fwhub, },.probe = probe_winbond_fwhub,
@@ -2150,12 +2474,14 @@ { .vendor = "Winbond", .name = "W39V080FA (dual mode)",
.manufacture_id = WINBOND_ID, .model_id = W_39V080FA_DM,{
.probe = probe_winbond_fwhub,
.total_size = 512, .page_size = 64*1024, .tested = TEST_UNTESTED,},
.erase = erase_winbond_fwhub, .write = write_winbond_fwhub, },.probe = probe_winbond_fwhub,
@@ -2163,12 +2489,14 @@ { .vendor = "Atmel", .name = "unknown Atmel SPI chip",
.manufacture_id = ATMEL_ID, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,
@@ -2176,12 +2504,14 @@ { .vendor = "EON", .name = "unknown EON SPI chip",
.manufacture_id = EON_ID_NOPREFIX, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,
@@ -2189,12 +2519,14 @@ { .vendor = "Macronix", .name = "unknown Macronix SPI chip",
.manufacture_id = MX_ID, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,
@@ -2202,12 +2534,14 @@ { .vendor = "PMC", .name = "unknown PMC SPI chip",
.manufacture_id = PMC_ID, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,
@@ -2215,12 +2549,14 @@ { .vendor = "SST", .name = "unknown SST SPI chip",
.manufacture_id = SST_ID, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,
@@ -2228,12 +2564,14 @@ { .vendor = "ST", .name = "unknown ST SPI chip",
.manufacture_id = ST_ID, .model_id = GENERIC_DEVICE_ID,{
.probe = probe_spi_rdid,
.total_size = 0, .page_size = 256, .tested = TEST_UNTESTED,},
.erase = NULL, .write = NULL, },.probe = probe_spi_rdid,