/* * This file is part of the flashrom project. * * Copyright (C) 2000 Silicon Integrated System Corporation * Copyright (C) 2004 Tyan Corp * Copyright (C) 2005-2008 coresystems GmbH * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "flash.h" /** * List of supported flash ROM chips. * * Please keep the list sorted by vendor name and chip name, so that * the output of 'flashrom -L' is alphabetically sorted. */ 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 = "AMD", .name = "Am29F002(N)BB", .manufacture_id = AMD_ID, .model_id = AM_29F002BB, .total_size = 256, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, { .vendor = "AMD", .name = "Am29F002(N)BT", .manufacture_id = AMD_ID, .model_id = AM_29F002BT, .total_size = 256, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, { .vendor = "AMD", .name = "Am29F016D", .manufacture_id = AMD_ID, .model_id = AM_29F016D, .total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "AMD", .name = "Am29F040B", .manufacture_id = AMD_ID, .model_id = AM_29F040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "AMD", .name = "Am29F080B", .manufacture_id = 0x01, .model_id = 0xd5, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "AMD", .name = "Am29LV040B", .manufacture_id = AMD_ID, .model_id = AM_29LV040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "AMD", .name = "Am29LV081B", .manufacture_id = 0x01, .model_id = 0x38, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "ASD", .name = "AE49F2008", .manufacture_id = ASD_ID, .model_id = ASD_AE49F2008, .total_size = 256, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Atmel", .name = "AT25DF021", .manufacture_id = ATMEL_ID, .model_id = AT_25DF021, .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, }, { .vendor = "Atmel", .name = "AT25DF041A", .manufacture_id = ATMEL_ID, .model_id = AT_25DF041A, .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, }, { .vendor = "Atmel", .name = "AT25DF081", .manufacture_id = ATMEL_ID, .model_id = AT_25DF081, .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, }, { .vendor = "Atmel", .name = "AT25DF161", .manufacture_id = ATMEL_ID, .model_id = AT_25DF161, .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, }, { .vendor = "Atmel", .name = "AT25DF321", .manufacture_id = ATMEL_ID, .model_id = AT_25DF321, .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, }, { .vendor = "Atmel", .name = "AT25DF321A", .manufacture_id = ATMEL_ID, .model_id = AT_25DF321A, .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, }, { .vendor = "Atmel", .name = "AT25DF641", .manufacture_id = ATMEL_ID, .model_id = AT_25DF641, .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, }, { .vendor = "Atmel", .name = "AT25F512B", .manufacture_id = ATMEL_ID, .model_id = AT_25F512B, .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, }, { .vendor = "Atmel", .name = "AT25FS010", .manufacture_id = ATMEL_ID, .model_id = AT_25FS010, .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, }, { .vendor = "Atmel", .name = "AT25FS040", .manufacture_id = ATMEL_ID, .model_id = AT_25FS040, .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, }, { .vendor = "Atmel", .name = "AT26DF041", .manufacture_id = ATMEL_ID, .model_id = AT_26DF041, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL /* Incompatible Page write */, .read = spi_chip_read, }, { .vendor = "Atmel", .name = "AT26DF081A", .manufacture_id = ATMEL_ID, .model_id = AT_26DF081A, .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, }, { .vendor = "Atmel", .name = "AT26DF161", .manufacture_id = ATMEL_ID, .model_id = AT_26DF161, .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, }, { .vendor = "Atmel", .name = "AT26DF161A", .manufacture_id = ATMEL_ID, .model_id = AT_26DF161A, .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, }, /*The AT26DF321 has the same ID as the AT25DF321. */ /*{ .vendor = "Atmel", .name = "AT26DF321", .manufacture_id = ATMEL_ID, .model_id = AT_26DF321, .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, },*/ { .vendor = "Atmel", .name = "AT26F004", .manufacture_id = ATMEL_ID, .model_id = AT_26F004, .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, }, { .vendor = "Atmel", .name = "AT29C020", .manufacture_id = ATMEL_ID, .model_id = AT_29C020, .total_size = 256, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Atmel", .name = "AT29C040A", .manufacture_id = ATMEL_ID, .model_id = AT_29C040A, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Atmel", .name = "AT45CS1282", .manufacture_id = ATMEL_ID, .model_id = AT_45CS1282, .total_size = 16896/*!*/, .page_size = 1056/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL /* Incompatible Page write */, .read = NULL /* Incompatible read */, }, /* No power of two sizes */ { .vendor = "Atmel", .name = "AT45DB011D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB011D, .total_size = 128/*!*/, .page_size = 256/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB021D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB021D, .total_size = 256/*!*/, .page_size = 256/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB041D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB041D, .total_size = 512/*!*/, .page_size = 256/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB081D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB081D, .total_size = 1024/*!*/, .page_size = 256/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB161D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB161D, .total_size = 2048/*!*/, .page_size = 512/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB321C", .manufacture_id = ATMEL_ID, .model_id = AT_45DB321C, .total_size = 4224/*!*/, .page_size = 528/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL /* Incompatible read */, }, /* No power of two sizes */ { .vendor = "Atmel", .name = "AT45DB321D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB321D, .total_size = 4096/*!*/, .page_size = 512/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT45DB642D", .manufacture_id = ATMEL_ID, .model_id = AT_45DB642D, .total_size = 8192/*!*/, .page_size = 1024/*!*/, .tested = TEST_BAD_READ, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, .read = NULL, }, /* Size can only be determined from status register */ { .vendor = "Atmel", .name = "AT49F002(N)", .manufacture_id = ATMEL_ID, .model_id = AT_49F002N, .total_size = 256, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "Atmel", .name = "AT49F002(N)T", .manufacture_id = ATMEL_ID, .model_id = AT_49F002NT, .total_size = 256, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "AMIC", .name = "A25L40P", .manufacture_id = AMIC_ID, .model_id = AMIC_A25L40P, .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, }, { .vendor = "AMIC", .name = "A29002B", .manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29002B, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f002, .erase = erase_29f002, .write = write_29f002, }, { .vendor = "AMIC", .name = "A29002T", .manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29002T, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_29f002, .erase = erase_29f002, .write = write_29f002, }, { .vendor = "AMIC", .name = "A29040B", .manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A29040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PR, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "AMIC", .name = "A49LF040A", .manufacture_id = AMIC_ID_NOPREFIX, .model_id = AMIC_A49LF040A, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_49fl00x, }, { .vendor = "EMST", .name = "F49B002UA", .manufacture_id = EMST_ID, .model_id = EMST_F49B002UA, .total_size = 256, .page_size = 4096, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "EON", .name = "EN29F002(A)(N)B", .manufacture_id = EON_ID, .model_id = EN_29F002B, .total_size = 256, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, { .vendor = "EON", .name = "EN29F002(A)(N)T", .manufacture_id = EON_ID, .model_id = EN_29F002T, .total_size = 256, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_en29f002a, }, { .vendor = "Fujitsu", .name = "MBM29F004BC", .manufacture_id = FUJITSU_ID, .model_id = MBM29F004BC, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = NULL, .write = NULL, }, { .vendor = "Fujitsu", .name = "MBM29F004TC", .manufacture_id = FUJITSU_ID, .model_id = MBM29F004TC, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = NULL, .write = NULL, }, { .vendor = "Fujitsu", .name = "MBM29F400BC", .manufacture_id = FUJITSU_ID, .model_id = MBM29F400BC, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, }, { .vendor = "Fujitsu", .name = "MBM29F400TC", .manufacture_id = FUJITSU_ID, .model_id = MBM29F400TC, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, }, { .vendor = "Intel", .name = "82802AB", .manufacture_id = INTEL_ID, .model_id = 173, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_82802ab, .erase = erase_82802ab, .write = write_82802ab, }, { .vendor = "Intel", .name = "82802AC", .manufacture_id = INTEL_ID, .model_id = 172, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_82802ab, .erase = erase_82802ab, .write = write_82802ab, }, { .vendor = "Macronix", .name = "MX25L512", .manufacture_id = MX_ID, .model_id = MX_25L512, .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, }, { .vendor = "Macronix", .name = "MX25L1005", .manufacture_id = MX_ID, .model_id = MX_25L1005, .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, }, { .vendor = "Macronix", .name = "MX25L2005", .manufacture_id = MX_ID, .model_id = MX_25L2005, .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, }, { .vendor = "Macronix", .name = "MX25L4005", .manufacture_id = MX_ID, .model_id = MX_25L4005, .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, }, { .vendor = "Macronix", .name = "MX25L8005", .manufacture_id = MX_ID, .model_id = MX_25L8005, .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, }, { .vendor = "Macronix", .name = "MX25L1605", .manufacture_id = MX_ID, .model_id = MX_25L1605, .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, }, { .vendor = "Macronix", .name = "MX25L3205", .manufacture_id = MX_ID, .model_id = MX_25L3205, .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, }, { .vendor = "Macronix", .name = "MX25L6405", .manufacture_id = MX_ID, .model_id = MX_25L6405, .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, }, { .vendor = "Macronix", .name = "MX29F002B", .manufacture_id = MX_ID, .model_id = MX_29F002B, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f002, .erase = erase_29f002, .write = write_29f002, }, { .vendor = "Macronix", .name = "MX29F002T", .manufacture_id = MX_ID, .model_id = MX_29F002T, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_29f002, .erase = erase_29f002, .write = write_29f002, }, { .vendor = "Macronix", .name = "MX29LV040C", .manufacture_id = MX_ID, .model_id = MX_29LV040C, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PR, .probe = probe_29f002, .erase = erase_29f002, .write = write_29f002, }, { .vendor = "Numonyx", .name = "M25PE10", .manufacture_id = ST_ID, .model_id = 0x8011, .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, }, { .vendor = "Numonyx", .name = "M25PE20", .manufacture_id = ST_ID, .model_id = 0x8012, .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, }, { .vendor = "Numonyx", .name = "M25PE40", .manufacture_id = ST_ID, .model_id = 0x8013, .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, }, { .vendor = "Numonyx", .name = "M25PE80", .manufacture_id = ST_ID, .model_id = 0x8014, .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, }, { .vendor = "Numonyx", .name = "M25PE16", .manufacture_id = ST_ID, .model_id = 0x8015, .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, }, { .vendor = "PMC", .name = "Pm25LV010", .manufacture_id = PMC_ID, .model_id = PMC_25LV010, .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, }, { .vendor = "PMC", .name = "Pm25LV016B", .manufacture_id = PMC_ID, .model_id = PMC_25LV016B, .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, }, { .vendor = "PMC", .name = "Pm25LV020", .manufacture_id = PMC_ID, .model_id = PMC_25LV020, .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, }, { .vendor = "PMC", .name = "Pm25LV040", .manufacture_id = PMC_ID, .model_id = PMC_25LV040, .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, }, { .vendor = "PMC", .name = "Pm25LV080B", .manufacture_id = PMC_ID, .model_id = PMC_25LV080B, .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, }, { .vendor = "PMC", .name = "Pm25LV512", .manufacture_id = PMC_ID, .model_id = PMC_25LV512, .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, }, { .vendor = "PMC", .name = "Pm49FL002", .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL002, .total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PREW, .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_49fl00x, }, { .vendor = "PMC", .name = "Pm49FL004", .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL004, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_49fl00x, .erase = erase_49fl00x, .write = write_49fl00x, }, { .vendor = "Sharp", .name = "LHF00L04", .manufacture_id = SHARP_ID, .model_id = SHARP_LHF00L04, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_lhf00l04, .erase = erase_lhf00l04, .write = write_lhf00l04, }, { .vendor = "Spansion", .name = "S25FL016A", .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL016A, .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, }, { .vendor = "SST", .name = "SST25VF016B", .manufacture_id = SST_ID, .model_id = SST_25VF016B, .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, }, { .vendor = "SST", .name = "SST25VF032B", .manufacture_id = SST_ID, .model_id = SST_25VF032B, .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, }, { .vendor = "SST", .name = "SST25VF040B", .manufacture_id = SST_ID, .model_id = SST_25VF040B, .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, }, { .vendor = "SST", .name = "SST25VF040B.REMS", .manufacture_id = 0xbf, .model_id = 0x8d, .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, }, { .vendor = "SST", .name = "SST25VF080B", .manufacture_id = SST_ID, .model_id = SST_25VF080B, .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, }, { .vendor = "SST", .name = "SST28SF040A", .manufacture_id = SST_ID, .model_id = SST_28SF040, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_28sf040, .erase = erase_28sf040, .write = write_28sf040, }, { .vendor = "SST", .name = "SST29EE010", .manufacture_id = SST_ID, .model_id = SST_29EE010, .total_size = 128, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "SST", .name = "SST29LE010", .manufacture_id = SST_ID, .model_id = SST_29LE010, .total_size = 128, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "SST", .name = "SST29EE020A", .manufacture_id = SST_ID, .model_id = SST_29EE020A, .total_size = 256, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "SST", .name = "SST29LE020", .manufacture_id = SST_ID, .model_id = SST_29LE020, .total_size = 256, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "SST", .name = "SST39SF010A", .manufacture_id = SST_ID, .model_id = SST_39SF010, .total_size = 128, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39SF020A", .manufacture_id = SST_ID, .model_id = SST_39SF020, .total_size = 256, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39SF040", .manufacture_id = SST_ID, .model_id = SST_39SF040, .total_size = 512, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39VF512", .manufacture_id = SST_ID, .model_id = SST_39VF512, .total_size = 64, .page_size = 4096, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39VF010", .manufacture_id = SST_ID, .model_id = SST_39VF010, .total_size = 128, .page_size = 4096, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39VF020", .manufacture_id = SST_ID, .model_id = SST_39VF020, .total_size = 256, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39VF040", .manufacture_id = SST_ID, .model_id = SST_39VF040, .total_size = 512, .page_size = 4096, .tested = TEST_OK_PROBE, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST39VF080", .manufacture_id = 0xbf, .model_id = 0xd8, .total_size = 1024, .page_size = 4096, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "SST", .name = "SST49LF002A/B", .manufacture_id = SST_ID, .model_id = SST_49LF002A, .total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PREW, .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_sst_fwhub, }, { .vendor = "SST", .name = "SST49LF003A/B", .manufacture_id = SST_ID, .model_id = SST_49LF003A, .total_size = 384, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_sst_fwhub, }, { .vendor = "SST", .name = "SST49LF004A/B", .manufacture_id = SST_ID, .model_id = SST_49LF004A, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_sst_fwhub, }, { .vendor = "SST", .name = "SST49LF004C", .manufacture_id = SST_ID, .model_id = SST_49LF004C, .total_size = 512, .page_size = 4 * 1024, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_49lfxxxc, }, { .vendor = "SST", .name = "SST49LF008A", .manufacture_id = SST_ID, .model_id = SST_49LF008A, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_sst_fwhub, }, { .vendor = "SST", .name = "SST49LF008C", .manufacture_id = SST_ID, .model_id = SST_49LF008C, .total_size = 1024, .page_size = 4 * 1024, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_49lfxxxc, }, { .vendor = "SST", .name = "SST49LF016C", .manufacture_id = SST_ID, .model_id = SST_49LF016C, .total_size = 2048, .page_size = 4 * 1024, .tested = TEST_OK_PREW, .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_49lfxxxc, }, { .vendor = "SST", .name = "SST49LF020", .manufacture_id = SST_ID, .model_id = SST_49LF020, .total_size = 256, .page_size = 16 * 1024, .tested = TEST_OK_PR, .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, { .vendor = "SST", .name = "SST49LF020A", .manufacture_id = SST_ID, .model_id = SST_49LF020A, .total_size = 256, .page_size = 16 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, { .vendor = "SST", .name = "SST49LF040", .manufacture_id = SST_ID, .model_id = SST_49LF040, .total_size = 512, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, { .vendor = "SST", .name = "SST49LF040B", .manufacture_id = SST_ID, .model_id = SST_49LF040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_sst_fwhub, .erase = erase_sst_fwhub, .write = write_sst_fwhub, }, { .vendor = "SST", .name = "SST49LF080A", .manufacture_id = SST_ID, .model_id = SST_49LF080A, .total_size = 1024, .page_size = 4096, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_49lf040, .write = write_49lf040, }, { .vendor = "SST", .name = "SST49LF160C", .manufacture_id = SST_ID, .model_id = SST_49LF160C, .total_size = 2048, .page_size = 4 * 1024, .tested = TEST_OK_PREW, .probe = probe_49lfxxxc, .erase = erase_49lfxxxc, .write = write_49lfxxxc, }, { .vendor = "ST", .name = "M25P05-A", .manufacture_id = ST_ID, .model_id = ST_M25P05A, .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, }, { .vendor = "ST", .name = "M25P10-A", .manufacture_id = ST_ID, .model_id = ST_M25P10A, .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, }, { .vendor = "ST", .name = "M25P20", .manufacture_id = ST_ID, .model_id = ST_M25P20, .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, }, { .vendor = "ST", .name = "M25P40", .manufacture_id = ST_ID, .model_id = ST_M25P40, .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, }, { .vendor = "ST", .name = "M25P40-old", .manufacture_id = ST_ID, .model_id = ST_M25P40_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, }, { .vendor = "ST", .name = "M25P80", .manufacture_id = ST_ID, .model_id = ST_M25P80, .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, }, { .vendor = "ST", .name = "M25P16", .manufacture_id = ST_ID, .model_id = ST_M25P16, .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, }, { .vendor = "ST", .name = "M25P32", .manufacture_id = ST_ID, .model_id = ST_M25P32, .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, }, { .vendor = "ST", .name = "M25P64", .manufacture_id = ST_ID, .model_id = ST_M25P64, .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, }, { .vendor = "ST", .name = "M25P128", .manufacture_id = ST_ID, .model_id = ST_M25P128, .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, }, { .vendor = "ST", .name = "M29F002B", .manufacture_id = ST_ID, .model_id = ST_M29F002B, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_m29f002, .write = write_m29f002b, }, { .vendor = "ST", .name = "M29F002T/NT", .manufacture_id = ST_ID, .model_id = ST_M29F002T, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_m29f002, .write = write_m29f002t, }, { .vendor = "ST", .name = "M29F040B", .manufacture_id = ST_ID, .model_id = ST_M29F040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_29f040b, .erase = erase_29f040b, .write = write_29f040b, }, { .vendor = "ST", .name = "M29F400BT", .manufacture_id = ST_ID, .model_id = ST_M29F400BT, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .erase = erase_m29f400bt, .write = write_coreboot_m29f400bt, }, { .vendor = "ST", .name = "M29W010B", .manufacture_id = ST_ID, .model_id = ST_M29W010B, .total_size = 128, .page_size = 16 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "ST", .name = "M29W040B", .manufacture_id = ST_ID, .model_id = ST_M29W040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "ST", .name = "M50FLW040A", .manufacture_id = ST_ID, .model_id = ST_M50FLW040A, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, }, { .vendor = "ST", .name = "M50FLW040B", .manufacture_id = ST_ID, .model_id = ST_M50FLW040B, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, }, { .vendor = "ST", .name = "M50FLW080A", .manufacture_id = ST_ID, .model_id = ST_M50FLW080A, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, }, { .vendor = "ST", .name = "M50FLW080B", .manufacture_id = ST_ID, .model_id = ST_M50FLW080B, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_stm50flw0x0x, .erase = erase_stm50flw0x0x, .write = write_stm50flw0x0x, }, { .vendor = "ST", .name = "M50FW002", .manufacture_id = ST_ID, .model_id = ST_M50FW002, .total_size = 256, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .erase = NULL, .write = NULL, }, { .vendor = "ST", .name = "M50FW016", .manufacture_id = ST_ID, .model_id = ST_M50FW016, .total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_82802ab, .erase = erase_82802ab, .write = write_82802ab, }, { .vendor = "ST", .name = "M50FW040", .manufacture_id = ST_ID, .model_id = ST_M50FW040, .total_size = 512, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_82802ab, .erase = erase_82802ab, .write = write_82802ab, }, { .vendor = "ST", .name = "M50FW080", .manufacture_id = ST_ID, .model_id = ST_M50FW080, .total_size = 1024, .page_size = 64 * 1024, .tested = TEST_OK_PREW, .probe = probe_82802ab, .erase = erase_82802ab, .write = write_82802ab, }, { .vendor = "ST", .name = "M50LPW116", .manufacture_id = ST_ID, .model_id = ST_M50LPW116, .total_size = 2048, .page_size = 64 * 1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "SyncMOS", .name = "S29C31004T", .manufacture_id = SYNCMOS_ID, .model_id = S29C31004T, .total_size = 512, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "SyncMOS", .name = "S29C51001T", .manufacture_id = SYNCMOS_ID, .model_id = S29C51001T, .total_size = 128, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "SyncMOS", .name = "S29C51002T", .manufacture_id = SYNCMOS_ID, .model_id = S29C51002T, .total_size = 256, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "SyncMOS", .name = "S29C51004T", .manufacture_id = SYNCMOS_ID, .model_id = S29C51004T, .total_size = 512, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "Winbond", .name = "W25x10", .manufacture_id = WINBOND_NEX_ID, .model_id = W_25X10, .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, }, { .vendor = "Winbond", .name = "W25x20", .manufacture_id = WINBOND_NEX_ID, .model_id = W_25X20, .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, }, { .vendor = "Winbond", .name = "W25x40", .manufacture_id = WINBOND_NEX_ID, .model_id = W_25X40, .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, }, { .vendor = "Winbond", .name = "W25x80", .manufacture_id = WINBOND_NEX_ID, .model_id = W_25X80, .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, }, { .vendor = "Winbond", .name = "W29C011", .manufacture_id = WINBOND_ID, .model_id = W_29C011, .total_size = 128, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Winbond", .name = "W29C020C", .manufacture_id = WINBOND_ID, .model_id = W_29C020C, .total_size = 256, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Winbond", .name = "W29C040P", .manufacture_id = WINBOND_ID, .model_id = W_29C040P, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Winbond", .name = "W29EE011", .manufacture_id = WINBOND_ID, .model_id = W_29C011, .total_size = 128, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_w29ee011, .erase = erase_chip_jedec, .write = write_jedec, }, { .vendor = "Winbond", .name = "W39V040A", .manufacture_id = WINBOND_ID, .model_id = W_39V040A, .total_size = 512, .page_size = 64*1024, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "Winbond", .name = "W39V040B", .manufacture_id = WINBOND_ID, .model_id = W_39V040B, .total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "Winbond", .name = "W39V040C", .manufacture_id = WINBOND_ID, .model_id = 0x50, .total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW, .probe = probe_w39v040c, .erase = erase_w39v040c, .write = write_w39v040c, }, { .vendor = "Winbond", .name = "W39V040FA", .manufacture_id = WINBOND_ID, .model_id = W_39V040FA, .total_size = 512, .page_size = 64*1024, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "Winbond", .name = "W39V080A", .manufacture_id = WINBOND_ID, .model_id = W_39V080A, .total_size = 1024, .page_size = 64*1024, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_39sf020, }, { .vendor = "Winbond", .name = "W49F002U", .manufacture_id = WINBOND_ID, .model_id = W_49F002U, .total_size = 256, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "Winbond", .name = "W49V002A", .manufacture_id = WINBOND_ID, .model_id = W_49V002A, .total_size = 256, .page_size = 128, .tested = TEST_OK_PREW, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "Winbond", .name = "W49V002FA", .manufacture_id = WINBOND_ID, .model_id = W_49V002FA, .total_size = 256, .page_size = 128, .tested = TEST_UNTESTED, .probe = probe_jedec, .erase = erase_chip_jedec, .write = write_49f002, }, { .vendor = "Winbond", .name = "W39V080FA", .manufacture_id = WINBOND_ID, .model_id = W_39V080FA, .total_size = 1024, .page_size = 64*1024, .tested = TEST_OK_PREW, .probe = probe_winbond_fwhub, .erase = erase_winbond_fwhub, .write = write_winbond_fwhub, }, { .vendor = "Winbond", .name = "W39V080FA (dual mode)", .manufacture_id = WINBOND_ID, .model_id = W_39V080FA_DM, .total_size = 512, .page_size = 64*1024, .tested = TEST_UNTESTED, .probe = probe_winbond_fwhub, .erase = erase_winbond_fwhub, .write = write_winbond_fwhub, }, { .vendor = "Atmel", .name = "unknown Atmel SPI chip", .manufacture_id = ATMEL_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { .vendor = "EON", .name = "unknown EON SPI chip", .manufacture_id = EON_ID_NOPREFIX, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { .vendor = "Macronix", .name = "unknown Macronix SPI chip", .manufacture_id = MX_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { .vendor = "PMC", .name = "unknown PMC SPI chip", .manufacture_id = PMC_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { .vendor = "SST", .name = "unknown SST SPI chip", .manufacture_id = SST_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { .vendor = "ST", .name = "unknown ST SPI chip", .manufacture_id = ST_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .erase = NULL, .write = NULL, }, { NULL } };