On Fri, 15 Jul 2011 23:26:23 -0400 Steven Zakulec spzakulec@gmail.com wrote:
I believe I've adjusted the phrasings so there's one style for each comment type.
almost ;)
The only issue I've come across is the Intel 28F002BC/BL/BV/BX-T. From my reading of the datasheets, the later two are compatible with each other voltage-wise, but the BC and BL versions are definitely not- they have non-overlapping ranges for reading.
i have looked at 29044901.pdf (28F002BL) and 29053105.pdf (28F002BV) briefly, but could not see the issue. what is the problem exactly, where should i look?
Index: flashchips.c
--- flashchips.c (revision 1373) +++ flashchips.c (working copy) @@ -86,92 +86,93 @@
{ .vendor = "AMD", .name = "Am29F002(N)BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F002BB, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .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 = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* -55 speed is +-5%, all others +-10% */
.voltage = {4750, 5250}, /* -55 speed is 4.75-5.25V, others 4.5-5.5V */
},
{ .vendor = "AMD", .name = "Am29F002(N)BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F002BT, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .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,
.voltage = {4750, 5250}, /* -55 speed is 4.75-5.25V, others 4.5-5.5V */
},
{ .vendor = "AMD", .name = "Am29F016D", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F016D, .total_size = 2 * 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 32} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {2048 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{
@@ -229,330 +230,338 @@ },
{ .vendor = "AMD", .name = "Am29LV001BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV001BB, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {8 * 1024, 1}, {4 * 1024, 2}, {16 * 1024, 7}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -45R speed is 3.0-3.6V, others 2.7-3.6V */
},
{ .vendor = "AMD", .name = "Am29LV001BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV001BT, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 7}, {4 * 1024, 2}, {8 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -45R speed is 3.0-3.6V, others 2.7-3.6V */
},
{ .vendor = "AMD", .name = "Am29LV002BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV002BB, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .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 = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */
},
{ .vendor = "AMD", .name = "Am29LV002BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV002BT, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .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,
.voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */
},
{ .vendor = "AMD", .name = "Am29LV004BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV004BB, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 1}, {8 * 1024, 2}, {32 * 1024, 1}, {64 * 1024, 7}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
},
{ .vendor = "AMD", .name = "Am29LV004BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV004BT, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 7}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
},
{ .vendor = "AMD", .name = "Am29LV008BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV008BB, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 1}, {8 * 1024, 2}, {32 * 1024, 1}, {64 * 1024, 15}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600} /* -70R is 3.0-3.6V, others 2.7-3.6V */
before you have used this (note the additional word "speed"): .voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */> },
please change all of those lines to: .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */ etc.
{ .vendor = "AMD", .name = "Am29LV008BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV008BT, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 15}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600} /* -70R is 3.0-3.6V, others 2.7-3.6V */
same here
},
{ .vendor = "AMD", .name = "Am29LV040B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PRE, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
.voltage = {3000, 3600}, /* -60R is 3.0-3.6V, others 2.7-3.6V*/
and here
},
{ .vendor = "AMD", .name = "Am29LV081B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV080B, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */ .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
.voltage = {3000, 3600}, /* -70R is 3.0-3.6V, others 2.7-3.6V */
and here
},
{ .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, .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, } }, .printlock = spi_prettyprint_status_register_amic_a25l05p, .unlock = spi_disable_blockprotect, @@ -564,60 +573,61 @@ { .vendor = "AMIC", .name = "A25L05PU", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = AMIC_A25L05PU, .total_size = 64, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .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, } }, .printlock = spi_prettyprint_status_register_amic_a25l05p, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "AMIC", .name = "A25L10PT", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = AMIC_A25L10PT, .total_size = 128, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .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, } }, .printlock = spi_prettyprint_status_register_amic_a25l05p,
@@ -1305,99 +1315,99 @@ .model_id = ATMEL_AT25DF021, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .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, } }, .printlock = spi_prettyprint_status_register_at25df, .unlock = spi_disable_blockprotect_at25df, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
.voltage = {2700, 3600}, /* Datasheet says there's a 2.3-3.6V & 2.7-3.6V model */
.voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */ would be terser, but it is ok as it is too. if you change it, please change all occurrences alike.
},
{ .vendor = "Atmel", .name = "AT25DF041A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF041A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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, } }, .printlock = spi_prettyprint_status_register_at25df, .unlock = spi_disable_blockprotect_at25df, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
.voltage = {2700, 3600}, /* Datasheet says there's a 2.3-3.6V & 2.7-3.6V model */
},
{ .vendor = "Atmel", .name = "AT25DF081", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF081, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {1024 * 1024, 1} },
@@ -1419,60 +1429,61 @@ .model_id = ATMEL_AT25DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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, } }, .printlock = spi_prettyprint_status_register_at25df_sec, .unlock = spi_disable_blockprotect_at25df_sec, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "Atmel", .name = "AT25DF161", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF161, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {2 * 1024 * 1024, 1} },
@@ -1746,61 +1757,61 @@ .block_erase = spi_block_erase_c7, } }, .printlock = spi_prettyprint_status_register_at25fs040, .unlock = spi_disable_blockprotect_at25fs040, .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ .vendor = "Atmel", .name = "AT26DF041", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT26DF041, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = spi_block_erase_20, } }, .write = NULL /* Incompatible Page write */, .read = spi_chip_read,
.voltage = {2700, 3600}, /* Datasheet says 3.0-3.6 V or 2.7-3.6 V */
.voltage = {2700, 3600}, /* 3.0-3.6V for higher speed, 2.7-3.6V normal */
},
{ .vendor = "Atmel", .name = "AT26DF081A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT26DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {1024 * 1024, 1} },
@@ -2087,77 +2098,77 @@
{ .vendor = "Atmel", .name = "AT45DB041D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB041D, .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, .write = NULL, .read = NULL, .voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
what about this one btw?
},
{ .vendor = "Atmel", .name = "AT45DB081D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB081D, .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,
.voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
.voltage = {2700, 3600}, /* Datasheet says there's a 2.5-3.6V & 2.7-3.6V model */
},
{ .vendor = "Atmel", .name = "AT45DB161D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB161D, .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, .write = NULL, .read = NULL,
.voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
.voltage = {2700, 3600}, /* Datasheet says there's a 2.5-3.6V & 2.7-3.6V model */
},
{ .vendor = "Atmel", .name = "AT45DB321C", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB321C, .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, .write = NULL, .read = NULL /* Incompatible read */, .voltage = {2700, 3600}, },
{ .vendor = "Atmel", .name = "AT45DB321D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB321D, .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, .write = NULL,
@@ -2290,60 +2301,61 @@ }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Bright", .name = "BM29F040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = BRIGHT_ID, .model_id = BRIGHT_BM29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500},
},
{ .vendor = "EMST", .name = "F49B002UA", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = EMST_ID, .model_id = EMST_F49B002UA, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { .eraseblocks = { {128 * 1024, 1}, {96 * 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,
@@ -3415,119 +3427,120 @@
{ .vendor = "Hyundai", .name = "HY29F002T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F002T, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */ .tested = TEST_OK_PRE, .probe = probe_jedec, .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,
.voltage = {4750, 5250}, /* 5.0V +-5% for -45 model, +-10% for rest */
.voltage = {4750, 5250}, /* -45 speed is 4.75-5.25V, others 4.5-5.5V */
please change to: .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
},
{ .vendor = "Hyundai", .name = "HY29F002B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F002B, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */ .tested = TEST_UNTESTED, .probe = probe_jedec, .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} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* 5.0V +-5% for -45 model, +-10% for rest */
.voltage = {4750, 5250}, /* -45 speed is 4.75-5.25V, others 4.5-5.5V */
same here
},
{ .vendor = "Hyundai", .name = "HY29F040A", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500},
},
{ .vendor = "Intel", .name = "28F001BN/BX-B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F001B, .total_size = 128, .page_size = 128 * 1024, /* 8k + 2x4k + 112k */ .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { .eraseblocks = { {8 * 1024, 1}, {4 * 1024, 2}, {112 * 1024, 1}, }, .block_erase = erase_block_82802ab, }, }, .write = write_82802ab, .read = read_memmapped, .voltage = {4500, 5500}, },
{
@@ -3555,61 +3568,61 @@ .write = write_82802ab, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Intel", .name = "28F002BC/BL/BV/BX-T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F002T, .total_size = 256, .page_size = 256 * 1024, .tested = TEST_OK_PRE, .probe = probe_82802ab, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { .eraseblocks = { {128 * 1024, 1}, {96 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_block_82802ab, }, }, .write = write_82802ab, .read = read_memmapped,
.voltage = {4500, 5500}, /* 5.0V +-10% read, 12V fast program & erase- +-5% standard, +-10% option */
.voltage = {4500, 5500}, /* 5.0V +-10% read, 12V fast program & erase- +-5% standard, +-10% option- differing read voltages */
please discuss this with me on irc (or mail). you can also just leave this change out for now and we will commit the rest.
you have dropped percentage indication in favor of absolute voltages elsewhere. OTOH this line is already way too long... maybe make it a multiline comment above the field, depending on what needs to be added after we have discussed the issues you have discovered.
},
{ .vendor = "Intel", .name = "28F008S3/S5/SC", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F004S3, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_82802ab, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_block_82802ab, }, }, .unlock = unlock_28f004s5, .write = write_82802ab, .read = read_memmapped, },
{ .vendor = "Intel", .name = "28F004B5/BE/BV/BX-B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, @@ -4025,60 +4038,61 @@ .vendor = "Macronix", .name = "MX25L1635E", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L1635E, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, }, { .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, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "Macronix", .name = "MX25L3205", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 1024} }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {4 * 1024, 1024} }, .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, }, },
@@ -4317,60 +4331,61 @@ }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Macronix", .name = "MX29F040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500},
},
{ .vendor = "Macronix", .name = "MX29LV040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX29LV040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped, .voltage = {2700, 3600}, },
{
@@ -4748,60 +4763,61 @@ .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV016B, .total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, }, { .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, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "PMC", .name = "Pm25LV020", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV020, .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_d7, }, { .eraseblocks = { {64 * 1024, 4} }, .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, .voltage = {2700, 3600},
@@ -4873,60 +4889,61 @@ .voltage = {2700, 3600}, },
{ .vendor = "PMC", .name = "Pm25LV512", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV512, .total_size = 64, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {32 * 1024, 2} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "PMC", .name = "Pm29F002T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_PM29F002T, .total_size = 256, .page_size = 8 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, .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 = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1,
@@ -5174,60 +5191,61 @@ .unlock = unlock_82802ab, .write = write_82802ab, .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Spansion", .name = "S25FL004A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL004A, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .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,
.voltage = {2700, 3600},
},
{ .vendor = "Spansion", .name = "S25FL008A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL008A, .total_size = 1024, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .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, .voltage = {2700, 3600}, },
{
@@ -5254,115 +5272,118 @@ .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ .vendor = "Spansion", .name = "S25FL032A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL032A, .total_size = 4096, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "Spansion", .name = "S25FL064A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL064A, .total_size = 8192, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "SST", .name = "SST25VF010.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF010_REMS, .total_size = 128, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rems, .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 = { {128 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "SST", .name = "SST25VF016B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF016B, .total_size = 2048, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .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,
@@ -5446,60 +5467,61 @@ .voltage = {2700, 3600}, },
{ .vendor = "SST", .name = "SST25VF040.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PR, .probe = probe_spi_rems, .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 = { {512 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "SST", .name = "SST25VF040B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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,
@@ -5511,95 +5533,97 @@ .voltage = {2700, 3600}, },
{ .vendor = "SST", .name = "SST25LF040A.RES", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PROBE, .probe = probe_spi_res2, .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 = { {512 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {3000, 3600},
},
{ .vendor = "SST", .name = "SST25VF040B.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PR, .probe = probe_spi_rems, .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} }, .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_1, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "SST", .name = "SST25VF080B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF080B, .total_size = 1024, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .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,
@@ -6753,153 +6777,154 @@ .read = spi_chip_read, },
{ .vendor = "ST", .name = "M25PX32", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ST_ID, .model_id = ST_M25PX32, .total_size = 4096, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { { 4 * 1024, 1024 } }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600},
},
{ .vendor = "ST", .name = "M25PX64", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ST_ID, .model_id = ST_M25PX64, .total_size = 8192, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { { 4 * 1024, 2048 } }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { .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 = "ST", .name = "M29F002B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F002B, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .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} }, .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* Datasheet says some are only 4.75-5.25 V */
.voltage = {4750, 5250}, /* -X model is 4.75-5.25V, others 4.5-5.5V */
"model" instead of "speed"/nothing above, please use: .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
},
{ .vendor = "ST", .name = "M29F002T/NT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F002T, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .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,
.voltage = {4750, 5250}, /* Datasheet says some are only 4.75-5.25 V */
.voltage = {4750, 5250}, /* -X model is 4.75-5.25V, others 4.5-5.5V */
see above
},
{ .vendor = "ST", .name = "M29F040B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */ .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{ @@ -8104,60 +8129,61 @@ },
{ .vendor = "Winbond", .name = "W39L040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39L040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = erase_block_jedec, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39l040, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600},
},
{ .vendor = "Winbond", .name = "W39V040A", .bustype = CHIP_BUSTYPE_LPC, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040a, .write = write_jedec_1, .read = read_memmapped, .voltage = {3000, 3600}, },
@@ -8248,87 +8274,89 @@ .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Winbond", .name = "W39V040FB", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040fb, .unlock = unlock_w39v040fb, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast program */
},
{ .vendor = "Winbond", .name = "W39V040FC", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040C, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040fc, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast program */
},
{ .vendor = "Winbond", .name = "W39V080A", .bustype = CHIP_BUSTYPE_LPC, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080A, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080a, .write = write_jedec_1, .read = read_memmapped, .voltage = {3000, 3600}, },
@@ -8451,88 +8479,89 @@ .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Winbond", .name = "W39V080FA", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080FA, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 16}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080fa, .unlock = unlock_w39v080fa, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* 12 V fast program mode */
.voltage = {3000, 3600}, /* Also has 12V fast program*/
missing space at the end
},
{ .vendor = "Winbond", .name = "W39V080FA (dual mode)", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080FA_DM, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080fa_dual, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast program */
},
{ .vendor = "AMIC", .name = "unknown AMIC SPI chip", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_BAD_PREW, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, },
{ .vendor = "Atmel", .name = "unknown Atmel SPI chip", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_BAD_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL,
i think the next iteration will be committable.
i have not looked how many chips are still missing voltage fields, but one could use my voltage printing patches to see that easily... (by using flashrom -V -L) http://patchwork.coreboot.org/patch/3215/ http://patchwork.coreboot.org/patch/3216/ dunno if they still apply cleanly, but shouldnt be hard to rebase.
On Sat, 16 Jul 2011 16:57:51 +0200 Stefan Tauner stefan.tauner@student.tuwien.ac.at wrote:
i have not looked how many chips are still missing voltage fields, but one could use my voltage printing patches to see that easily... (by using flashrom -V -L) http://patchwork.coreboot.org/patch/3215/ http://patchwork.coreboot.org/patch/3216/ dunno if they still apply cleanly, but shouldnt be hard to rebase.
i have tried it with the latest patch applied, output below. almost complete, awesome work steven! :)
Vendor Device Test Known Size Type Voltage OK Broken [kB] range [V]
(P = PROBE, R = READ, E = ERASE, W = WRITE)
AMD Am29F010A/B PRE 128 Parallel 4.50;5.50 AMD Am29F002(N)BB 256 Parallel 4.75;5.25 AMD Am29F002(N)BT 256 Parallel 4.75;5.25 AMD Am29F016D 2048 Parallel 4.50;5.50 AMD Am29F040B 512 Parallel 4.50;5.50 AMD Am29F080B 1024 Parallel 4.50;5.50 AMD Am29LV001BB PREW 128 Parallel 3.00;3.60 AMD Am29LV001BT 128 Parallel 3.00;3.60 AMD Am29LV002BB 256 Parallel 3.00;3.60 AMD Am29LV002BT 256 Parallel 3.00;3.60 AMD Am29LV004BB 512 Parallel 2.70;3.60 AMD Am29LV004BT 512 Parallel 2.70;3.60 AMD Am29LV008BB 1024 Parallel 3.00;3.60 AMD Am29LV008BT 1024 Parallel 3.00;3.60 AMD Am29LV040B PRE 512 Parallel 3.00;3.60 AMD Am29LV081B 1024 Parallel 3.00;3.60 AMIC A25L05PT 64 SPI 2.70;3.60 AMIC A25L05PU 64 SPI 2.70;3.60 AMIC A25L10PT 128 SPI 2.70;3.60 AMIC A25L10PU 128 SPI 2.70;3.60 AMIC A25L20PT 256 SPI 2.70;3.60 AMIC A25L20PU 256 SPI 2.70;3.60 AMIC A25L40PT PR 512 SPI 2.70;3.60 AMIC A25L40PU PR 512 SPI 2.70;3.60 AMIC A25L80P PRE 1024 SPI 2.70;3.60 AMIC A25L16PT 2048 SPI 2.70;3.60 AMIC A25L16PU PR 2048 SPI 2.70;3.60 AMIC A25L512 64 SPI 2.70;3.60 AMIC A25L010 128 SPI 2.70;3.60 AMIC A25L020 256 SPI 2.70;3.60 AMIC A25L040 512 SPI 2.70;3.60 AMIC A25L080 1024 SPI 2.70;3.60 AMIC A25L016 2048 SPI 2.70;3.60 AMIC A25L032 4096 SPI 2.70;3.60 AMIC A25LQ032 4096 SPI 2.70;3.60 AMIC A29002B 256 Parallel 4.50;5.50 AMIC A29002T PR 256 Parallel 4.50;5.50 AMIC A29040B 512 Parallel 4.50;5.50 AMIC A49LF040A PRE 512 LPC 3.00;3.60 Atmel AT25DF021 256 SPI 2.70;3.60 Atmel AT25DF041A 512 SPI 2.70;3.60 Atmel AT25DF081 1024 SPI 1.60;2.00 Atmel AT25DF081A 1024 SPI 2.70;3.60 Atmel AT25DF161 2048 SPI 2.70;3.60 Atmel AT25DF321 PREW 4096 SPI 2.70;3.60 Atmel AT25DF321A 4096 SPI 2.70;3.60 Atmel AT25DF641 8192 SPI 2.70;3.60 Atmel AT25DQ161 2048 SPI 2.70;3.60 Atmel AT25F512B 64 SPI 2.70;3.60 Atmel AT25FS010 128 SPI 2.70;3.60 Atmel AT25FS040 512 SPI 2.70;3.60 Atmel AT26DF041 512 SPI 2.70;3.60 Atmel AT26DF081A PREW 1024 SPI 2.70;3.60 Atmel AT26DF161 2048 SPI 2.70;3.60 Atmel AT26DF161A 2048 SPI 2.70;3.60 Atmel AT26F004 512 SPI 2.70;3.60 Atmel AT29C512 64 Parallel 4.50;5.50 Atmel AT29C010A PRE 128 Parallel 4.50;5.50 Atmel AT29C020 256 Parallel 4.50;5.50 Atmel AT29C040A 512 Parallel 4.50;5.50 Atmel AT45CS1282 R 16896 SPI 2.70;3.60 Atmel AT45DB011D R 128 SPI 2.70;3.60 Atmel AT45DB021D R 256 SPI 2.70;3.60 Atmel AT45DB041D R 512 SPI 2.50;3.60 Atmel AT45DB081D R 1024 SPI 2.70;3.60 Atmel AT45DB161D R 2048 SPI 2.70;3.60 Atmel AT45DB321C R 4224 SPI 2.70;3.60 Atmel AT45DB321D R 4096 SPI 2.70;3.60 Atmel AT45DB642D R 8192 SPI 2.70;3.60 Atmel AT49BV512 PREW 64 Parallel 2.70;3.60 Atmel AT49F020 PRE 256 Parallel 4.50;5.50 Atmel AT49F002(N) 256 Parallel 4.50;5.50 Atmel AT49F002(N)T PR 256 Parallel 4.50;5.50 Bright BM29F040 PR 512 Parallel 4.50;5.50 EMST F49B002UA 256 Parallel 4.50;5.50 EMST F25L008A 1024 SPI 2.70;3.60 Eon EN25B05 64 SPI 2.70;3.60 Eon EN25B05T 64 SPI 2.70;3.60 Eon EN25B10 128 SPI 2.70;3.60 Eon EN25B10T 128 SPI 2.70;3.60 Eon EN25B20 256 SPI 2.70;3.60 Eon EN25B20T 256 SPI 2.70;3.60 Eon EN25B40 512 SPI 2.70;3.60 Eon EN25B40T 512 SPI 2.70;3.60 Eon EN25B80 1024 SPI 2.70;3.60 Eon EN25B80T 1024 SPI 2.70;3.60 Eon EN25B16 2048 SPI 2.70;3.60 Eon EN25B16T 2048 SPI 2.70;3.60 Eon EN25B32 4096 SPI 2.70;3.60 Eon EN25B32T 4096 SPI 2.70;3.60 Eon EN25B64 8192 SPI 2.70;3.60 Eon EN25B64T 8192 SPI 2.70;3.60 Eon EN25D16 2048 SPI 2.70;3.60 Eon EN25F05 64 SPI 2.70;3.60 Eon EN25F10 128 SPI 2.70;3.60 Eon EN25F20 256 SPI 2.70;3.60 Eon EN25F40 P 512 SPI 2.70;3.60 Eon EN25F80 PRE 1024 SPI 2.70;3.60 Eon EN25F16 2048 SPI 2.70;3.60 Eon EN25F32 4096 SPI 2.70;3.60 Eon EN29F010 PRE 128 Parallel 4.50;5.50 Eon EN29F002(A)(N)B PR 256 Parallel 4.50;5.50 Eon EN29F002(A)(N)T PR 256 Parallel 4.50;5.50 Fujitsu MBM29F004BC 512 Parallel 4.50;5.50 Fujitsu MBM29F004TC 512 Parallel 4.50;5.50 Fujitsu MBM29F400BC 512 Parallel 4.75;5.25 Fujitsu MBM29F400TC 512 Parallel 4.75;5.25 Hyundai HY29F002T PRE 256 Parallel 4.75;5.25 Hyundai HY29F002B 256 Parallel 4.75;5.25 Hyundai HY29F040A 512 Parallel 4.50;5.50 Intel 28F001BN/BX-B 128 Parallel 4.50;5.50 Intel 28F001BN/BX-T 128 Parallel 4.50;5.50 Intel 28F002BC/BL/BV/BX-T PRE 256 Parallel 4.50;5.50 Intel 28F008S3/S5/SC 512 Parallel no info Intel 28F004B5/BE/BV/BX-B 512 Parallel no info Intel 28F004B5/BE/BV/BX-T 512 Parallel no info Intel 28F400BV/BX/CE/CV-B 512 Parallel no info Intel 28F400BV/BX/CE/CV-T 512 Parallel no info Intel 82802AB PREW 512 FWH 3.00;3.60 Intel 82802AC PR 1024 FWH 3.00;3.60 Macronix MX25L512 64 SPI 2.70;3.60 Macronix MX25L1005 128 SPI 2.70;3.60 Macronix MX25L2005 256 SPI 2.70;3.60 Macronix MX25L4005 PREW 512 SPI 2.70;3.60 Macronix MX25L8005 PREW 1024 SPI 2.70;3.60 Macronix MX25L1605 PREW 2048 SPI 2.70;3.60 Macronix MX25L1635D 2048 SPI 2.70;3.60 Macronix MX25L1635E 2048 SPI 2.70;3.60 Macronix MX25L3205 PREW 4096 SPI 2.70;3.60 Macronix MX25L3235D 4096 SPI 2.70;3.60 Macronix MX25L6405 P 8192 SPI 2.70;3.60 Macronix MX25L12805 16384 SPI 2.70;3.60 Macronix MX29F001B 128 Parallel 4.50;5.50 Macronix MX29F001T PREW 128 Parallel 4.50;5.50 Macronix MX29F002B 256 Parallel 4.50;5.50 Macronix MX29F002T PR 256 Parallel 4.50;5.50 Macronix MX29F040 512 Parallel 4.50;5.50 Macronix MX29LV040 512 Parallel 2.70;3.60 MoselVitelic V29C51000B 64 Parallel 4.50;5.50 MoselVitelic V29C51000T 64 Parallel 4.50;5.50 MoselVitelic V29C51400B 512 Parallel 4.50;5.50 MoselVitelic V29C51400T 512 Parallel 4.50;5.50 MoselVitelic V29LC51000 64 Parallel 4.50;5.50 MoselVitelic V29LC51001 128 Parallel 4.50;5.50 MoselVitelic V29LC51002 256 Parallel 4.50;5.50 Numonyx M25PE10 128 SPI 2.70;3.60 Numonyx M25PE20 256 SPI 2.70;3.60 Numonyx M25PE40 512 SPI 2.70;3.60 Numonyx M25PE80 PRE 1024 SPI 2.70;3.60 Numonyx M25PE16 2048 SPI 2.70;3.60 PMC Pm25LV010 128 SPI 2.70;3.60 PMC Pm25LV016B 2048 SPI 2.70;3.60 PMC Pm25LV020 256 SPI 2.70;3.60 PMC Pm25LV040 512 SPI 2.70;3.60 PMC Pm25LV080B 1024 SPI 2.70;3.60 PMC Pm25LV512 64 SPI 2.70;3.60 PMC Pm29F002T PRE 256 Parallel 4.50;5.50 PMC Pm29F002B 256 Parallel 4.50;5.50 PMC Pm39LV010 PRE 128 Parallel 2.70;3.60 PMC Pm39LV020 256 Parallel 2.70;3.60 PMC Pm39LV040 512 Parallel 2.70;3.60 PMC Pm49FL002 PREW 256 LPC, FWH 3.00;3.60 PMC Pm49FL004 PREW 512 LPC, FWH 3.00;3.60 Sanyo LF25FW203A 2048 SPI no info Sharp LHF00L04 1024 FWH 3.00;3.60 Spansion S25FL004A 512 SPI 2.70;3.60 Spansion S25FL008A PRE 1024 SPI 2.70;3.60 Spansion S25FL016A PR 2048 SPI 2.70;3.60 Spansion S25FL032A 4096 SPI 2.70;3.60 Spansion S25FL064A PREW 8192 SPI 2.70;3.60 SST SST25VF010.REMS PREW 128 SPI 2.70;3.60 SST SST25VF016B PREW 2048 SPI 2.70;3.60 SST SST25VF032B PREW 4096 SPI 2.70;3.60 SST SST25VF064C PREW 8192 SPI 2.70;3.60 SST SST25VF040.REMS PR 512 SPI 2.70;3.60 SST SST25VF040B 512 SPI 2.70;3.60 SST SST25LF040A.RES P 512 SPI 3.00;3.60 SST SST25VF040B.REMS PR 512 SPI 2.70;3.60 SST SST25VF080B PREW 1024 SPI 2.70;3.60 SST SST28SF040A 512 Parallel 4.50;5.50 SST SST29EE010 PR 128 Parallel 4.50;5.50 SST SST29LE010 128 Parallel 3.00;3.60 SST SST29EE020A PRE 256 Parallel 4.50;5.50 SST SST29LE020 PRE 256 Parallel 3.00;3.60 SST SST39SF512 PREW 64 Parallel 4.50;5.50 SST SST39SF010A PREW 128 Parallel 4.50;5.50 SST SST39SF020A PREW 256 Parallel 4.50;5.50 SST SST39SF040 PRE 512 Parallel 4.50;5.50 SST SST39VF512 PRE 64 Parallel 2.70;3.60 SST SST39VF010 PRE 128 Parallel 2.70;3.60 SST SST39VF020 256 Parallel 2.70;3.60 SST SST39VF040 512 Parallel 2.70;3.60 SST SST39VF080 1024 Parallel 2.70;3.60 SST SST49LF002A/B PREW 256 FWH 3.00;3.60 SST SST49LF003A/B PR 384 FWH 3.00;3.60 SST SST49LF004A/B PREW 512 FWH 3.00;3.60 SST SST49LF004C 512 FWH 3.00;3.60 SST SST49LF008A PRE 1024 FWH 3.00;3.60 SST SST49LF008C 1024 FWH 3.00;3.60 SST SST49LF016C PR 2048 FWH 3.00;3.60 SST SST49LF020 PREW 256 LPC 3.00;3.60 SST SST49LF020A PRE 256 LPC 3.00;3.60 SST SST49LF040 PRE 512 LPC 3.00;3.60 SST SST49LF040B PRE 512 LPC 3.00;3.60 SST SST49LF080A PREW 1024 LPC 3.00;3.60 SST SST49LF160C PRE 2048 LPC 3.00;3.60 ST M25P05-A 64 SPI 2.70;3.60 ST M25P05.RES 64 SPI 2.70;3.60 ST M25P10-A PRE 128 SPI 2.70;3.60 ST M25P10.RES 128 SPI 2.70;3.60 ST M25P20 256 SPI 2.70;3.60 ST M25P40 PR 512 SPI 2.70;3.60 ST M25P40-old 512 SPI no info ST M25P80 PREW 1024 SPI 2.70;3.60 ST M25P16 PR 2048 SPI 2.70;3.60 ST M25P32 PREW 4096 SPI 2.70;3.60 ST M25P64 8192 SPI 2.70;3.60 ST M25P128 PREW 16384 SPI 2.70;3.60 ST M25PX16 PREW 2048 SPI no info ST M25PX32 PRE 4096 SPI 2.70;3.60 ST M25PX64 PRE 8192 SPI no info ST M29F002B 256 Parallel 4.75;5.25 ST M29F002T/NT 256 Parallel 4.75;5.25 ST M29F040B 512 Parallel 4.50;5.50 ST M29F400BB 512 Parallel 4.50;5.50 ST M29F400BT 512 Parallel 4.50;5.50 ST M29W010B 128 Parallel 2.70;3.60 ST M29W040B 512 Parallel 2.70;3.60 ST M29W512B PRE 64 Parallel 2.70;3.60 ST M50FLW040A 512 LPC, FWH 3.00;3.60 ST M50FLW040B 512 LPC, FWH 3.00;3.60 ST M50FLW080A PRE 1024 LPC, FWH 3.00;3.60 ST M50FLW080B 1024 LPC, FWH 3.00;3.60 ST M50FW002 256 FWH 3.00;3.60 ST M50FW016 2048 FWH 3.00;3.60 ST M50FW040 PR 512 FWH 3.00;3.60 ST M50FW080 PREW 1024 FWH 3.00;3.60 ST M50LPW116 2048 LPC 3.00;3.60 SyncMOS/ {F,S,V}29C51001B 128 Parallel 4.50;5.50 MoselVitelic SyncMOS/ {F,S,V}29C51001T 128 Parallel 4.50;5.50 MoselVitelic SyncMOS/ {F,S,V}29C51002B 256 Parallel no info MoselVitelic SyncMOS/ {F,S,V}29C51002T PRE 256 Parallel no info MoselVitelic SyncMOS/ {F,S,V}29C51004B 512 Parallel 4.50;5.50 MoselVitelic SyncMOS/ {F,S,V}29C51004T 512 Parallel 4.50;5.50 MoselVitelic SyncMOS/ {S,V}29C31004B 512 Parallel 3.00;3.60 MoselVitelic SyncMOS/ {S,V}29C31004T 512 Parallel 3.00;3.60 MoselVitelic TI TMS29F002RB 256 Parallel 4.50;5.50 TI TMS29F002RT 256 Parallel 4.50;5.50 Winbond W25Q80 PREW 1024 SPI 2.70;3.60 Winbond W25Q16 2048 SPI 2.70;3.60 Winbond W25Q32 PREW 4096 SPI 2.70;3.60 Winbond W25Q64 PREW 8192 SPI no info Winbond W25Q128 P 16384 SPI no info Winbond W25X10 128 SPI 2.70;3.60 Winbond W25X20 256 SPI 2.70;3.60 Winbond W25X40 PREW 512 SPI 2.70;3.60 Winbond W25X80 PREW 1024 SPI 2.70;3.60 Winbond W25X16 PREW 2048 SPI 2.70;3.60 Winbond W25X32 P 4096 SPI 2.70;3.60 Winbond W25X64 P 8192 SPI 2.70;3.60 Winbond W29C010(M)/ PREW 128 Parallel no info W29C011A/ W29EE011/ W29EE012 Winbond W29C020(C)/ PREW 256 Parallel 4.50;5.50 W29C022 Winbond W29C040/P 512 Parallel 4.50;5.50 Winbond W29C010(M)/ PRE 128 Parallel no info W29C011A/ W29EE011/ W29EE012 Winbond W39L040 PR 512 Parallel 3.00;3.60 Winbond W39V040A PR 512 LPC 3.00;3.60 Winbond W39V040B PRE 512 LPC 3.00;3.60 Winbond W39V040C 512 LPC 3.00;3.60 Winbond W39V040FA PREW 512 FWH 3.00;3.60 Winbond W39V040FB PREW 512 FWH 3.00;3.60 Winbond W39V040FC 512 FWH 3.00;3.60 Winbond W39V080A 1024 LPC 3.00;3.60 Winbond W49F002U/N PRE 256 Parallel 4.50;5.50 Winbond W49F020 P 256 Parallel 4.50;5.50 Winbond W49V002A PREW 256 LPC 3.00;3.60 Winbond W49V002FA PR 256 FWH 3.00;3.60 Winbond W39V080FA PRE 1024 FWH 3.00;3.60 Winbond W39V080FA (dual mode) 512 FWH 3.00;3.60
On Sat, Jul 16, 2011 at 10:57 AM, Stefan Tauner < stefan.tauner@student.tuwien.ac.at> wrote:
On Fri, 15 Jul 2011 23:26:23 -0400 Steven Zakulec spzakulec@gmail.com wrote:
I believe I've adjusted the phrasings so there's one style for each
comment
type.
almost ;)
The only issue I've come across is the Intel 28F002BC/BL/BV/BX-T. From my reading of the datasheets, the later two are compatible with each other voltage-wise, but the BC and BL versions are definitely not- they
have
non-overlapping ranges for reading.
i have looked at 29044901.pdf (28F002BL) and 29053105.pdf (28F002BV) briefly, but could not see the issue. what is the problem exactly, where should i look?
Index: flashchips.c
--- flashchips.c (revision 1373) +++ flashchips.c (working copy) @@ -86,92 +86,93 @@
{ .vendor = "AMD", .name = "Am29F002(N)BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F002BB, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .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 = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* -55 speed is +-5%, all
others +-10% */
.voltage = {4750, 5250}, /* -55 speed is 4.75-5.25V,
others 4.5-5.5V */
}, { .vendor = "AMD", .name = "Am29F002(N)BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F002BT, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .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,
.voltage = {4750, 5250}, /* -55 speed is 4.75-5.25V,
others 4.5-5.5V */
}, { .vendor = "AMD", .name = "Am29F016D", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29F016D, .total_size = 2 * 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 32} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {2048 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, }, {
@@ -229,330 +230,338 @@ },
{ .vendor = "AMD", .name = "Am29LV001BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV001BB, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {8 * 1024, 1}, {4 * 1024, 2}, {16 * 1024, 7}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -45R speed is 3.0-3.6V,
others 2.7-3.6V */
}, { .vendor = "AMD", .name = "Am29LV001BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV001BT, .total_size = 128, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 7}, {4 * 1024, 2}, {8 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -45R speed is 3.0-3.6V,
others 2.7-3.6V */
}, { .vendor = "AMD", .name = "Am29LV002BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV002BB, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .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 = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V,
others 2.7-3.6V */
}, { .vendor = "AMD", .name = "Am29LV002BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV002BT, .total_size = 256, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .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,
.voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V,
others 2.7-3.6V */
}, { .vendor = "AMD", .name = "Am29LV004BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV004BB, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 1}, {8 * 1024, 2}, {32 * 1024, 1}, {64 * 1024, 7}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600}, }, { .vendor = "AMD", .name = "Am29LV004BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV004BT, .total_size = 512, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 7}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600}, }, { .vendor = "AMD", .name = "Am29LV008BB", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV008BB, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {16 * 1024, 1}, {8 * 1024, 2}, {32 * 1024, 1}, {64 * 1024, 15}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600} /* -70R is 3.0-3.6V, others
2.7-3.6V */ before you have used this (note the additional word "speed"): .voltage = {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */> },
please change all of those lines to: .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */ etc.
{ .vendor = "AMD", .name = "Am29LV008BT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV008BT, .total_size = 1024, .page_size = 64 * 1024, /* unused */ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 15}, {32 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600} /* -70R is 3.0-3.6V, others
2.7-3.6V */ same here
}, { .vendor = "AMD", .name = "Am29LV040B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_OK_PRE, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
.voltage = {3000, 3600}, /* -60R is 3.0-3.6V, others
2.7-3.6V*/ and here
}, { .vendor = "AMD", .name = "Am29LV081B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = AMD_ID, .model_id = AMD_AM29LV080B, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
/* datasheet specifies address as don't care */
.tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {2700, 3600},
.voltage = {3000, 3600}, /* -70R is 3.0-3.6V, others
2.7-3.6V */ and here
}, { .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, .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, } }, .printlock =
spi_prettyprint_status_register_amic_a25l05p,
.unlock = spi_disable_blockprotect,
@@ -564,60 +573,61 @@ { .vendor = "AMIC", .name = "A25L05PU", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = AMIC_A25L05PU, .total_size = 64, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .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, } }, .printlock =
spi_prettyprint_status_register_amic_a25l05p,
.unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "AMIC", .name = "A25L10PT", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = AMIC_A25L10PT, .total_size = 128, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .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, } }, .printlock =
spi_prettyprint_status_register_amic_a25l05p,
@@ -1305,99 +1315,99 @@ .model_id = ATMEL_AT25DF021, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .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, } }, .printlock = spi_prettyprint_status_register_at25df, .unlock = spi_disable_blockprotect_at25df, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V
or 2.7-3.6V */
.voltage = {2700, 3600}, /* Datasheet says there's a
2.3-3.6V & 2.7-3.6V model */ .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */ would be terser, but it is ok as it is too. if you change it, please change all occurrences alike.
}, { .vendor = "Atmel", .name = "AT25DF041A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF041A, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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, } }, .printlock = spi_prettyprint_status_register_at25df, .unlock = spi_disable_blockprotect_at25df, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V
or 2.7-3.6V */
.voltage = {2700, 3600}, /* Datasheet says there's a
2.3-3.6V & 2.7-3.6V model */
}, { .vendor = "Atmel", .name = "AT25DF081", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF081, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {1024 * 1024, 1} },
@@ -1419,60 +1429,61 @@ .model_id = ATMEL_AT25DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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, } }, .printlock =
spi_prettyprint_status_register_at25df_sec,
.unlock = spi_disable_blockprotect_at25df_sec, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "Atmel", .name = "AT25DF161", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT25DF161, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {2 * 1024 * 1024, 1} },
@@ -1746,61 +1757,61 @@ .block_erase = spi_block_erase_c7, } }, .printlock =
spi_prettyprint_status_register_at25fs040,
.unlock = spi_disable_blockprotect_at25fs040, .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, }, { .vendor = "Atmel", .name = "AT26DF041", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT26DF041, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = spi_block_erase_20, } }, .write = NULL /* Incompatible Page write */, .read = spi_chip_read,
.voltage = {2700, 3600}, /* Datasheet says 3.0-3.6 V
or 2.7-3.6 V */
.voltage = {2700, 3600}, /* 3.0-3.6V for higher
speed, 2.7-3.6V normal */
}, { .vendor = "Atmel", .name = "AT26DF081A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT26DF081A, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { .eraseblocks = { {1024 * 1024, 1} },
@@ -2087,77 +2098,77 @@
{ .vendor = "Atmel", .name = "AT45DB041D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB041D, .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, .write = NULL, .read = NULL, .voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V
or 2.7-3.6 V */
what about this one btw?
}, { .vendor = "Atmel", .name = "AT45DB081D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB081D, .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,
.voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V
or 2.7-3.6 V */
.voltage = {2700, 3600}, /* Datasheet says there's a
2.5-3.6V & 2.7-3.6V model */
}, { .vendor = "Atmel", .name = "AT45DB161D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB161D, .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, .write = NULL, .read = NULL,
.voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V
or 2.7-3.6 V */
.voltage = {2700, 3600}, /* Datasheet says there's a
2.5-3.6V & 2.7-3.6V model */
}, { .vendor = "Atmel", .name = "AT45DB321C", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB321C, .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, .write = NULL, .read = NULL /* Incompatible read */, .voltage = {2700, 3600}, }, { .vendor = "Atmel", .name = "AT45DB321D", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = ATMEL_AT45DB321D, .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, .write = NULL,
@@ -2290,60 +2301,61 @@ }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Bright", .name = "BM29F040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = BRIGHT_ID, .model_id = BRIGHT_BM29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500}, }, { .vendor = "EMST", .name = "F49B002UA", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = EMST_ID, .model_id = EMST_F49B002UA, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing
info specified */
.block_erasers = { { .eraseblocks = { {128 * 1024, 1}, {96 * 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,
@@ -3415,119 +3427,120 @@
{ .vendor = "Hyundai", .name = "HY29F002T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F002T, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions
may need FEATURE_ADDR_2AA */
.tested = TEST_OK_PRE, .probe = probe_jedec, .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,
.voltage = {4750, 5250}, /* 5.0V +-5% for -45 model,
+-10% for rest */
.voltage = {4750, 5250}, /* -45 speed is 4.75-5.25V,
others 4.5-5.5V */ please change to: .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
}, { .vendor = "Hyundai", .name = "HY29F002B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F002B, .total_size = 256, .page_size = 256 * 1024, .feature_bits = FEATURE_EITHER_RESET, /* Some revisions
may need FEATURE_ADDR_2AA */
.tested = TEST_UNTESTED, .probe = probe_jedec, .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} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* 5.0V +-5% for -45 model,
+-10% for rest */
.voltage = {4750, 5250}, /* -45 speed is 4.75-5.25V,
others 4.5-5.5V */ same here
}, { .vendor = "Hyundai", .name = "HY29F040A", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = HYUNDAI_ID, .model_id = HYUNDAI_HY29F040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500}, }, { .vendor = "Intel", .name = "28F001BN/BX-B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F001B, .total_size = 128, .page_size = 128 * 1024, /* 8k + 2x4k + 112k */ .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing
info specified */
.block_erasers = { { .eraseblocks = { {8 * 1024, 1}, {4 * 1024, 2}, {112 * 1024, 1}, }, .block_erase = erase_block_82802ab, }, }, .write = write_82802ab, .read = read_memmapped, .voltage = {4500, 5500}, }, {
@@ -3555,61 +3568,61 @@ .write = write_82802ab, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Intel", .name = "28F002BC/BL/BV/BX-T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F002T, .total_size = 256, .page_size = 256 * 1024, .tested = TEST_OK_PRE, .probe = probe_82802ab, .probe_timing = TIMING_ZERO, /* Datasheet has no timing
info specified */
.block_erasers = { { .eraseblocks = { {128 * 1024, 1}, {96 * 1024, 1}, {8 * 1024, 2}, {16 * 1024, 1}, }, .block_erase = erase_block_82802ab, }, }, .write = write_82802ab, .read = read_memmapped,
.voltage = {4500, 5500}, /* 5.0V +-10% read, 12V
fast program & erase- +-5% standard, +-10% option */
.voltage = {4500, 5500}, /* 5.0V +-10% read, 12V
fast program & erase- +-5% standard, +-10% option- differing read voltages */ please discuss this with me on irc (or mail). you can also just leave this change out for now and we will commit the rest.
you have dropped percentage indication in favor of absolute voltages elsewhere. OTOH this line is already way too long... maybe make it a multiline comment above the field, depending on what needs to be added after we have discussed the issues you have discovered.
}, { .vendor = "Intel", .name = "28F008S3/S5/SC", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID, .model_id = INTEL_28F004S3, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_82802ab, .probe_timing = TIMING_ZERO, /* Datasheet has no timing
info specified */
.block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_block_82802ab, }, }, .unlock = unlock_28f004s5, .write = write_82802ab, .read = read_memmapped, }, { .vendor = "Intel", .name = "28F004B5/BE/BV/BX-B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = INTEL_ID,
@@ -4025,60 +4038,61 @@ .vendor = "Macronix", .name = "MX25L1635E", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L1635E, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, }, { .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, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "Macronix", .name = "MX25L3205", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX25L3205, .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 1024} }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {4 * 1024, 1024} }, .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, }, },
@@ -4317,60 +4331,61 @@ }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "Macronix", .name = "MX29F040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX29F040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4500, 5500}, }, { .vendor = "Macronix", .name = "MX29LV040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = MACRONIX_ID, .model_id = MACRONIX_MX29LV040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, .read = read_memmapped, .voltage = {2700, 3600}, }, {
@@ -4748,60 +4763,61 @@ .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV016B, .total_size = 2048, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, }, { .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, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "PMC", .name = "Pm25LV020", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV020, .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_d7, }, { .eraseblocks = { {64 * 1024, 4} }, .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, .voltage = {2700, 3600},
@@ -4873,60 +4889,61 @@ .voltage = {2700, 3600}, },
{ .vendor = "PMC", .name = "Pm25LV512", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = PMC_ID, .model_id = PMC_PM25LV512, .total_size = 64, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {32 * 1024, 2} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {64 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "PMC", .name = "Pm29F002T", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_PM29F002T, .total_size = 256, .page_size = 8 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PRE, .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 = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1,
@@ -5174,60 +5191,61 @@ .unlock = unlock_82802ab, .write = write_82802ab, .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Spansion", .name = "S25FL004A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL004A, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .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,
.voltage = {2700, 3600}, }, { .vendor = "Spansion", .name = "S25FL008A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL008A, .total_size = 1024, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .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, .voltage = {2700, 3600}, }, {
@@ -5254,115 +5272,118 @@ .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ .vendor = "Spansion", .name = "S25FL032A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL032A, .total_size = 4096, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "Spansion", .name = "S25FL064A", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SPANSION_ID, .model_id = SPANSION_S25FL064A, .total_size = 8192, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF010.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF010_REMS, .total_size = 128, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rems, .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 = { {128 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF016B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF016B, .total_size = 2048, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .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,
@@ -5446,60 +5467,61 @@ .voltage = {2700, 3600}, },
{ .vendor = "SST", .name = "SST25VF040.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PR, .probe = probe_spi_rems, .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 = { {512 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF040B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B, .total_size = 512, .page_size = 256, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .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} }, .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,
@@ -5511,95 +5533,97 @@ .voltage = {2700, 3600}, },
{ .vendor = "SST", .name = "SST25LF040A.RES", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PROBE, .probe = probe_spi_res2, .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 = { {512 * 1024, 1} }, .block_erase = spi_block_erase_60, }, }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_1, .read = spi_chip_read,
.voltage = {3000, 3600}, }, { .vendor = "SST", .name = "SST25VF040B.REMS", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF040B_REMS, .total_size = 512, .page_size = 256, .tested = TEST_OK_PR, .probe = probe_spi_rems, .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} }, .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_1, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "SST", .name = "SST25VF080B", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = SST_ID, .model_id = SST_SST25VF080B, .total_size = 1024, .page_size = 256, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .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} }, .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,
@@ -6753,153 +6777,154 @@ .read = spi_chip_read, },
{ .vendor = "ST", .name = "M25PX32", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ST_ID, .model_id = ST_M25PX32, .total_size = 4096, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { { 4 * 1024, 1024 } }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read,
.voltage = {2700, 3600}, }, { .vendor = "ST", .name = "M25PX64", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ST_ID, .model_id = ST_M25PX64, .total_size = 8192, .page_size = 256, .tested = TEST_OK_PRE, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { { 4 * 1024, 2048 } }, .block_erase = spi_block_erase_20, }, { .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { .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 = "ST", .name = "M29F002B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F002B, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .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} }, .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, .read = read_memmapped,
.voltage = {4750, 5250}, /* Datasheet says some are
only 4.75-5.25 V */
.voltage = {4750, 5250}, /* -X model is 4.75-5.25V,
others 4.5-5.5V */
"model" instead of "speed"/nothing above, please use: .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
}, { .vendor = "ST", .name = "M29F002T/NT", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F002T, .total_size = 256, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .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,
.voltage = {4750, 5250}, /* Datasheet says some are
only 4.75-5.25 V */
.voltage = {4750, 5250}, /* -X model is 4.75-5.25V,
others 4.5-5.5V */
see above
}, { .vendor = "ST", .name = "M29F040B", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = ST_ID, .model_id = ST_M29F040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* datasheet specifies no
timing */
.block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, .read = read_memmapped, .voltage = {4500, 5500}, }, {
@@ -8104,60 +8129,61 @@ },
{ .vendor = "Winbond", .name = "W39L040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39L040, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = erase_block_jedec, }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39l040, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, }, { .vendor = "Winbond", .name = "W39V040A", .bustype = CHIP_BUSTYPE_LPC, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040A, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040a, .write = write_jedec_1, .read = read_memmapped, .voltage = {3000, 3600}, },
@@ -8248,87 +8274,89 @@ .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Winbond", .name = "W39V040FB", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040B, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP |
FEATURE_EITHER_RESET,
.tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040fb, .unlock = unlock_w39v040fb, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast
program */
}, { .vendor = "Winbond", .name = "W39V040FC", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V040C, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP |
FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v040fc, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast
program */
}, { .vendor = "Winbond", .name = "W39V080A", .bustype = CHIP_BUSTYPE_LPC, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080A, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080a, .write = write_jedec_1, .read = read_memmapped, .voltage = {3000, 3600}, },
@@ -8451,88 +8479,89 @@ .read = read_memmapped, .voltage = {3000, 3600}, },
{ .vendor = "Winbond", .name = "W39V080FA", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080FA, .total_size = 1024, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP |
FEATURE_EITHER_RESET,
.tested = TEST_OK_PRE, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 16}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080fa, .unlock = unlock_w39v080fa, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* 12 V fast program mode
*/
.voltage = {3000, 3600}, /* Also has 12V fast
program*/
missing space at the end
}, { .vendor = "Winbond", .name = "W39V080FA (dual mode)", .bustype = CHIP_BUSTYPE_FWH, .manufacture_id = WINBOND_ID, .model_id = WINBOND_W39V080FA_DM, .total_size = 512, .page_size = 64 * 1024, .feature_bits = FEATURE_REGISTERMAP |
FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, .printlock = printlock_w39v080fa_dual, .write = write_jedec_1, .read = read_memmapped,
.voltage = {3000, 3600}, /* Also has 12V fast
program */
}, { .vendor = "AMIC", .name = "unknown AMIC SPI chip", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = AMIC_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_BAD_PREW, .probe = probe_spi_rdid4, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL, }, { .vendor = "Atmel", .name = "unknown Atmel SPI chip", .bustype = CHIP_BUSTYPE_SPI, .manufacture_id = ATMEL_ID, .model_id = GENERIC_DEVICE_ID, .total_size = 0, .page_size = 256, .tested = TEST_BAD_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .write = NULL, .read = NULL,
i think the next iteration will be committable.
i have not looked how many chips are still missing voltage fields, but one could use my voltage printing patches to see that easily... (by using flashrom -V -L) http://patchwork.coreboot.org/patch/3215/ http://patchwork.coreboot.org/patch/3216/ dunno if they still apply cleanly, but shouldnt be hard to rebase. -- Kind regards/Mit freundlichen Grüßen, Stefan Tauner
I've dropped the Intel one for now while I look more closely at it. Otherwise, I just adjusted all the comments to fit your suggestions.