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.