The flash probe function and the IDs for that specific probe function belong together. Group them together on a single line. We already have chips with multiple probe functions and multiple IDs. This patch is the first step in consolidating the present way of creating a new chip definition for each ID of a given chip into multiple IDs per chip definition.
Attached for Gmail users.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-reorderfields/flash.h =================================================================== --- flashrom-reorderfields/flash.h (Revision 3805) +++ flashrom-reorderfields/flash.h (Arbeitskopie) @@ -60,6 +60,7 @@ struct flashchip { const char *vendor; const char *name; + /* * With 32bit manufacture_id and model_id we can cover IDs up to * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's @@ -67,6 +68,7 @@ */ uint32_t manufacture_id; uint32_t model_id; + int (*probe) (struct flashchip *flash);
int total_size; int page_size; @@ -77,7 +79,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-reorderfields/flashchips.c =================================================================== --- flashrom-reorderfields/flashchips.c (Revision 3805) +++ flashrom-reorderfields/flashchips.c (Arbeitskopie) @@ -30,942 +30,1097 @@ */ struct flashchip flashchips[] = {
- /* Vendor, Chip, Vendor ID, Chip ID, + /* Vendor, Chip, + * Vendor ID, Chip ID, Probe function, * Total size (kB), Page size (B), * Test status, - * Probe function, Erase function, Write function, Read function + * Erase function, Write function, Read function */
- {"AMD", "Am29F002(N)BB", AMD_ID, AM_29F002BB, + {"AMD", "Am29F002(N)BB", + AMD_ID, AM_29F002BB, probe_jedec, 256, 256, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_en29f002a + erase_chip_jedec, write_en29f002a },
- {"AMD", "Am29F002(N)BT", AMD_ID, AM_29F002BT, + {"AMD", "Am29F002(N)BT", + AMD_ID, AM_29F002BT, probe_jedec, 256, 256, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_en29f002a + erase_chip_jedec, write_en29f002a },
- {"AMD", "Am29F016D", AMD_ID, AM_29F016D, + {"AMD", "Am29F016D", + AMD_ID, AM_29F016D, probe_29f040b, 2048, 64 * 1024, TEST_UNTESTED, - probe_29f040b, erase_29f040b, write_29f040b + erase_29f040b, write_29f040b },
- {"AMD", "Am29F040B", AMD_ID, AM_29F040B, + {"AMD", "Am29F040B", + AMD_ID, AM_29F040B, probe_29f040b, 512, 64 * 1024, TEST_OK_PREW, - probe_29f040b, erase_29f040b, write_29f040b + erase_29f040b, write_29f040b },
- {"AMD", "Am29LV040B", AMD_ID, AM_29LV040B, + {"AMD", "Am29LV040B", + AMD_ID, AM_29LV040B, probe_29f040b, 512, 64 * 1024, TEST_UNTESTED, - probe_29f040b, erase_29f040b, write_29f040b + erase_29f040b, write_29f040b },
- {"ASD", "AE49F2008", ASD_ID, ASD_AE49F2008, + {"ASD", "AE49F2008", + ASD_ID, ASD_AE49F2008, probe_jedec, 256, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Atmel", "AT25DF021", ATMEL_ID, AT_25DF021, + {"Atmel", "AT25DF021", + ATMEL_ID, AT_25DF021, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25DF041A", ATMEL_ID, AT_25DF041A, + {"Atmel", "AT25DF041A", + ATMEL_ID, AT_25DF041A, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25DF081", ATMEL_ID, AT_25DF081, + {"Atmel", "AT25DF081", + ATMEL_ID, AT_25DF081, probe_spi_rdid, 1024, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25DF161", ATMEL_ID, AT_25DF161, + {"Atmel", "AT25DF161", + ATMEL_ID, AT_25DF161, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25DF321", ATMEL_ID, AT_25DF321, + {"Atmel", "AT25DF321", + ATMEL_ID, AT_25DF321, probe_spi_rdid, 4096, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Atmel", "AT25DF321A", ATMEL_ID, AT_25DF321A, + {"Atmel", "AT25DF321A", + ATMEL_ID, AT_25DF321A, probe_spi_rdid, 4096, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25DF641", ATMEL_ID, AT_25DF641, + {"Atmel", "AT25DF641", + ATMEL_ID, AT_25DF641, probe_spi_rdid, 8192, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25F512B", ATMEL_ID, AT_25F512B, + {"Atmel", "AT25F512B", + ATMEL_ID, AT_25F512B, probe_spi_rdid, 64, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25FS010", ATMEL_ID, AT_25FS010, + {"Atmel", "AT25FS010", + ATMEL_ID, AT_25FS010, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT25FS040", ATMEL_ID, AT_25FS040, + {"Atmel", "AT25FS040", + ATMEL_ID, AT_25FS040, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT26DF041", ATMEL_ID, AT_26DF041, + {"Atmel", "AT26DF041", + ATMEL_ID, AT_26DF041, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL /* Incompatible Page write */,spi_chip_read + NULL, NULL /* Incompatible Page write */,spi_chip_read },
- {"Atmel", "AT26DF081A", ATMEL_ID, AT_26DF081A, + {"Atmel", "AT26DF081A", + ATMEL_ID, AT_26DF081A, probe_spi_rdid, 1024, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT26DF161", ATMEL_ID, AT_26DF161, + {"Atmel", "AT26DF161", + ATMEL_ID, AT_26DF161, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
- {"Atmel", "AT26DF161A", ATMEL_ID, AT_26DF161A, + {"Atmel", "AT26DF161A", + ATMEL_ID, AT_26DF161A, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read + NULL, NULL, spi_chip_read },
/*The AT26DF321 has the same ID as the AT25DF321. */ - /*{"Atmel", "AT26DF321", ATMEL_ID, AT_26DF321, - 4096, 256, - TEST_UNTESTED, - probe_spi_rdid, NULL, NULL, spi_chip_read - }, - */ + /*{"Atmel", "AT26DF321", + ATMEL_ID, AT_26DF321, probe_spi_rdid, + 4096, 256, + TEST_UNTESTED, + NULL, NULL, spi_chip_read + }, */
- {"Atmel", "AT26F004", ATMEL_ID, AT_26F004, + {"Atmel", "AT26F004", + ATMEL_ID, AT_26F004, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL /* Incompatible Page write */,spi_chip_read + NULL, NULL /* Incompatible Page write */,spi_chip_read },
- {"Atmel", "AT29C020", ATMEL_ID, AT_29C020, + {"Atmel", "AT29C020", + ATMEL_ID, AT_29C020, probe_jedec, 256, 256, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Atmel", "AT29C040A", ATMEL_ID, AT_29C040A, + {"Atmel", "AT29C040A", + ATMEL_ID, AT_29C040A, probe_jedec, 512, 256, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Atmel", "AT45CS1282", ATMEL_ID, AT_45CS1282, + {"Atmel", "AT45CS1282", + ATMEL_ID, AT_45CS1282, probe_spi_rdid, 16896/*!*/, 1056/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL /* Incompatible Page write */, NULL /* Incompatible read */ + NULL, NULL /* Incompatible Page write */, NULL /* Incompatible read */ }, /* No power of two sizes */
- {"Atmel", "AT45DB011D", ATMEL_ID, AT_45DB011D, + {"Atmel", "AT45DB011D", + ATMEL_ID, AT_45DB011D, probe_spi_rdid, 128/*!*/, 256/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB021D", ATMEL_ID, AT_45DB021D, + {"Atmel", "AT45DB021D", + ATMEL_ID, AT_45DB021D, probe_spi_rdid, 256/*!*/, 256/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB041D", ATMEL_ID, AT_45DB041D, + {"Atmel", "AT45DB041D", + ATMEL_ID, AT_45DB041D, probe_spi_rdid, 512/*!*/, 256/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB081D", ATMEL_ID, AT_45DB081D, + {"Atmel", "AT45DB081D", + ATMEL_ID, AT_45DB081D, probe_spi_rdid, 1024/*!*/, 256/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB161D", ATMEL_ID, AT_45DB161D, + {"Atmel", "AT45DB161D", + ATMEL_ID, AT_45DB161D, probe_spi_rdid, 2048/*!*/, 512/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB321C", ATMEL_ID, AT_45DB321C, + {"Atmel", "AT45DB321C", + ATMEL_ID, AT_45DB321C, probe_spi_rdid, 4224/*!*/, 528/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL /* Incompatible read */ + NULL, NULL, NULL /* Incompatible read */ }, /* No power of two sizes */
- {"Atmel", "AT45DB321D", ATMEL_ID, AT_45DB321D, + {"Atmel", "AT45DB321D", + ATMEL_ID, AT_45DB321D, probe_spi_rdid, 4096/*!*/, 512/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT45DB642D", ATMEL_ID, AT_45DB642D, + {"Atmel", "AT45DB642D", + ATMEL_ID, AT_45DB642D, probe_spi_rdid, 8192/*!*/, 1024/*!*/, TEST_BAD_READ, - probe_spi_rdid, NULL, NULL, NULL + NULL, NULL, NULL }, /* Size can only be determined from status register */
- {"Atmel", "AT49F002(N)", ATMEL_ID, AT_49F002N, + {"Atmel", "AT49F002(N)", + ATMEL_ID, AT_49F002N, probe_jedec, 256, 256, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"Atmel", "AT49F002(N)T", ATMEL_ID, AT_49F002NT, + {"Atmel", "AT49F002(N)T", + ATMEL_ID, AT_49F002NT, probe_jedec, 256, 256, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"AMIC", "A25L40P", AMIC_ID, AMIC_A25L40P, + {"AMIC", "A25L40P", + AMIC_ID, AMIC_A25L40P, probe_spi_rdid4, 512, 256, TEST_OK_PREW, - probe_spi_rdid4, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"AMIC", "A29002B", AMIC_ID_NOPREFIX, AMIC_A29002B, + {"AMIC", "A29002B", + AMIC_ID_NOPREFIX, AMIC_A29002B, probe_29f002, 256, 64 * 1024, TEST_UNTESTED, - probe_29f002, erase_29f002, write_29f002 + erase_29f002, write_29f002 },
- {"AMIC", "A29002T", AMIC_ID_NOPREFIX, AMIC_A29002T, + {"AMIC", "A29002T", + AMIC_ID_NOPREFIX, AMIC_A29002T, probe_29f002, 256, 64 * 1024, TEST_OK_PREW, - probe_29f002, erase_29f002, write_29f002 + erase_29f002, write_29f002 },
- {"AMIC", "A29040B", AMIC_ID_NOPREFIX, AMIC_A29040B, + {"AMIC", "A29040B", + AMIC_ID_NOPREFIX, AMIC_A29040B, probe_29f040b, 512, 64 * 1024, TEST_OK_PR, - probe_29f040b, erase_29f040b, write_29f040b + erase_29f040b, write_29f040b },
- {"AMIC", "A49LF040A", AMIC_ID_NOPREFIX, AMIC_A49LF040A, + {"AMIC", "A49LF040A", + AMIC_ID_NOPREFIX, AMIC_A49LF040A, probe_49fl00x, 512, 64 * 1024, TEST_OK_PREW, - probe_49fl00x, erase_49fl00x, write_49fl00x + erase_49fl00x, write_49fl00x },
- {"EMST", "F49B002UA", EMST_ID, EMST_F49B002UA, + {"EMST", "F49B002UA", + EMST_ID, EMST_F49B002UA, probe_jedec, 256, 4096, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"EON", "EN29F002(A)(N)B", EON_ID, EN_29F002B, + {"EON", "EN29F002(A)(N)B", + EON_ID, EN_29F002B, probe_jedec, 256, 256, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_en29f002a + erase_chip_jedec, write_en29f002a },
- {"EON", "EN29F002(A)(N)T", EON_ID, EN_29F002T, + {"EON", "EN29F002(A)(N)T", + EON_ID, EN_29F002T, probe_jedec, 256, 256, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_en29f002a + erase_chip_jedec, write_en29f002a },
- {"Fujitsu", "MBM29F004BC", FUJITSU_ID, MBM29F004BC, + {"Fujitsu", "MBM29F004BC", + FUJITSU_ID, MBM29F004BC, probe_jedec, 512, 64 * 1024, TEST_UNTESTED, - probe_jedec, NULL, NULL + NULL, NULL },
- {"Fujitsu", "MBM29F004TC", FUJITSU_ID, MBM29F004TC, + {"Fujitsu", "MBM29F004TC", + FUJITSU_ID, MBM29F004TC, probe_jedec, 512, 64 * 1024, TEST_UNTESTED, - probe_jedec, NULL, NULL + NULL, NULL },
- {"Fujitsu", "MBM29F400BC", FUJITSU_ID, MBM29F400BC, + {"Fujitsu", "MBM29F400BC", + FUJITSU_ID, MBM29F400BC, probe_m29f400bt, 512, 64 * 1024, TEST_UNTESTED, - probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt + erase_m29f400bt, write_coreboot_m29f400bt },
- {"Fujitsu", "MBM29F400TC", FUJITSU_ID, MBM29F400TC, + {"Fujitsu", "MBM29F400TC", + FUJITSU_ID, MBM29F400TC, probe_m29f400bt, 512, 64 * 1024, TEST_UNTESTED, - probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt + erase_m29f400bt, write_coreboot_m29f400bt },
- {"Intel", "82802AB", INTEL_ID, 173, + {"Intel", "82802AB", + INTEL_ID, 173, probe_82802ab, 512, 64 * 1024, TEST_OK_PREW, - probe_82802ab, erase_82802ab, write_82802ab + erase_82802ab, write_82802ab },
- {"Intel", "82802AC", INTEL_ID, 172, + {"Intel", "82802AC", + INTEL_ID, 172, probe_82802ab, 1024, 64 * 1024, TEST_OK_PREW, - probe_82802ab, erase_82802ab, write_82802ab + erase_82802ab, write_82802ab },
- {"Macronix", "MX25L512", MX_ID, MX_25L512, + {"Macronix", "MX25L512", + MX_ID, MX_25L512, probe_spi_rdid, 64, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L1005", MX_ID, MX_25L1005, + {"Macronix", "MX25L1005", + MX_ID, MX_25L1005, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L2005", MX_ID, MX_25L2005, + {"Macronix", "MX25L2005", + MX_ID, MX_25L2005, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L4005", MX_ID, MX_25L4005, + {"Macronix", "MX25L4005", + MX_ID, MX_25L4005, probe_spi_rdid, 512, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L8005", MX_ID, MX_25L8005, + {"Macronix", "MX25L8005", + MX_ID, MX_25L8005, probe_spi_rdid, 1024, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L1605", MX_ID, MX_25L1605, + {"Macronix", "MX25L1605", + MX_ID, MX_25L1605, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L3205", MX_ID, MX_25L3205, + {"Macronix", "MX25L3205", + MX_ID, MX_25L3205, probe_spi_rdid, 4096, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX25L6405", MX_ID, MX_25L6405, + {"Macronix", "MX25L6405", + MX_ID, MX_25L6405, probe_spi_rdid, 8192, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Macronix", "MX29F002B", MX_ID, MX_29F002B, + {"Macronix", "MX29F002B", + MX_ID, MX_29F002B, probe_29f002, 256, 64 * 1024, TEST_UNTESTED, - probe_29f002, erase_29f002, write_29f002 + erase_29f002, write_29f002 },
- {"Macronix", "MX29F002T", MX_ID, MX_29F002T, + {"Macronix", "MX29F002T", + MX_ID, MX_29F002T, probe_29f002, 256, 64 * 1024, TEST_UNTESTED, - probe_29f002, erase_29f002, write_29f002 + erase_29f002, write_29f002 },
- {"Numonyx", "M25PE10", ST_ID, 0x8011, + {"Numonyx", "M25PE10", + ST_ID, 0x8011, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read + spi_chip_erase_d8, spi_chip_write, spi_chip_read },
- {"Numonyx", "M25PE20", ST_ID, 0x8012, + {"Numonyx", "M25PE20", + ST_ID, 0x8012, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read + spi_chip_erase_d8, spi_chip_write, spi_chip_read },
- {"Numonyx", "M25PE40", ST_ID, 0x8013, + {"Numonyx", "M25PE40", + ST_ID, 0x8013, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read + spi_chip_erase_d8, spi_chip_write, spi_chip_read },
- {"Numonyx", "M25PE80", ST_ID, 0x8014, + {"Numonyx", "M25PE80", + ST_ID, 0x8014, probe_spi_rdid, 1024, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read + spi_chip_erase_d8, spi_chip_write, spi_chip_read },
- {"Numonyx", "M25PE16", ST_ID, 0x8015, + {"Numonyx", "M25PE16", + ST_ID, 0x8015, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read + spi_chip_erase_d8, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV010", PMC_ID, PMC_25LV010, + {"PMC", "Pm25LV010", + PMC_ID, PMC_25LV010, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV016B", PMC_ID, PMC_25LV016B, + {"PMC", "Pm25LV016B", + PMC_ID, PMC_25LV016B, probe_spi_rdid, 2048, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV020", PMC_ID, PMC_25LV020, + {"PMC", "Pm25LV020", + PMC_ID, PMC_25LV020, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV040", PMC_ID, PMC_25LV040, + {"PMC", "Pm25LV040", + PMC_ID, PMC_25LV040, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV080B", PMC_ID, PMC_25LV080B, + {"PMC", "Pm25LV080B", + PMC_ID, PMC_25LV080B, probe_spi_rdid, 1024, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm25LV512", PMC_ID, PMC_25LV512, + {"PMC", "Pm25LV512", + PMC_ID, PMC_25LV512, probe_spi_rdid, 64, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"PMC", "Pm49FL002", PMC_ID_NOPREFIX, PMC_49FL002, + {"PMC", "Pm49FL002", + PMC_ID_NOPREFIX, PMC_49FL002, probe_49fl00x, 256, 16 * 1024, TEST_OK_PREW, - probe_49fl00x, erase_49fl00x, write_49fl00x + erase_49fl00x, write_49fl00x },
- {"PMC", "Pm49FL004", PMC_ID_NOPREFIX,PMC_49FL004, + {"PMC", "Pm49FL004", + PMC_ID_NOPREFIX,PMC_49FL004, probe_49fl00x, 512, 64 * 1024, TEST_OK_PREW, - probe_49fl00x, erase_49fl00x, write_49fl00x + erase_49fl00x, write_49fl00x },
- {"Sharp", "LHF00L04", SHARP_ID, SHARP_LHF00L04, + {"Sharp", "LHF00L04", + SHARP_ID, SHARP_LHF00L04, probe_lhf00l04, 1024, 64 * 1024, TEST_UNTESTED, - probe_lhf00l04, erase_lhf00l04, write_lhf00l04 + erase_lhf00l04, write_lhf00l04 },
- {"Spansion", "S25FL016A", SPANSION_ID, SPANSION_S25FL016A, + {"Spansion", "S25FL016A", + SPANSION_ID, SPANSION_S25FL016A, probe_spi_rdid, 2048, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"SST", "SST25VF016B", SST_ID, SST_25VF016B, + {"SST", "SST25VF016B", + SST_ID, SST_25VF016B, probe_spi_rdid, 2048, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"SST", "SST25VF032B", SST_ID, SST_25VF032B, + {"SST", "SST25VF032B", + SST_ID, SST_25VF032B, probe_spi_rdid, 4096, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"SST", "SST25VF040B", SST_ID, SST_25VF040B, + {"SST", "SST25VF040B", + SST_ID, SST_25VF040B, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"SST", "SST25VF080B", SST_ID, SST_25VF080B, + {"SST", "SST25VF080B", + SST_ID, SST_25VF080B, probe_spi_rdid, 1024, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_60_c7, spi_chip_write, spi_chip_read + spi_chip_erase_60_c7, spi_chip_write, spi_chip_read },
- {"SST", "SST28SF040A", SST_ID, SST_28SF040, + {"SST", "SST28SF040A", + SST_ID, SST_28SF040, probe_28sf040, 512, 256, TEST_UNTESTED, - probe_28sf040, erase_28sf040, write_28sf040 + erase_28sf040, write_28sf040 },
- {"SST", "SST29EE010", SST_ID, SST_29EE010, + {"SST", "SST29EE010", + SST_ID, SST_29EE010, probe_jedec, 128, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"SST", "SST29LE010", SST_ID, SST_29LE010, + {"SST", "SST29LE010", + SST_ID, SST_29LE010, probe_jedec, 128, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"SST", "SST29EE020A", SST_ID, SST_29EE020A, + {"SST", "SST29EE020A", + SST_ID, SST_29EE020A, probe_jedec, 256, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"SST", "SST29LE020", SST_ID, SST_29LE020, + {"SST", "SST29LE020", + SST_ID, SST_29LE020, probe_jedec, 256, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"SST", "SST39SF010A", SST_ID, SST_39SF010, + {"SST", "SST39SF010A", + SST_ID, SST_39SF010, probe_jedec, 128, 4096, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39SF020A", SST_ID, SST_39SF020, + {"SST", "SST39SF020A", + SST_ID, SST_39SF020, probe_jedec, 256, 4096, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39SF040", SST_ID, SST_39SF040, + {"SST", "SST39SF040", + SST_ID, SST_39SF040, probe_jedec, 512, 4096, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39VF512", SST_ID, SST_39VF512, + {"SST", "SST39VF512", + SST_ID, SST_39VF512, probe_jedec, 64, 4096, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39VF010", SST_ID, SST_39VF010, + {"SST", "SST39VF010", + SST_ID, SST_39VF010, probe_jedec, 128, 4096, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39VF020", SST_ID, SST_39VF020, + {"SST", "SST39VF020", + SST_ID, SST_39VF020, probe_jedec, 256, 4096, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"SST", "SST39VF040", SST_ID, SST_39VF040, + {"SST", "SST39VF040", + SST_ID, SST_39VF040, probe_jedec, 512, 4096, TEST_OK_PROBE, - probe_jedec, erase_chip_jedec, write_39sf020 - }, /* assume similar to 004B, ignoring data sheet */ + erase_chip_jedec, write_39sf020 + },
- {"SST", "SST49LF002A/B", SST_ID, SST_49LF002A, + {"SST", "SST49LF002A/B", + SST_ID, SST_49LF002A, probe_sst_fwhub, 256, 16 * 1024, TEST_OK_PREW, - probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub + erase_sst_fwhub, write_sst_fwhub },
- {"SST", "SST49LF003A/B", SST_ID, SST_49LF003A, + {"SST", "SST49LF003A/B", + SST_ID, SST_49LF003A, probe_sst_fwhub, 384, 64 * 1024, TEST_UNTESTED, - probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub + erase_sst_fwhub, write_sst_fwhub },
- {"SST", "SST49LF004A/B", SST_ID, SST_49LF004A, + {"SST", "SST49LF004A/B", + SST_ID, SST_49LF004A, probe_sst_fwhub, 512, 64 * 1024, TEST_OK_PREW, - probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub + erase_sst_fwhub, write_sst_fwhub },
- {"SST", "SST49LF004C", SST_ID, SST_49LF004C, + {"SST", "SST49LF004C", + SST_ID, SST_49LF004C, probe_49lfxxxc, 512, 4 * 1024, TEST_UNTESTED, - probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc + erase_49lfxxxc, write_49lfxxxc },
- {"SST", "SST49LF008A", SST_ID, SST_49LF008A, + {"SST", "SST49LF008A", + SST_ID, SST_49LF008A, probe_sst_fwhub, 1024, 64 * 1024, TEST_OK_PREW, - probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub + erase_sst_fwhub, write_sst_fwhub },
- {"SST", "SST49LF008C", SST_ID, SST_49LF008C, + {"SST", "SST49LF008C", + SST_ID, SST_49LF008C, probe_49lfxxxc, 1024, 4 * 1024, TEST_UNTESTED, - probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc + erase_49lfxxxc, write_49lfxxxc },
- {"SST", "SST49LF016C", SST_ID, SST_49LF016C, + {"SST", "SST49LF016C", + SST_ID, SST_49LF016C, probe_49lfxxxc, 2048, 4 * 1024, TEST_OK_PREW, - probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc + erase_49lfxxxc, write_49lfxxxc },
- {"SST", "SST49LF020A", SST_ID, SST_49LF020A, + {"SST", "SST49LF020A", + SST_ID, SST_49LF020A, probe_jedec, 256, 16 * 1024, TEST_UNTESTED, - probe_jedec, erase_49lf040, write_49lf040 + erase_49lf040, write_49lf040 },
- {"SST", "SST49LF040", SST_ID, SST_49LF040, + {"SST", "SST49LF040", + SST_ID, SST_49LF040, probe_jedec, 512, 4096, TEST_OK_PREW, - probe_jedec, erase_49lf040, write_49lf040 + erase_49lf040, write_49lf040 },
- {"SST", "SST49LF040B", SST_ID, SST_49LF040B, + {"SST", "SST49LF040B", + SST_ID, SST_49LF040B, probe_sst_fwhub, 512, 64 * 1024, TEST_OK_PREW, - probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub + erase_sst_fwhub, write_sst_fwhub },
- {"SST", "SST49LF080A", SST_ID, SST_49LF080A, + {"SST", "SST49LF080A", + SST_ID, SST_49LF080A, probe_jedec, 1024, 4096, TEST_OK_PREW, - probe_jedec, erase_49lf040, write_49lf040 + erase_49lf040, write_49lf040 },
- {"SST", "SST49LF160C", SST_ID, SST_49LF160C, + {"SST", "SST49LF160C", + SST_ID, SST_49LF160C, probe_49lfxxxc, 2048, 4 * 1024, TEST_OK_PREW, - probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc + erase_49lfxxxc, write_49lfxxxc },
- {"ST", "M25P05-A", ST_ID, ST_M25P05A, + {"ST", "M25P05-A", + ST_ID, ST_M25P05A, probe_spi_rdid, 64, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P10-A", ST_ID, ST_M25P10A, + {"ST", "M25P10-A", + ST_ID, ST_M25P10A, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P20", ST_ID, ST_M25P20, + {"ST", "M25P20", + ST_ID, ST_M25P20, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P40", ST_ID, ST_M25P40, + {"ST", "M25P40", + ST_ID, ST_M25P40, probe_spi_rdid, 512, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P40-old", ST_ID, ST_M25P40_RES, + {"ST", "M25P40-old", + ST_ID, ST_M25P40_RES, probe_spi_res, 512, 256, TEST_UNTESTED, - probe_spi_res, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P80", ST_ID, ST_M25P80, + {"ST", "M25P80", + ST_ID, ST_M25P80, probe_spi_rdid, 1024, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P16", ST_ID, ST_M25P16, + {"ST", "M25P16", + ST_ID, ST_M25P16, probe_spi_rdid, 2048, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P32", ST_ID, ST_M25P32, + {"ST", "M25P32", + ST_ID, ST_M25P32, probe_spi_rdid, 4096, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P64", ST_ID, ST_M25P64, + {"ST", "M25P64", + ST_ID, ST_M25P64, probe_spi_rdid, 8192, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M25P128", ST_ID, ST_M25P128, + {"ST", "M25P128", + ST_ID, ST_M25P128, probe_spi_rdid, 16384, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"ST", "M29F002B", ST_ID, ST_M29F002B, + {"ST", "M29F002B", + ST_ID, ST_M29F002B, probe_jedec, 256, 64 * 1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"ST", "M29F002T/NT", ST_ID, ST_M29F002T, + {"ST", "M29F002T/NT", + ST_ID, ST_M29F002T, probe_jedec, 256, 64 * 1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"ST", "M29F040B", ST_ID, ST_M29F040B, + {"ST", "M29F040B", + ST_ID, ST_M29F040B, probe_29f040b, 512, 64 * 1024, TEST_OK_PREW, - probe_29f040b, erase_29f040b, write_29f040b + erase_29f040b, write_29f040b },
- {"ST", "M29F400BT", ST_ID, ST_M29F400BT, + {"ST", "M29F400BT", + ST_ID, ST_M29F400BT, probe_m29f400bt, 512, 64 * 1024, TEST_UNTESTED, - probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt + erase_m29f400bt, write_coreboot_m29f400bt },
- {"ST", "M29W010B", ST_ID, ST_M29W010B, + {"ST", "M29W010B", + ST_ID, ST_M29W010B, probe_jedec, 128, 16 * 1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"ST", "M29W040B", ST_ID, ST_M29W040B, + {"ST", "M29W040B", + ST_ID, ST_M29W040B, probe_jedec, 512, 64 * 1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"ST", "M50FLW040A", ST_ID, ST_M50FLW040A, + {"ST", "M50FLW040A", + ST_ID, ST_M50FLW040A, probe_stm50flw0x0x, 512, 64 * 1024, TEST_UNTESTED, - probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x + erase_stm50flw0x0x, write_stm50flw0x0x },
- {"ST", "M50FLW040B", ST_ID, ST_M50FLW040B, + {"ST", "M50FLW040B", + ST_ID, ST_M50FLW040B, probe_stm50flw0x0x, 512, 64 * 1024, TEST_UNTESTED, - probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x + erase_stm50flw0x0x, write_stm50flw0x0x },
- {"ST", "M50FLW080A", ST_ID, ST_M50FLW080A, + {"ST", "M50FLW080A", + ST_ID, ST_M50FLW080A, probe_stm50flw0x0x, 1024, 64 * 1024, TEST_OK_PREW, - probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x + erase_stm50flw0x0x, write_stm50flw0x0x },
- {"ST", "M50FLW080B", ST_ID, ST_M50FLW080B, + {"ST", "M50FLW080B", + ST_ID, ST_M50FLW080B, probe_stm50flw0x0x, 1024, 64 * 1024, TEST_UNTESTED, - probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x + erase_stm50flw0x0x, write_stm50flw0x0x },
- {"ST", "M50FW002", ST_ID, ST_M50FW002, + {"ST", "M50FW002", + ST_ID, ST_M50FW002, probe_49lfxxxc, 256, 64 * 1024, TEST_UNTESTED, - probe_49lfxxxc, NULL, NULL + NULL, NULL },
- {"ST", "M50FW016", ST_ID, ST_M50FW016, + {"ST", "M50FW016", + ST_ID, ST_M50FW016, probe_82802ab, 2048, 64 * 1024, TEST_UNTESTED, - probe_82802ab, erase_82802ab, write_82802ab + erase_82802ab, write_82802ab },
- {"ST", "M50FW040", ST_ID, ST_M50FW040, + {"ST", "M50FW040", + ST_ID, ST_M50FW040, probe_82802ab, 512, 64 * 1024, TEST_OK_PREW, - probe_82802ab, erase_82802ab, write_82802ab + erase_82802ab, write_82802ab },
- {"ST", "M50FW080", ST_ID, ST_M50FW080, + {"ST", "M50FW080", + ST_ID, ST_M50FW080, probe_82802ab, 1024, 64 * 1024, TEST_UNTESTED, - probe_82802ab, erase_82802ab, write_82802ab + erase_82802ab, write_82802ab },
- {"ST", "M50LPW116", ST_ID, ST_M50LPW116, + {"ST", "M50LPW116", + ST_ID, ST_M50LPW116, probe_jedec, 2048, 64 * 1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"SyncMOS", "S29C31004T", SYNCMOS_ID, S29C31004T, + {"SyncMOS", "S29C31004T", + SYNCMOS_ID, S29C31004T, probe_jedec, 512, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"SyncMOS", "S29C51001T", SYNCMOS_ID, S29C51001T, + {"SyncMOS", "S29C51001T", + SYNCMOS_ID, S29C51001T, probe_jedec, 128, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"SyncMOS", "S29C51002T", SYNCMOS_ID, S29C51002T, + {"SyncMOS", "S29C51002T", + SYNCMOS_ID, S29C51002T, probe_jedec, 256, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"SyncMOS", "S29C51004T", SYNCMOS_ID, S29C51004T, + {"SyncMOS", "S29C51004T", + SYNCMOS_ID, S29C51004T, probe_jedec, 512, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"Winbond", "W25x10", WINBOND_NEX_ID, W_25X10, + {"Winbond", "W25x10", + WINBOND_NEX_ID, W_25X10, probe_spi_rdid, 128, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Winbond", "W25x20", WINBOND_NEX_ID, W_25X20, + {"Winbond", "W25x20", + WINBOND_NEX_ID, W_25X20, probe_spi_rdid, 256, 256, TEST_UNTESTED, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Winbond", "W25x40", WINBOND_NEX_ID, W_25X40, + {"Winbond", "W25x40", + WINBOND_NEX_ID, W_25X40, probe_spi_rdid, 512, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Winbond", "W25x80", WINBOND_NEX_ID, W_25X80, + {"Winbond", "W25x80", + WINBOND_NEX_ID, W_25X80, probe_spi_rdid, 1024, 256, TEST_OK_PREW, - probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read + spi_chip_erase_c7, spi_chip_write, spi_chip_read },
- {"Winbond", "W29C011", WINBOND_ID, W_29C011, + {"Winbond", "W29C011", + WINBOND_ID, W_29C011, probe_jedec, 128, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Winbond", "W29C020C", WINBOND_ID, W_29C020C, + {"Winbond", "W29C020C", + WINBOND_ID, W_29C020C, probe_jedec, 256, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Winbond", "W29C040P", WINBOND_ID, W_29C040P, + {"Winbond", "W29C040P", + WINBOND_ID, W_29C040P, probe_jedec, 512, 256, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Winbond", "W29EE011", WINBOND_ID, W_29C011, + {"Winbond", "W29EE011", + WINBOND_ID, W_29C011, probe_w29ee011, 128, 128, TEST_OK_PREW, - probe_w29ee011, erase_chip_jedec, write_jedec + erase_chip_jedec, write_jedec },
- {"Winbond", "W39V040A", WINBOND_ID, W_39V040A, + {"Winbond", "W39V040A", + WINBOND_ID, W_39V040A, probe_jedec, 512, 64*1024, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"Winbond", "W39V040B", WINBOND_ID, W_39V040B, + {"Winbond", "W39V040B", + WINBOND_ID, W_39V040B, probe_jedec, 512, 64*1024, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"Winbond", "W39V040C", WINBOND_ID, 0x50, + {"Winbond", "W39V040C", + WINBOND_ID, 0x50, probe_w39v040c, 512, 64*1024, TEST_OK_PREW, - probe_w39v040c, erase_w39v040c, write_w39v040c + erase_w39v040c, write_w39v040c },
- {"Winbond", "W39V040FA", WINBOND_ID, W_39V040FA, + {"Winbond", "W39V040FA", + WINBOND_ID, W_39V040FA, probe_jedec, 512, 64*1024, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"Winbond", "W39V080A", WINBOND_ID, W_39V080A, + {"Winbond", "W39V080A", + WINBOND_ID, W_39V080A, probe_jedec, 1024, 64*1024, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_39sf020 + erase_chip_jedec, write_39sf020 },
- {"Winbond", "W49F002U", WINBOND_ID, W_49F002U, + {"Winbond", "W49F002U", + WINBOND_ID, W_49F002U, probe_jedec, 256, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"Winbond", "W49V002A", WINBOND_ID, W_49V002A, + {"Winbond", "W49V002A", + WINBOND_ID, W_49V002A, probe_jedec, 256, 128, TEST_OK_PREW, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"Winbond", "W49V002FA", WINBOND_ID, W_49V002FA, + {"Winbond", "W49V002FA", + WINBOND_ID, W_49V002FA, probe_jedec, 256, 128, TEST_UNTESTED, - probe_jedec, erase_chip_jedec, write_49f002 + erase_chip_jedec, write_49f002 },
- {"Winbond", "W39V080FA", WINBOND_ID, W_39V080FA, + {"Winbond", "W39V080FA", + WINBOND_ID, W_39V080FA, probe_winbond_fwhub, 1024, 64*1024, TEST_OK_PREW, - probe_winbond_fwhub, erase_winbond_fwhub, write_winbond_fwhub + erase_winbond_fwhub, write_winbond_fwhub },
- {"Winbond", "W39V080FA (dual mode)", WINBOND_ID, W_39V080FA_DM, + {"Winbond", "W39V080FA (dual mode)", + WINBOND_ID, W_39V080FA_DM, probe_winbond_fwhub, 512, 64*1024, TEST_UNTESTED, - probe_winbond_fwhub, erase_winbond_fwhub, write_winbond_fwhub + erase_winbond_fwhub, write_winbond_fwhub },
- {"Atmel", "unknown Atmel SPI chip", ATMEL_ID, GENERIC_DEVICE_ID, + {"Atmel", "unknown Atmel SPI chip", + ATMEL_ID, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
- {"EON", "unknown EON SPI chip", EON_ID_NOPREFIX, GENERIC_DEVICE_ID, + {"EON", "unknown EON SPI chip", + EON_ID_NOPREFIX, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
- {"Macronix", "unknown Macronix SPI chip", MX_ID, GENERIC_DEVICE_ID, + {"Macronix", "unknown Macronix SPI chip", + MX_ID, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
- {"PMC", "unknown PMC SPI chip", PMC_ID, GENERIC_DEVICE_ID, + {"PMC", "unknown PMC SPI chip", + PMC_ID, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
- {"SST", "unknown SST SPI chip", SST_ID, GENERIC_DEVICE_ID, + {"SST", "unknown SST SPI chip", + SST_ID, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
- {"ST", "unknown ST SPI chip", ST_ID, GENERIC_DEVICE_ID, + {"ST", "unknown ST SPI chip", + ST_ID, GENERIC_DEVICE_ID, probe_spi_rdid, 0, 256, TEST_UNTESTED, - probe_spi_rdid, NULL, NULL + NULL, NULL },
{NULL,}
Carl-Daniel Hailfinger wrote:
The flash probe function and the IDs for that specific probe function belong together. Group them together on a single line. We already have chips with multiple probe functions and multiple IDs. This patch is the first step in consolidating the present way of creating a new chip definition for each ID of a given chip into multiple IDs per chip definition.
Attached for Gmail users.
Thunderbird users also love this.
- {"AMD", "Am29F002(N)BB", AMD_ID, AM_29F002BB,
- {"AMD", "Am29F002(N)BB",
AMD_ID, AM_29F002BB, probe_jedec,
Please leave the chip name and ID on the same line. Once we fixed flashrom to use the non-hidden IDs here, that'll be a very convenient way for associating IDs and chips.
256, 256, TEST_UNTESTED,
probe_jedec, erase_chip_jedec, write_en29f002a
},erase_chip_jedec, write_en29f002a
I think function pointers should not be intercepted by the sized above. This patch obfuscates the code.
Stefan
On 09.12.2008 09:14, Stefan Reinauer wrote:
Carl-Daniel Hailfinger wrote:
The flash probe function and the IDs for that specific probe function belong together. Group them together on a single line. We already have chips with multiple probe functions and multiple IDs. This patch is the first step in consolidating the present way of creating a new chip definition for each ID of a given chip into multiple IDs per chip definition.
Attached for Gmail users.
Thunderbird users also love this.
- {"AMD", "Am29F002(N)BB", AMD_ID, AM_29F002BB,
- {"AMD", "Am29F002(N)BB",
AMD_ID, AM_29F002BB, probe_jedec,
Please leave the chip name and ID on the same line. Once we fixed flashrom to use the non-hidden IDs here, that'll be a very convenient way for associating IDs and chips.
256, 256, TEST_UNTESTED,
probe_jedec, erase_chip_jedec, write_en29f002a
},erase_chip_jedec, write_en29f002a
I think function pointers should not be intercepted by the sized above. This patch obfuscates the code.
How do you propose to handle chips which have multiple different IDs and multiple different probe functions? I hope you're not seriously suggesting something like this:
{"Vendor", "Chip", 0x01, 0x23, 0x45, 0x56, 0x78, 0x9a, 256, 256, TEST_UNTESTED, probe_spi_rdid, probe_spi_rems, probe_spi_res, erase_spi_foo, write_spi, read_spi }
If we picked that layout, it would be really difficult to find out which ID belongs to which probe function.
And having 3 entries for almost all SPI flash chips is definitely not the way to go. Multiply that with the number of erase functions (up to 5 for some SPI chips) and you have 15 entries per real chip. Sure, I can generate such entries, but people are going to hate that.
If the problem is not obvious, I'll gladly send a patch to illustrate my point.
Regards, Carl-Daniel
Carl-Daniel Hailfinger wrote:
... and you have 15 entries per real chip. Sure, I can generate such entries, but people are going to hate that.
I'm not hating. KISS.
//Peter
On 09.12.2008 14:17, Peter Stuge wrote:
Carl-Daniel Hailfinger wrote:
... and you have 15 entries per real chip. Sure, I can generate such entries, but people are going to hate that.
I'm not hating. KISS.
Please elaborate. Will you ack the patch I posted or will you ack the 15 entries per chip variant? If it is the latter, please tell me what scheme of chip naming for each of the 15 variants you had in mind.
Regards, Carl-Daniel
On Tue, 09 Dec 2008 14:32:23 +0100, Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net wrote:
On 09.12.2008 14:17, Peter Stuge wrote:
Carl-Daniel Hailfinger wrote:
... and you have 15 entries per real chip. Sure, I can generate such entries, but people are going to hate that.
I'm not hating. KISS.
Please elaborate. Will you ack the patch I posted or will you ack the 15 entries per chip variant? If it is the latter, please tell me what scheme of chip naming for each of the 15 variants you had in mind.
Ok, it good to be a lover and not a hater, but calm down on the kissing :-)