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
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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, @@ -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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_jedec, .erase = erase_29f040b, .write = write_29f040b, }, @@ -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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL /* Incompatible Page write */, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = NULL /* Incompatible Page write */, .read = spi_chip_read, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL /* Incompatible Page write */, .read = NULL /* Incompatible read */, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL /* Incompatible read */, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_spi_rdid4, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_29f002, .erase = erase_29f002, .write = write_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, - .probe = probe_29f002, .erase = erase_29f002, .write = write_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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, @@ -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, - .probe = probe_jedec, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_jedec, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_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, - .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_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, - .probe = probe_82802ab, .erase = erase_82802ab, .write = write_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, - .probe = probe_82802ab, .erase = erase_82802ab, .write = write_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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_29f002, .erase = erase_29f002, .write = write_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, - .probe = probe_29f002, .erase = erase_29f002, .write = write_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, - .probe = probe_29f002, .erase = erase_29f002, .write = write_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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_d8, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_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, - .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_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, - .probe = probe_lhf00l04, .erase = erase_lhf00l04, .write = write_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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rems, .erase = spi_chip_erase_60, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rems, .erase = spi_chip_erase_c7, .write = spi_aai_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_60_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_28sf040, .erase = erase_28sf040, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_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, - .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_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, - .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_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, - .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_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, - .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_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, - .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_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, - .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_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, - .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, @@ -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, - .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, @@ -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, - .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, @@ -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, - .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_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, - .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, @@ -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, - .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_res, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_jedec, .erase = erase_m29f002, .write = write_m29f002b, }, @@ -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, - .probe = probe_jedec, .erase = erase_m29f002, .write = write_m29f002t, }, @@ -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, - .probe = probe_29f040b, .erase = erase_29f040b, .write = write_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, - .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_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, - .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_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, - .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_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, - .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_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, - .probe = probe_49lfxxxc, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_82802ab, .erase = erase_82802ab, .write = write_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, - .probe = probe_82802ab, .erase = erase_82802ab, .write = write_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, - .probe = probe_82802ab, .erase = erase_82802ab, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_spi_rdid, .erase = spi_chip_erase_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_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, - .probe = probe_w29ee011, .erase = erase_chip_jedec, .write = write_jedec, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_w39v040c, .erase = erase_w39v040c, .write = write_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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, @@ -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, - .probe = probe_winbond_fwhub, .erase = erase_winbond_fwhub, .write = write_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, - .probe = probe_winbond_fwhub, .erase = erase_winbond_fwhub, .write = write_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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, @@ -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, - .probe = probe_spi_rdid, .erase = NULL, .write = NULL, },