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.
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.
This is part 1 of a longer series to add external flasher support. Each part depends on the previous part, so I'll post the next part after this has been committed.
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 4091) +++ 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 4091) +++ 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_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_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_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_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_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_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -814,12 +938,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_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -828,12 +954,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_c7, .write = spi_chip_write, .read = spi_chip_read, @@ -842,12 +970,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, }, @@ -855,12 +985,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, }, @@ -868,12 +1000,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, }, @@ -881,12 +1015,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, @@ -895,12 +1031,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, @@ -909,12 +1047,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, @@ -923,12 +1063,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, @@ -937,12 +1079,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, @@ -951,12 +1095,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, @@ -965,12 +1111,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, @@ -979,12 +1127,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, @@ -993,12 +1143,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, @@ -1007,12 +1159,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, @@ -1021,12 +1175,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, @@ -1035,12 +1191,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, }, @@ -1048,12 +1206,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, }, @@ -1061,12 +1221,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, }, @@ -1074,12 +1236,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, @@ -1088,12 +1252,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, @@ -1102,12 +1268,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, @@ -1116,12 +1284,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, @@ -1130,12 +1300,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, @@ -1144,12 +1316,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, @@ -1158,12 +1332,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, @@ -1172,12 +1348,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, }, @@ -1185,12 +1363,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, }, @@ -1198,12 +1378,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, }, @@ -1211,12 +1393,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, }, @@ -1224,12 +1408,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, }, @@ -1237,12 +1423,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, }, @@ -1250,12 +1438,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, }, @@ -1263,12 +1453,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, }, @@ -1276,12 +1468,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, }, @@ -1289,12 +1483,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, }, @@ -1302,12 +1498,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, }, @@ -1315,12 +1513,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, }, @@ -1328,12 +1528,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, }, @@ -1341,12 +1543,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, }, @@ -1354,12 +1558,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, }, @@ -1367,12 +1573,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, }, @@ -1380,12 +1588,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, }, @@ -1393,12 +1603,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, }, @@ -1406,12 +1618,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, }, @@ -1419,12 +1633,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, }, @@ -1432,12 +1648,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, }, @@ -1445,12 +1663,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, }, @@ -1458,12 +1678,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, }, @@ -1471,12 +1693,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, }, @@ -1484,12 +1708,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, }, @@ -1497,12 +1723,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, }, @@ -1510,12 +1738,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, @@ -1524,12 +1754,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, @@ -1538,12 +1770,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, @@ -1552,12 +1786,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, @@ -1566,12 +1802,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, @@ -1580,12 +1818,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, @@ -1594,12 +1834,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, @@ -1608,12 +1850,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, @@ -1622,12 +1866,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, @@ -1636,12 +1882,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, @@ -1650,12 +1898,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, }, @@ -1663,12 +1913,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, }, @@ -1676,12 +1928,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, }, @@ -1689,12 +1943,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, }, @@ -1702,12 +1958,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, }, @@ -1715,12 +1973,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, }, @@ -1728,12 +1988,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, }, @@ -1741,12 +2003,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, }, @@ -1754,12 +2018,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, }, @@ -1767,12 +2033,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, }, @@ -1780,12 +2048,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, }, @@ -1793,12 +2063,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, }, @@ -1806,12 +2078,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, }, @@ -1819,12 +2093,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, }, @@ -1832,12 +2108,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, }, @@ -1845,12 +2123,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, }, @@ -1858,12 +2138,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, }, @@ -1871,12 +2153,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, }, @@ -1884,12 +2168,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, }, @@ -1897,12 +2183,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, @@ -1911,12 +2199,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, @@ -1925,12 +2215,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, @@ -1939,12 +2231,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, @@ -1953,12 +2247,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, }, @@ -1966,12 +2262,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, }, @@ -1979,12 +2277,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, }, @@ -1992,12 +2292,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, }, @@ -2005,12 +2307,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, }, @@ -2018,12 +2322,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, }, @@ -2031,12 +2337,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, }, @@ -2044,12 +2352,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, }, @@ -2057,12 +2367,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, }, @@ -2070,12 +2382,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, }, @@ -2083,12 +2397,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, }, @@ -2096,12 +2412,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, }, @@ -2109,12 +2427,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, }, @@ -2122,12 +2442,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, }, @@ -2135,12 +2457,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, }, @@ -2148,12 +2472,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, }, @@ -2161,12 +2487,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, }, @@ -2174,12 +2502,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, }, @@ -2187,12 +2517,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, }, @@ -2200,12 +2532,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, },
Carl-Daniel Hailfinger wrote:
clean design
Not now. Please submit your full series of patches to trac, against the 1.1 milestone.
I would suggest one ticket per patch, and one meta ticket "clean design" or somesuch which depends on the others.
Please do not let this stay on the mailing list.
Thanks!
//Peter
On 11.04.2009 14:30, Peter Stuge wrote:
Carl-Daniel Hailfinger wrote:
clean design
Not now. Please submit your full series of patches to trac, against the 1.1 milestone.
These patches are just a refresh of a series which is almost 6 months old.
Nobody cares about flashrom 1.0 enough to actually fix the remaining design and user interface problems:
- The short command lines switches have no decided upon capitalization. - Switch combination may lead to accidental ROM content destruction (great feature!). - No way to test flashrom functionality with a single command. - Unclean generic matching handling. - We claim a generic match has unknown read, write, erase, probe results although read, write, erase do fail. I have a patch for this, but it has not been committed.
We can either say "screw users, they should read the man page every time they update" or we decide user interface questions now. And now means in the next 7 days, otherwise it will drag on longer and longer until someone is frustrated enough to simply release the current tree as 1.0.
Speaking of flashrom operation modes, only the following make sense IMHO.
- read - erase - write (without autoerase) - erase+write (only as write-after-erase) - write+verify - verify
The following don't make sense: - read+verify (it's just a reread) - erase+verify (verify needs a reference file and the erase better be checked by default)
The following are too ambiguous to be allowed: - read+erase (first read, then erase or the other way round?) - read+write (same problem)
The self-test mode has to execute: 1. read (and store on disk) 2. erase (and check if erase worked) 3. write (old contents) 4. verify (old contents)
The autoerase on write functionality (which is not present for all chips) needs to be decided upon as well.
Can we please fork an 1.0 branch and continue development on trunk?
Regards, Carl-Daniel
Carl-Daniel Hailfinger wrote:
clean design
Not now. Please submit your full series of patches to trac, against the 1.1 milestone.
These patches are just a refresh of a series which is almost 6 months old.
Ok. Please create new tickets as neccessary and attach those patches so that they are not lost on the mailing list again.
Without git I don't like email so much for patch management. And even with git I don't have any experience of working like that, but I suppose it is easy and efficient.
Nobody cares about flashrom 1.0 enough to actually fix the remaining design and user interface problems:
- The short command lines switches have no decided upon capitalization.
http://tracker.coreboot.org/trac/coreboot/ticket/100
- Switch combination may lead to accidental ROM content destruction
(great feature!).
Does this have a ticket? Maybe related to #103? http://tracker.coreboot.org/trac/coreboot/ticket/103
- No way to test flashrom functionality with a single command.
http://tracker.coreboot.org/trac/coreboot/ticket/106
- Unclean generic matching handling.
- We claim a generic match has unknown read, write, erase, probe results
although read, write, erase do fail. I have a patch for this, but it has not been committed.
I don't think these two have tickets.
Thank you for bringing up these points! Please add the tickets that are missing, I think all of these issues at the very least deserve to be decided on, with afterthought, before 1.0. All of them may not actually be resolved for 1.0, but we should go over them.
Let's continue using trac for this, please.
And now means in the next 7 days, otherwise it will drag on longer and longer until someone is frustrated enough to simply release the current tree as 1.0.
I think that concern is unfounded. I certainly hope so. Meanwhile, please do put the new tickets into trac and let's take care of them one by one.
Some tickets could definately be re-opened, they may have been closed prematurely. I've reopened 100 and 106 but don't have a real overview right now, so there may be more candidates.
Speaking of flashrom operation modes, only the following make sense IMHO.
I agree with this, except for two things as noted in #106.
The autoerase on write functionality (which is not present for all chips) needs to be decided upon as well.
http://tracker.coreboot.org/trac/coreboot/ticket/104
Can we please fork an 1.0 branch and continue development on trunk?
Hm? Would trunk be the redesign? Does it make sense to fork before 1.0 is finished? I think it could - if enough things will change.
//Peter