Author: hailfinger Date: Thu Jul 29 00:20:20 2010 New Revision: 1114 URL: http://flashrom.org/trac/coreboot/changeset/1114
Log: Cosmetics. Fix alphabetic sort order for manufacturers in flashchips.c. Rename a few EON chips to Eon.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Uwe Hermann uwe@hermann-uwe.de
Modified: trunk/flashchips.c
Modified: trunk/flashchips.c ============================================================================== --- trunk/flashchips.c Wed Jul 28 17:08:35 2010 (r1113) +++ trunk/flashchips.c Thu Jul 29 00:20:20 2010 (r1114) @@ -275,63 +275,59 @@ },
{ - .vendor = "ASD", - .name = "AE49F2008", - .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = ASD_ID, - .model_id = ASD_AE49F2008, - .total_size = 256, - .page_size = 128, - .feature_bits = FEATURE_EITHER_RESET, + .vendor = "AMIC", + .name = "A25L05PT", + .bustype = CHIP_BUSTYPE_SPI, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L05PT, + .total_size = 64, + .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_FIXME, + .probe = probe_spi_rdid4, + .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { - {128 * 1024, 1}, - {96 * 1024, 1}, - {8 * 1024, 2}, + {32 * 1024, 1}, {16 * 1024, 1}, + {8 * 1024, 1}, + {4 * 1024, 2}, }, - .block_erase = erase_sector_jedec, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec, - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ - .vendor = "Atmel", - .name = "AT25DF021", + .vendor = "AMIC", + .name = "A25L05PU", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF021, - .total_size = 256, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L05PU, + .total_size = 64, .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 8} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 4} }, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {256 * 1024, 1} }, + .eraseblocks = { {64 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -341,32 +337,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25DF041A", + .vendor = "AMIC", + .name = "A25L10PT", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF041A, - .total_size = 512, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L10PT, + .total_size = 128, .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 16} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { + {64 * 1024, 1}, + {32 * 1024, 1}, + {16 * 1024, 1}, + {8 * 1024, 1}, + {4 * 1024, 2}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {128 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -376,32 +369,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25DF081", + .vendor = "AMIC", + .name = "A25L10PU", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF081, - .total_size = 1024, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L10PU, + .total_size = 128, .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 256} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 32} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 16} }, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + {64 * 1024, 1}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {1024 * 1024, 1} }, + .eraseblocks = { {128 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -411,32 +401,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25DF161", + .vendor = "AMIC", + .name = "A25L20PT", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF161, - .total_size = 2048, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L20PT, + .total_size = 256, .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 512} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 64} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 32} }, + .eraseblocks = { + {64 * 1024, 3}, + {32 * 1024, 1}, + {16 * 1024, 1}, + {8 * 1024, 1}, + {4 * 1024, 2}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, + .eraseblocks = { {256 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -446,32 +433,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25DF321", + .vendor = "AMIC", + .name = "A25L20PU", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF321, - .total_size = 4096, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L20PU, + .total_size = 256, .page_size = 256, - .tested = TEST_OK_PRW, - .probe = probe_spi_rdid, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 1024} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 128} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 64} }, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + {64 * 1024, 3}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, + .eraseblocks = { {256 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -480,33 +464,35 @@ .read = spi_chip_read, },
+ /* The A25L40P{T,U} chips are distinguished by their + * erase block layouts, but without any distinction in RDID. + * This inexplicable quirk was verified by Rudolf Marek + * and discussed on the flashrom mailing list on 2010-07-12. + */ { - .vendor = "Atmel", - .name = "AT25DF321A", + .vendor = "AMIC", + .name = "A25L40PT", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF321A, - .total_size = 4096, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L40PT, + .total_size = 512, .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .tested = TEST_OK_PRW, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 1024} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 128} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 64} }, + .eraseblocks = { + {64 * 1024, 7}, + {32 * 1024, 1}, + {16 * 1024, 1}, + {8 * 1024, 1}, + {4 * 1024, 2}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, + .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -516,32 +502,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25DF641", + .vendor = "AMIC", + .name = "A25L40PU", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25DF641, - .total_size = 8192, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L40PU, + .total_size = 512, .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .tested = TEST_OK_PRW, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 2048} }, - .block_erase = spi_block_erase_20, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + {64 * 1024, 7}, + }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {32 * 1024, 256} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 128} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {8 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {8 * 1024 * 1024, 1} }, + .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -551,32 +534,29 @@ },
{ - .vendor = "Atmel", - .name = "AT25F512B", + .vendor = "AMIC", + .name = "A25L80P", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25F512B, - .total_size = 64, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L80P, + .total_size = 1024, .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 16} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 2} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {32 * 1024, 2} }, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + {64 * 1024, 15}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {64 * 1024, 1} }, + .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -586,32 +566,32 @@ },
{ - .vendor = "Atmel", - .name = "AT25FS010", + .vendor = "AMIC", + .name = "A25L16PT", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25FS010, - .total_size = 128, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L16PT, + .total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {32 * 1024, 4} }, + .eraseblocks = { + {64 * 1024, 31}, + {32 * 1024, 1}, + {16 * 1024, 1}, + {8 * 1024, 1}, + {4 * 1024, 2}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {128 * 1024, 1} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {128 * 1024, 1} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -621,32 +601,32 @@ },
{ - .vendor = "Atmel", - .name = "AT25FS040", + .vendor = "AMIC", + .name = "A25L16PU", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_25FS040, - .total_size = 512, + .manufacture_id = AMIC_ID, + .model_id = AMIC_A25L16PU, + .total_size = 2048, .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .tested = TEST_OK_PRW, + .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 8} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { + {4 * 1024, 2}, + {8 * 1024, 1}, + {16 * 1024, 1}, + {32 * 1024, 1}, + {64 * 1024, 31}, + }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, @@ -656,155 +636,192 @@ },
{ - .vendor = "Atmel", - .name = "AT26DF041", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_26DF041, - .total_size = 512, - .page_size = 256, + .vendor = "AMIC", + .name = "A29002B", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = AMIC_ID_NOPREFIX, + .model_id = AMIC_A29002B, + .total_size = 256, + .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, - } + .eraseblocks = { + {16 * 1024, 1}, + {8 * 1024, 2}, + {32 * 1024, 1}, + {64 * 1024, 3}, + }, + .block_erase = erase_sector_jedec, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .write = NULL /* Incompatible Page write */, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, },
{ - .vendor = "Atmel", - .name = "AT26DF081A", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_26DF081A, - .total_size = 1024, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .vendor = "AMIC", + .name = "A29002T", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = AMIC_ID_NOPREFIX, + .model_id = AMIC_A29002T, + .total_size = 256, + .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_OK_PRW, + .probe = probe_jedec, + .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .block_erasers = { { - .eraseblocks = { {4 * 1024, 256} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 32} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 16} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { + {64 * 1024, 3}, + {32 * 1024, 1}, + {8 * 1024, 2}, + {16 * 1024, 1}, + }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, },
{ - .vendor = "Atmel", - .name = "AT26DF161", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_26DF161, - .total_size = 2048, - .page_size = 256, + .vendor = "AMIC", + .name = "A29040B", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = AMIC_ID_NOPREFIX, + .model_id = AMIC_A29040B, + .total_size = 512, + .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .block_erasers = { { - .eraseblocks = { {4 * 1024, 512} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 64} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, },
{ - .vendor = "Atmel", - .name = "AT26DF161A", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_26DF161A, - .total_size = 2048, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .vendor = "AMIC", + .name = "A49LF040A", + .bustype = CHIP_BUSTYPE_LPC, + .manufacture_id = AMIC_ID_NOPREFIX, + .model_id = AMIC_A49LF040A, + .total_size = 512, + .page_size = 64 * 1024, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .block_erasers = { { - .eraseblocks = { {4 * 1024, 512} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 64} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = erase_block_jedec, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .unlock = unlock_49fl00x, + .write = write_jedec_1, + .read = read_memmapped, + }, + + { + .vendor = "ASD", + .name = "AE49F2008", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = ASD_ID, + .model_id = ASD_AE49F2008, + .total_size = 256, + .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, + .probe_timing = TIMING_FIXME, + .block_erasers = + { + { + .eraseblocks = { + {128 * 1024, 1}, + {96 * 1024, 1}, + {8 * 1024, 2}, + {16 * 1024, 1}, + }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec, + .read = read_memmapped, },
- /*The AT26DF321 has the same ID as the AT25DF321. */ - /*{ + { .vendor = "Atmel", - .name = "AT26DF321", + .name = "AT25DF021", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_26DF321, - .total_size = 4096, + .model_id = AT_25DF021, + .total_size = 256, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 8} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, - },*/ + },
{ .vendor = "Atmel", - .name = "AT26F004", + .name = "AT25DF041A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_26F004, + .model_id = AT_25DF041A, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, @@ -829,818 +846,801 @@ .block_erase = spi_block_erase_c7, } }, - .write = NULL /* Incompatible Page write */, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT29C512", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT25DF081", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_29C512, - .total_size = 64, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, + .model_id = AT_25DF081, + .total_size = 1024, + .page_size = 256, .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = 10000, /* 10mS, Enter=Exec */ + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 256} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 32} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec, - .read = read_memmapped, - + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT29C010A", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT25DF161", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_29C010A, - .total_size = 128, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = 10000, /* 10mS, Enter=Exec */ + .model_id = AT_25DF161, + .total_size = 2048, + .page_size = 256, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 512} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 64} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 32} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec, /* FIXME */ - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT29C020", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT25DF321", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_29C020, - .total_size = 256, + .model_id = AT_25DF321, + .total_size = 4096, .page_size = 256, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = 10000, /* 10ms */ + .tested = TEST_OK_PRW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 1024} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 128} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 64} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {4 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {4 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec, - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT29C040A", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT25DF321A", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_29C040A, - .total_size = 512, + .model_id = AT_25DF321A, + .total_size = 4096, .page_size = 256, - .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = 10000, /* 10 ms */ + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 1024} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 128} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 64} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {4 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {4 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec, - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45CS1282", + .name = "AT25DF641", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45CS1282, - .total_size = 16896 /* No power of two sizes */, - .page_size = 1056 /* No power of two sizes */, - .tested = TEST_BAD_READ, + .model_id = AT_25DF641, + .total_size = 8192, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL /* Incompatible Page write */, - .read = NULL /* Incompatible read */, - }, - - { - .vendor = "Atmel", - .name = "AT45DB011D", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_45DB011D, - .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, - .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, - }, - - { - .vendor = "Atmel", - .name = "AT45DB021D", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = ATMEL_ID, - .model_id = AT_45DB021D, - .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, - .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 2048} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 256} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 128} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {8 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {8 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB041D", + .name = "AT25F512B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB041D, - .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, + .model_id = AT_25F512B, + .total_size = 64, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 16} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB081D", + .name = "AT25FS010", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB081D, - .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, + .model_id = AT_25FS010, + .total_size = 128, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB161D", + .name = "AT25FS040", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB161D, - .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, + .model_id = AT_25FS040, + .total_size = 512, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB321C", + .name = "AT26DF041", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB321C, - .total_size = 4224 /* No power of two sizes */, - .page_size = 528 /* No power of two sizes */, - .tested = TEST_BAD_READ, + .model_id = AT_26DF041, + .total_size = 512, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL /* Incompatible read */, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_20, + } + }, + .write = NULL /* Incompatible Page write */, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB321D", + .name = "AT26DF081A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB321D, - .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, + .model_id = AT_26DF081A, + .total_size = 1024, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 256} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 32} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT45DB642D", + .name = "AT26DF161", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_45DB642D, - .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, + .model_id = AT_26DF161, + .total_size = 2048, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .write = NULL, - .read = NULL, - }, - - { - .vendor = "Atmel", - .name = "AT49BV512", - .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = ATMEL_ID, - .model_id = AT_49BV512, - .total_size = 64, - .page_size = 64, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 512} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 64} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 32} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT49F020", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT26DF161A", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_49F020, - .total_size = 256, + .model_id = AT_26DF161A, + .total_size = 2048, .page_size = 256, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {4 * 1024, 512} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 64} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 32} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, },
+ /*The AT26DF321 has the same ID as the AT25DF321. */ + /*{ + .vendor = "Atmel", + .name = "AT26DF321", + .bustype = CHIP_BUSTYPE_SPI, + .manufacture_id = ATMEL_ID, + .model_id = AT_26DF321, + .total_size = 4096, + .page_size = 256, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + },*/ + { .vendor = "Atmel", - .name = "AT49F002(N)", - .bustype = CHIP_BUSTYPE_PARALLEL, + .name = "AT26F004", + .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, - .model_id = AT_49F002N, - .total_size = 256, + .model_id = AT_26F004, + .total_size = 512, .page_size = 256, - .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { - {16 * 1024, 1}, - {8 * 1024, 2}, - {96 * 1024, 1}, - {128 * 1024, 1}, - }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {32 * 1024, 16} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, + .write = NULL /* Incompatible Page write */, + .read = spi_chip_read, },
{ .vendor = "Atmel", - .name = "AT49F002(N)T", + .name = "AT29C512", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ATMEL_ID, - .model_id = AT_49F002NT, - .total_size = 256, - .page_size = 256, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PRW, + .model_id = AT_29C512, + .total_size = 64, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .probe_timing = 10000, /* 10mS, Enter=Exec */ .block_erasers = { { - .eraseblocks = { - {128 * 1024, 1}, - {96 * 1024, 1}, - {8 * 1024, 2}, - {16 * 1024, 1}, - }, - .block_erase = erase_sector_jedec, - }, { - .eraseblocks = { {256 * 1024, 1} }, + .eraseblocks = { {64 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec_1, + .write = write_jedec, .read = read_memmapped, + },
{ - .vendor = "AMIC", - .name = "A25L05PT", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L05PT, - .total_size = 64, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, - .probe_timing = TIMING_ZERO, + .vendor = "Atmel", + .name = "AT29C010A", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = ATMEL_ID, + .model_id = AT_29C010A, + .total_size = 128, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = 10000, /* 10mS, Enter=Exec */ .block_erasers = { { - .eraseblocks = { - {32 * 1024, 1}, - {16 * 1024, 1}, - {8 * 1024, 1}, - {4 * 1024, 2}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec, /* FIXME */ + .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A25L05PU", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L05PU, - .total_size = 64, + .vendor = "Atmel", + .name = "AT29C020", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = ATMEL_ID, + .model_id = AT_29C020, + .total_size = 256, .page_size = 256, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = 10000, /* 10ms */ .block_erasers = { { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec, + .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A25L10PT", - .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L10PT, - .total_size = 128, + .vendor = "Atmel", + .name = "AT29C040A", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = ATMEL_ID, + .model_id = AT_29C040A, + .total_size = 512, .page_size = 256, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = 10000, /* 10 ms */ .block_erasers = { { - .eraseblocks = { - {64 * 1024, 1}, - {32 * 1024, 1}, - {16 * 1024, 1}, - {8 * 1024, 1}, - {4 * 1024, 2}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec, + .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A25L10PU", + .vendor = "Atmel", + .name = "AT45CS1282", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L10PU, - .total_size = 128, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45CS1282, + .total_size = 16896 /* No power of two sizes */, + .page_size = 1056 /* No power of two sizes */, + .tested = TEST_BAD_READ, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - {64 * 1024, 1}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL /* Incompatible Page write */, + .read = NULL /* Incompatible read */, },
{ - .vendor = "AMIC", - .name = "A25L20PT", + .vendor = "Atmel", + .name = "AT45DB011D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L20PT, - .total_size = 256, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB011D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {64 * 1024, 3}, - {32 * 1024, 1}, - {16 * 1024, 1}, - {8 * 1024, 1}, - {4 * 1024, 2}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
{ - .vendor = "AMIC", - .name = "A25L20PU", + .vendor = "Atmel", + .name = "AT45DB021D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L20PU, - .total_size = 256, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB021D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - {64 * 1024, 3}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
- /* The A25L40P{T,U} chips are distinguished by their - * erase block layouts, but without any distinction in RDID. - * This inexplicable quirk was verified by Rudolf Marek - * and discussed on the flashrom mailing list on 2010-07-12. - */ { - .vendor = "AMIC", - .name = "A25L40PT", + .vendor = "Atmel", + .name = "AT45DB041D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L40PT, - .total_size = 512, - .page_size = 256, - .tested = TEST_OK_PRW, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB041D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {64 * 1024, 7}, - {32 * 1024, 1}, - {16 * 1024, 1}, - {8 * 1024, 1}, - {4 * 1024, 2}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
{ - .vendor = "AMIC", - .name = "A25L40PU", + .vendor = "Atmel", + .name = "AT45DB081D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L40PU, - .total_size = 512, - .page_size = 256, - .tested = TEST_OK_PRW, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB081D, + .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, + .probe_timing = TIMING_ZERO, + .write = NULL, + .read = NULL, + }, + + { + .vendor = "Atmel", + .name = "AT45DB161D", + .bustype = CHIP_BUSTYPE_SPI, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB161D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - {64 * 1024, 7}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
{ - .vendor = "AMIC", - .name = "A25L80P", + .vendor = "Atmel", + .name = "AT45DB321C", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L80P, - .total_size = 1024, - .page_size = 256, - .tested = TEST_OK_PREW, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB321C, + .total_size = 4224 /* No power of two sizes */, + .page_size = 528 /* No power of two sizes */, + .tested = TEST_BAD_READ, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - {64 * 1024, 15}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL /* Incompatible read */, },
{ - .vendor = "AMIC", - .name = "A25L16PT", + .vendor = "Atmel", + .name = "AT45DB321D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L16PT, - .total_size = 2048, - .page_size = 256, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB321D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {64 * 1024, 31}, - {32 * 1024, 1}, - {16 * 1024, 1}, - {8 * 1024, 1}, - {4 * 1024, 2}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
{ - .vendor = "AMIC", - .name = "A25L16PU", + .vendor = "Atmel", + .name = "AT45DB642D", .bustype = CHIP_BUSTYPE_SPI, - .manufacture_id = AMIC_ID, - .model_id = AMIC_A25L16PU, - .total_size = 2048, - .page_size = 256, - .tested = TEST_OK_PRW, - .probe = probe_spi_rdid4, + .manufacture_id = ATMEL_ID, + .model_id = AT_45DB642D, + .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, .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { - {4 * 1024, 2}, - {8 * 1024, 1}, - {16 * 1024, 1}, - {32 * 1024, 1}, - {64 * 1024, 31}, - }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = NULL, + .read = NULL, },
{ - .vendor = "AMIC", - .name = "A29002B", + .vendor = "Atmel", + .name = "AT49BV512", .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29002B, - .total_size = 256, - .page_size = 64 * 1024, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .manufacture_id = ATMEL_ID, + .model_id = AT_49BV512, + .total_size = 64, + .page_size = 64, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, - .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { - {16 * 1024, 1}, - {8 * 1024, 2}, - {32 * 1024, 1}, - {64 * 1024, 3}, - }, - .block_erase = erase_sector_jedec, - }, { - .eraseblocks = { {256 * 1024, 1} }, + .eraseblocks = { {64 * 1024, 1} }, .block_erase = erase_chip_block_jedec, - }, + } }, .write = write_jedec_1, .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A29002T", + .vendor = "Atmel", + .name = "AT49F020", .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29002T, + .manufacture_id = ATMEL_ID, + .model_id = AT_49F020, .total_size = 256, - .page_size = 64 * 1024, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, - .tested = TEST_OK_PRW, + .page_size = 256, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, .probe = probe_jedec, - .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { - {64 * 1024, 3}, - {32 * 1024, 1}, - {8 * 1024, 2}, - {16 * 1024, 1}, - }, - .block_erase = erase_sector_jedec, - }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, - }, + } }, .write = write_jedec_1, .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A29040B", + .vendor = "Atmel", + .name = "AT49F002(N)", .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A29040B, - .total_size = 512, - .page_size = 64 * 1024, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .manufacture_id = ATMEL_ID, + .model_id = AT_49F002N, + .total_size = 256, + .page_size = 256, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, - .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { + {16 * 1024, 1}, + {8 * 1024, 2}, + {96 * 1024, 1}, + {128 * 1024, 1}, + }, .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, - }, + } }, .write = write_jedec_1, .read = read_memmapped, },
{ - .vendor = "AMIC", - .name = "A49LF040A", - .bustype = CHIP_BUSTYPE_LPC, - .manufacture_id = AMIC_ID_NOPREFIX, - .model_id = AMIC_A49LF040A, - .total_size = 512, - .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, + .vendor = "Atmel", + .name = "AT49F002(N)T", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = ATMEL_ID, + .model_id = AT_49F002NT, + .total_size = 256, + .page_size = 256, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_OK_PRW, .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_block_jedec, + .eraseblocks = { + {128 * 1024, 1}, + {96 * 1024, 1}, + {8 * 1024, 2}, + {16 * 1024, 1}, + }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, - .unlock = unlock_49fl00x, .write = write_jedec_1, .read = read_memmapped, }, @@ -2512,7 +2512,7 @@ },
{ - .vendor = "EON", + .vendor = "Eon", .name = "EN29F002(A)(N)B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = EON_ID, @@ -2543,7 +2543,7 @@ },
{ - .vendor = "EON", + .vendor = "Eon", .name = "EN29F002(A)(N)T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = EON_ID, @@ -6998,8 +6998,8 @@ },
{ - .vendor = "EON", - .name = "unknown EON SPI chip", + .vendor = "Eon", + .name = "unknown Eon SPI chip", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = EON_ID_NOPREFIX, .model_id = GENERIC_DEVICE_ID,