Micron acquired Numonyx and asked us to change the vendor names to "Micron". For the chips clearly emerging from the former manufacturers we (will) use "Micron/Numonyx/ST" and the original name for the rest. Resorting the chip entries makes the diff unreadable, hence the stand-alone commit.
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at Acked-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at --- flashchips.c | 3752 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 1876 insertions(+), 1876 deletions(-)
diff --git a/flashchips.c b/flashchips.c index d9b708d..b79e14a 100644 --- a/flashchips.c +++ b/flashchips.c @@ -6599,392 +6599,389 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "MoselVitelic", - .name = "V29C51000B", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51000B, + .vendor = "Micron/Numonyx/ST", + .name = "M25P05-A", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M25P05A, .total_size = 64, - .page_size = 512, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512, 128} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
+ /* The ST M25P05 is a bit of a problem. It has the same ID as the + * ST M25P05-A in RES mode, but supports only 128 byte writes instead + * of 256 byte writes. We rely heavily on the fact that probe_spi_res1 + * only is successful if RDID does not work. + */ { - .vendor = "MoselVitelic", - .name = "V29C51000T", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51000T, + .vendor = "Micron/Numonyx/ST", + .name = "M25P05", + .bustype = BUS_SPI, + .manufacture_id = 0, /* Not used. */ + .model_id = ST_M25P05_RES, .total_size = 64, - .page_size = 512, - .feature_bits = FEATURE_EITHER_RESET, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_spi_res1, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512, 128} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, - }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, - }, - - { - .vendor = "MoselVitelic", - .name = "V29C51400B", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51400B, - .total_size = 512, - .page_size = 1024, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {1024, 512} }, - .block_erase = erase_sector_jedec, - }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_1, /* 128 */ + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ - .vendor = "MoselVitelic", - .name = "V29C51400T", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29C51400T, - .total_size = 512, - .page_size = 1024, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, + .vendor = "Micron/Numonyx/ST", + .name = "M25P10-A", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M25P10A, + .total_size = 128, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PRE, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {1024, 512} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
+ /* The ST M25P10 has the same problem as the M25P05. */ { - .vendor = "MoselVitelic", - .name = "V29LC51000", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51000, - .total_size = 64, - .page_size = 512, - .feature_bits = FEATURE_EITHER_RESET, + .vendor = "Micron/Numonyx/ST", + .name = "M25P10", + .bustype = BUS_SPI, + .manufacture_id = 0, /* Not used. */ + .model_id = ST_M25P10_RES, + .total_size = 128, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_spi_res1, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512, 128} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_1, /* 128 */ + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ - .vendor = "MoselVitelic", - .name = "V29LC51001", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51001, - .total_size = 128, - .page_size = 512, - .feature_bits = FEATURE_EITHER_RESET, + .vendor = "Micron/Numonyx/ST", /* Numonyx */ + .name = "M25P20", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M25P20, + .total_size = 256, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512, 256} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp1, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, },
{ - .vendor = "MoselVitelic", - .name = "V29LC51002", - .bustype = BUS_PARALLEL, - .manufacture_id = SYNCMOS_MVC_ID, - .model_id = MVC_V29LC51002, + .vendor = "Micron/Numonyx/ST", + .name = "M25P20-old", + .bustype = BUS_SPI, + .manufacture_id = 0, /* Not used. */ + .model_id = ST_M25P20_RES, .total_size = 256, - .page_size = 512, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PREW, + .probe = probe_spi_res1, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {512, 512} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp1, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, },
{ - .vendor = "Nantronics", - .name = "N25S10", + .vendor = "Micron/Numonyx/ST", /* Numonyx */ + .name = "M25P40", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S10, - .total_size = 128, + .manufacture_id = ST_ID, + .model_id = ST_M25P40, + .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_d7, + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 2} }, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M25P40-old", + .bustype = BUS_SPI, + .manufacture_id = 0, /* Not used. */ + .model_id = ST_M25P40_RES, + .total_size = 512, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_res1, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { {64 * 1024, 8} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M25P80", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M25P80, + .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 = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {128 * 1024, 1} }, + .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Nantronics", - .name = "N25S20", + .vendor = "Micron/Numonyx/ST", + .name = "M25P16", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S20, - .total_size = 256, + .manufacture_id = ST_ID, + .model_id = ST_M25P16, + .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PR, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {32 * 1024, 8} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 4} }, + .eraseblocks = { {64 * 1024, 32} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {256 * 1024, 1} }, + .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Nantronics", - .name = "N25S40", + .vendor = "Micron/Numonyx/ST", + .name = "M25P32", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S40, - .total_size = 512, + .manufacture_id = ST_ID, + .model_id = ST_M25P32, + .total_size = 4096, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {32 * 1024, 16} }, - .block_erase = spi_block_erase_52, - }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Nantronics", - .name = "N25S80", + .vendor = "Micron/Numonyx/ST", + .name = "M25P64", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S80, - .total_size = 1024, + .manufacture_id = ST_ID, + .model_id = ST_M25P64, + .total_size = 8192, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .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} }, + .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {1024 * 1024, 1} }, + .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Nantronics", - .name = "N25S16", + .vendor = "Micron/Numonyx/ST", + .name = "M25P128", .bustype = BUS_SPI, - .manufacture_id = NANTRONICS_ID_NOPREFIX, - .model_id = NANTRONICS_N25S16, - .total_size = 2048, + .manufacture_id = ST_ID, + .model_id = ST_M25P128, + .total_size = 16384, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, + .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 = { {64 * 1024, 32} }, + .eraseblocks = { {256 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {2048 * 1024, 1} }, + .eraseblocks = { {16 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, + .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M25PE10", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7016,7 +7013,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M25PE20", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7048,7 +7045,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M25PE40", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7080,7 +7077,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M25PE80", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7112,7 +7109,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M25PE16", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7144,68 +7141,197 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", - .name = "M45PE10", + .vendor = "Micron/Numonyx/ST", + .name = "M25PX80", .bustype = BUS_SPI, .manufacture_id = ST_ID, - .model_id = ST_M45PE10, - .total_size = 128, + .model_id = ST_M25PX80, + .total_size = 1024, .page_size = 256, - .tested = TEST_UNTESTED, + /* OTP: 64B total; read 0x4B, write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256, 512} }, - .block_erase = spi_block_erase_db, + .eraseblocks = { { 4 * 1024, 256 } }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {64 * 1024, 2} }, + .eraseblocks = { {64 * 1024, 16} }, .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_welwip, - .unlock = NULL, /* #WP pin write-protects lower 64kB. */ - .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */ - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ + .write = spi_chip_write_256, + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Numonyx", - .name = "M45PE20", + .vendor = "Micron/Numonyx/ST", + .name = "M25PX16", .bustype = BUS_SPI, .manufacture_id = ST_ID, - .model_id = ST_M45PE20, - .total_size = 256, + .model_id = ST_M25PX16, + .total_size = 2048, .page_size = 256, - .tested = TEST_UNTESTED, + /* OTP: 64B total; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { - .eraseblocks = { {256, 1024} }, - .block_erase = spi_block_erase_db, + .eraseblocks = { { 4 * 1024, 512 } }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {64 * 1024, 4} }, + .eraseblocks = { {64 * 1024, 32} }, .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_welwip, - .unlock = NULL, /* #WP pin write-protects lower 64kB. */ - .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */ - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {2700, 3600}, + .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ + .write = spi_chip_write_256, + .read = spi_chip_read, },
{ - .vendor = "Numonyx", - .name = "M45PE40", + .vendor = "Micron/Numonyx/ST", + .name = "M25PX32", .bustype = BUS_SPI, .manufacture_id = ST_ID, - .model_id = ST_M45PE40, - .total_size = 512, + .model_id = ST_M25PX32, + .total_size = 4096, .page_size = 256, - .tested = TEST_UNTESTED, + /* OTP: 64B total; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .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, + } + }, + .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M25PX64", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M25PX64, + .total_size = 8192, + .page_size = 256, + /* OTP: 64B total; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .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, + } + }, + .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ + .write = spi_chip_write_256, + .read = spi_chip_read, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M45PE10", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M45PE10, + .total_size = 128, + .page_size = 256, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = { + { + .eraseblocks = { {256, 512} }, + .block_erase = spi_block_erase_db, + }, { + .eraseblocks = { {64 * 1024, 2} }, + .block_erase = spi_block_erase_d8, + } + }, + .printlock = spi_prettyprint_status_register_default_welwip, + .unlock = NULL, /* #WP pin write-protects lower 64kB. */ + .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */ + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M45PE20", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M45PE20, + .total_size = 256, + .page_size = 256, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = { + { + .eraseblocks = { {256, 1024} }, + .block_erase = spi_block_erase_db, + }, { + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = spi_block_erase_d8, + } + }, + .printlock = spi_prettyprint_status_register_default_welwip, + .unlock = NULL, /* #WP pin write-protects lower 64kB. */ + .write = spi_chip_write_256, /* Page write (similar to PP but allows 0->1 changes) */ + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Micron/Numonyx/ST", + .name = "M45PE40", + .bustype = BUS_SPI, + .manufacture_id = ST_ID, + .model_id = ST_M45PE40, + .total_size = 512, + .page_size = 256, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -7225,7 +7351,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M45PE80", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7252,7 +7378,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "M45PE16", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7279,7 +7405,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q016", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7316,7 +7442,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q032..1E", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7350,7 +7476,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q032..3E", .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7384,7 +7510,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7418,7 +7544,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7452,7 +7578,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7485,7 +7611,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7518,7 +7644,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q256..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7551,7 +7677,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q256..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7584,7 +7710,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q512..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7620,7 +7746,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q512..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7656,7 +7782,7 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "Numonyx", + .vendor = "Micron/Numonyx/ST", .name = "N25Q00A..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */ .bustype = BUS_SPI, .manufacture_id = ST_ID, @@ -7689,296 +7815,241 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "PMC", - .name = "Pm25LD256C", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD256C, - .total_size = 32, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "MoselVitelic", + .name = "V29C51000B", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29C51000B, + .total_size = 64, + .page_size = 512, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 8} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 8} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {32 * 1024, 1} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {32 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {512, 128} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {32 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ - .voltage = {2700, 3600}, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, }, + { - .vendor = "PMC", - .name = "Pm25LD512(C)", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD512, + .vendor = "MoselVitelic", + .name = "V29C51000T", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29C51000T, .total_size = 64, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + .page_size = 512, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 16} }, - .block_erase = spi_block_erase_20, - }, { - .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_60, + .eraseblocks = { {512, 128} }, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ - .voltage = {2300, 3600}, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
{ - .vendor = "PMC", - .name = "Pm25LD010(C)", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD010, - .total_size = 128, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "MoselVitelic", + .name = "V29C51400B", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29C51400B, + .total_size = 512, + .page_size = 1024, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {1024, 512} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ - .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */ + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
{ - .vendor = "PMC", - .name = "Pm25LD020(C)", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LD020, - .total_size = 256, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .vendor = "MoselVitelic", + .name = "V29C51400T", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29C51400T, + .total_size = 512, + .page_size = 1024, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = spi_block_erase_20, - }, { - .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_60, + .eraseblocks = { {1024, 512} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ - .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */ + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
{ - .vendor = "PMC", - .name = "Pm25LD040(C)", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV040, - .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "MoselVitelic", + .name = "V29LC51000", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29LC51000, + .total_size = 64, + .page_size = 512, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {64 * 1024, 8} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { {512, 128} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ - .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */ + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
-{ - .vendor = "PMC", - .name = "Pm25LV512(A)", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV512, - .total_size = 64, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + { + .vendor = "MoselVitelic", + .name = "V29LC51001", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29LC51001, + .total_size = 128, + .page_size = 512, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_res3, + .probe = probe_jedec, .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 = { {512, 256} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp1, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {2700, 3600}, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
{ - .vendor = "PMC", - .name = "Pm25LV010", - .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV010, - .total_size = 128, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "MoselVitelic", + .name = "V29LC51002", + .bustype = BUS_PARALLEL, + .manufacture_id = SYNCMOS_MVC_ID, + .model_id = MVC_V29LC51002, + .total_size = 256, + .page_size = 512, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_spi_res3, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {512, 512} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .printlock = spi_prettyprint_status_register_default_bp1, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {2700, 3600}, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {4500, 5500}, },
{ - .vendor = "PMC", - .name = "Pm25LV010A", + .vendor = "Nantronics", + .name = "N25S10", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV010, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S10, .total_size = 128, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {4 * 1024, 32} }, .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 2} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {128 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp1, - .unlock = spi_disable_blockprotect, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "PMC", - .name = "Pm25LV020", + .vendor = "Nantronics", + .name = "N25S20", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV020, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S20, .total_size = 256, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, @@ -7989,60 +8060,78 @@ const struct flashchip flashchips[] = { { { .eraseblocks = { {4 * 1024, 64} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {4 * 1024, 64} }, .block_erase = spi_block_erase_d7, }, { + .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_default_bp2, - .unlock = spi_disable_blockprotect, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "PMC", - .name = "Pm25LV040", + .vendor = "Nantronics", + .name = "N25S40", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV040, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S40, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {4 * 1024, 128} }, .block_erase = spi_block_erase_d7, }, { + .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_default_bp2, - .unlock = spi_disable_blockprotect, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "PMC", - .name = "Pm25LV080B", + .vendor = "Nantronics", + .name = "N25S80", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV080B, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S80, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, @@ -8053,11 +8142,11 @@ const struct flashchip flashchips[] = { { { .eraseblocks = { {4 * 1024, 256} }, - .block_erase = spi_block_erase_d7, - }, { - .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, }, { @@ -8068,19 +8157,19 @@ const struct flashchip flashchips[] = { .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "PMC", - .name = "Pm25LV016B", + .vendor = "Nantronics", + .name = "N25S16", .bustype = BUS_SPI, - .manufacture_id = PMC_ID, - .model_id = PMC_PM25LV016B, + .manufacture_id = NANTRONICS_ID_NOPREFIX, + .model_id = NANTRONICS_N25S16, .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, @@ -8091,1052 +8180,1055 @@ const struct flashchip flashchips[] = { { { .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} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, + .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ + .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */ .voltage = {2700, 3600}, },
{ .vendor = "PMC", - .name = "Pm29F002T", - .bustype = BUS_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_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_FIXME, + .name = "Pm25LD256C", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LD256C, + .total_size = 32, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { - {128 * 1024, 1}, - {96 * 1024, 1}, - {8 * 1024, 2}, - {16 * 1024, 1}, - }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {4 * 1024, 8} }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .eraseblocks = { {4 * 1024, 8} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 1} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {32 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {32 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ + .voltage = {2700, 3600}, }, - { .vendor = "PMC", - .name = "Pm29F002B", - .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM29F002B, - .total_size = 256, - .page_size = 8 * 1024, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_FIXME, + .name = "Pm25LD512(C)", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LD512, + .total_size = 64, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { - {16 * 1024, 1}, - {8 * 1024, 2}, - {96 * 1024, 1}, - {128 * 1024, 1}, - }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {4 * 1024, 16} }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - }, + .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_60, + }, { + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ + .voltage = {2300, 3600}, },
{ .vendor = "PMC", - .name = "Pm39LV010", - .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */ + .name = "Pm25LD010(C)", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LD010, .total_size = 128, - .page_size = 4096, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 32} }, - .block_erase = erase_sector_jedec, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {64 * 1024, 2} }, - .block_erase = erase_block_jedec, + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {2700, 3600}, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ + .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */ },
{ .vendor = "PMC", - .name = "Pm39LV020", - .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV020, + .name = "Pm25LD020(C)", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LD020, .total_size = 256, - .page_size = 4096, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ - .block_erasers = + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = { { .eraseblocks = { {4 * 1024, 64} }, - .block_erase = erase_sector_jedec, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {64 * 1024, 4} }, - .block_erase = erase_block_jedec, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {2700, 3600}, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ + .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */ },
{ .vendor = "PMC", - .name = "Pm39LV040", - .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV040, + .name = "Pm25LD040(C)", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV040, .total_size = 512, - .page_size = 4096, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, - .tested = TEST_OK_PR, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ - .block_erasers = + .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 = erase_sector_jedec, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_d7, }, { .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_block_jedec, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {2700, 3600}, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */ + .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */ },
- { +{ .vendor = "PMC", - .name = "Pm39LV512", - .bustype = BUS_PARALLEL, - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM39LV512, + .name = "Pm25LV512(A)", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV512, .total_size = 64, - .page_size = 4096, - .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_res3, + .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, - .block_erase = erase_sector_jedec, + .block_erase = spi_block_erase_d7, }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_block_jedec, + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .block_erase = spi_block_erase_c7, } }, - .write = write_jedec_1, - .read = read_memmapped, + .printlock = spi_prettyprint_status_register_default_bp1, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, },
{ .vendor = "PMC", - .name = "Pm49FL002", - .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM49FL002, - .total_size = 256, - .page_size = 16 * 1024, - .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ + .name = "Pm25LV010", + .bustype = BUS_SPI, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV010, + .total_size = 128, + .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_res3, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = erase_sector_jedec, + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_d7, }, { - .eraseblocks = { {16 * 1024, 16} }, - .block_erase = erase_block_jedec, + .eraseblocks = { {32 * 1024, 4} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = spi_block_erase_c7, } }, - .unlock = unlock_49fl00x, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {3000, 3600}, + .printlock = spi_prettyprint_status_register_default_bp1, + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {2700, 3600}, },
{ .vendor = "PMC", - .name = "Pm49FL004", - .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ - .manufacture_id = PMC_ID_NOPREFIX, - .model_id = PMC_PM49FL004, - .total_size = 512, - .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ - .block_erasers = - { - { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = erase_sector_jedec, - }, { - .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_block_jedec, - }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } - }, - .unlock = unlock_49fl00x, - .write = write_jedec_1, - .read = read_memmapped, - .voltage = {3000, 3600}, - }, - - { - .vendor = "Sanyo", - .name = "LE25FW203A", + .name = "Pm25LV010A", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW203A, - .total_size = 256, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV010, + .total_size = 128, .page_size = 256, - .tested = TEST_UNTESTED, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256, 1024} }, - .block_erase = spi_block_erase_db, - }, { - .eraseblocks = { {64 * 1024, 4} }, + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {32 * 1024, 4} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {256 * 1024, 1} }, + }, { + .eraseblocks = { {128 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_welwip, - .unlock = NULL, /* #WP pin write-protects lower 64kB. */ + .printlock = spi_prettyprint_status_register_default_bp1, + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "Sanyo", - .name = "LE25FW403A", + .vendor = "PMC", + .name = "Pm25LV020", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW403A, - .total_size = 512, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV020, + .total_size = 256, .page_size = 256, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { - .eraseblocks = { {256, 2 * 1024} }, - .block_erase = spi_block_erase_db, - }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {64 * 1024, 4} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {512 * 1024, 1} }, + }, { + .eraseblocks = { {256 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_welwip, - .unlock = NULL, /* #WP pin write-protects lower 64kB. */ + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Sanyo", - .name = "LE25FW418A", + .vendor = "PMC", + .name = "Pm25LV040", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW418A, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV040, .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { .eraseblocks = { {4 * 1024, 128} }, .block_erase = spi_block_erase_d7, - }, { + }, { .eraseblocks = { {64 * 1024, 8} }, .block_erase = spi_block_erase_d8, - }, { + }, { .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_c7, - } - }, + } + }, .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */ + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "Sanyo", - .name = "LE25FW806", + .vendor = "PMC", + .name = "Pm25LV080B", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW806, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV080B, .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { .eraseblocks = { {4 * 1024, 256} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {4 * 1024, 256} }, .block_erase = spi_block_erase_d7, - }, { + }, { + .eraseblocks = { {4 * 1024, 256} }, + .block_erase = spi_block_erase_20, + }, { .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_default_bp2, - .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "Sanyo", - .name = "LE25FW808", + .vendor = "PMC", + .name = "Pm25LV016B", .bustype = BUS_SPI, - .manufacture_id = SANYO_ID, - .model_id = SANYO_LE25FW808, - .total_size = 1024, + .manufacture_id = PMC_ID, + .model_id = PMC_PM25LV016B, + .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { - .eraseblocks = { {8 * 1024, 128} }, + .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_d7, - }, { - .eraseblocks = { {64 * 1024, 16} }, + }, { + .eraseblocks = { {4 * 1024, 512} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {64 * 1024, 32} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, .printlock = spi_prettyprint_status_register_default_bp2, - .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, - .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */ + .read = spi_chip_read, /* Fast read (0x0B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "Sharp", - .name = "LH28F008BJT-BTLZ1", + .vendor = "PMC", + .name = "Pm29F002T", .bustype = BUS_PARALLEL, - .manufacture_id = SHARP_ID, - .model_id = SHARP_LH28F008BJ__PB, - .total_size = 1024, - .page_size = 64 * 1024, - .tested = TEST_OK_PREW, - .probe = probe_82802ab, - .probe_timing = TIMING_ZERO, + .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_PREW, + .probe = probe_jedec, + .probe_timing = TIMING_FIXME, .block_erasers = { { .eraseblocks = { - {8 * 1024, 8}, - {64 * 1024, 15} - }, - .block_erase = erase_block_82802ab, + {128 * 1024, 1}, + {96 * 1024, 1}, + {8 * 1024, 2}, + {16 * 1024, 1}, + }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = erase_sector_49lfxxxc, - } + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + }, }, - .unlock = unlock_lh28f008bjt, - .write = write_82802ab, + .write = write_jedec_1, .read = read_memmapped, - .voltage = {2700, 3600}, + .voltage = {4500, 5500}, },
{ - .vendor = "Sharp", - .name = "LHF00L04", - .bustype = BUS_FWH, /* A/A Mux */ - .manufacture_id = SHARP_ID, - .model_id = SHARP_LHF00L04, - .total_size = 1024, - .page_size = 64 * 1024, - .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, + .vendor = "PMC", + .name = "Pm29F002B", + .bustype = BUS_PARALLEL, + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM29F002B, + .total_size = 256, + .page_size = 8 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_82802ab, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = TIMING_FIXME, .block_erasers = { { .eraseblocks = { - {64 * 1024, 15}, - {8 * 1024, 8} - }, - .block_erase = erase_block_82802ab, - }, { - .eraseblocks = { - {1024 * 1024, 1} + {16 * 1024, 1}, + {8 * 1024, 2}, + {96 * 1024, 1}, + {128 * 1024, 1}, }, - .block_erase = NULL, /* 30 D0, only in A/A mux mode */ + .block_erase = erase_sector_jedec, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, }, }, - .unlock = unlock_82802ab, - .write = write_82802ab, + .write = write_jedec_1, .read = read_memmapped, - .voltage = {3000, 3600}, + .voltage = {4500, 5500}, },
{ - .vendor = "Spansion", - .name = "S25FL004A", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL004A, - .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .vendor = "PMC", + .name = "Pm39LV010", + .bustype = BUS_PARALLEL, + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */ + .total_size = 128, + .page_size = 4096, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 8} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {64 * 1024, 2} }, + .block_erase = erase_block_jedec, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL008A", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL008A, - .total_size = 1024, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PRE, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = + .vendor = "PMC", + .name = "Pm39LV020", + .bustype = BUS_PARALLEL, + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM39LV020, + .total_size = 256, + .page_size = 4096, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .block_erasers = { { - .eraseblocks = { {64 * 1024, 16} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {64 * 1024, 4} }, + .block_erase = erase_block_jedec, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL016A", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL016A, - .total_size = 2048, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "PMC", + .name = "Pm39LV040", + .bustype = BUS_PARALLEL, + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM39LV040, + .total_size = 512, + .page_size = 4096, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PR, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ + .block_erasers = { { - .eraseblocks = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {64 * 1024, 8} }, + .block_erase = erase_block_jedec, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL032A/P", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL032A, - .total_size = 4096, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "PMC", + .name = "Pm39LV512", + .bustype = BUS_PARALLEL, + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM39LV512, + .total_size = 64, + .page_size = 4096, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 64} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {4 * 1024, 16} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = erase_block_jedec, + }, { + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, + .write = write_jedec_1, + .read = read_memmapped, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL064A/P", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL064A, - .total_size = 8192, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, + .vendor = "PMC", + .name = "Pm49FL002", + .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM49FL002, + .total_size = 256, + .page_size = 16 * 1024, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .block_erasers = { { - .eraseblocks = { {64 * 1024, 128} }, - .block_erase = spi_block_erase_d8, + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = erase_sector_jedec, }, { - .eraseblocks = { {8 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, + .eraseblocks = { {16 * 1024, 16} }, + .block_erase = erase_block_jedec, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .unlock = unlock_49fl00x, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {3000, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL204K", - .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL204, + .vendor = "PMC", + .name = "Pm49FL004", + .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */ + .manufacture_id = PMC_ID_NOPREFIX, + .model_id = PMC_PM49FL004, .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = { + .page_size = 64 * 1024, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ + .block_erasers = + { { .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {64 * 1024, 8} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 512 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .block_erase = erase_block_jedec, }, { - .eraseblocks = { { 512 * 1024, 1} }, - .block_erase = spi_block_erase_c7, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ - .voltage = {2700, 3600}, + .unlock = unlock_49fl00x, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {3000, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL208K", + .vendor = "Sanyo", + .name = "LE25FW203A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL208, - .total_size = 1024, + .manufacture_id = SANYO_ID, + .model_id = SANYO_LE25FW203A, + .total_size = 256, .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = { + .block_erasers = + { { - .eraseblocks = { {4 * 1024, 256} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 16} }, + .eraseblocks = { {256, 1024} }, + .block_erase = spi_block_erase_db, + }, { + .eraseblocks = { {64 * 1024, 4} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { { 1024 * 1024, 1} }, + }, { + .eraseblocks = { {256 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ + .printlock = spi_prettyprint_status_register_default_welwip, + .unlock = NULL, /* #WP pin write-protects lower 64kB. */ .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL116K/S25FL216K", + .vendor = "Sanyo", + .name = "LE25FW403A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL216, - .total_size = 2048, + .manufacture_id = SANYO_ID, + .model_id = SANYO_LE25FW403A, + .total_size = 512, .page_size = 256, - /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, .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} }, + .eraseblocks = { {256, 2 * 1024} }, + .block_erase = spi_block_erase_db, + }, { + .eraseblocks = { {64 * 1024, 8} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 2048 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { { 2048 * 1024, 1} }, + }, { + .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_default_bp3, - .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ + .printlock = spi_prettyprint_status_register_default_welwip, + .unlock = NULL, /* #WP pin write-protects lower 64kB. */ .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL128S......0", /* uniform 256kB sectors */ + .vendor = "Sanyo", + .name = "LE25FW418A", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL128, - .total_size = 16384, + .manufacture_id = SANYO_ID, + .model_id = SANYO_LE25FW418A, + .total_size = 512, .page_size = 256, - /* supports 4B addressing */ - /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_res2, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 4096} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {256 * 1024, 64} }, + .eraseblocks = { {4 * 1024, 128} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {64 * 1024, 8} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 16384 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { { 16384 * 1024, 1} }, + }, { + .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ - .write = spi_chip_write_256, /* Multi I/O supported */ - .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ + } + }, + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */ .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL256S......0", /* uniform 256kB sectors */ + .vendor = "Sanyo", + .name = "LE25FW806", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL256, - .total_size = 32768, + .manufacture_id = SANYO_ID, + .model_id = SANYO_LE25FW806, + .total_size = 1024, .page_size = 256, - /* supports 4B addressing */ - /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .tested = TEST_OK_PROBE | TEST_BAD_REW, - .probe = probe_spi_rdid, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_res2, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 8192} }, + .eraseblocks = { {4 * 1024, 256} }, .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {256 * 1024, 128} }, + }, { + .eraseblocks = { {4 * 1024, 256} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {64 * 1024, 16} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 32768 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { { 32768 * 1024, 1} }, + }, { + .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ - .write = spi_chip_write_256, /* Multi I/O supported */ - .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "Spansion", - .name = "S25FL512S", + .vendor = "Sanyo", + .name = "LE25FW808", .bustype = BUS_SPI, - .manufacture_id = SPANSION_ID, - .model_id = SPANSION_S25FL512, - .total_size = 65536, + .manufacture_id = SANYO_ID, + .model_id = SANYO_LE25FW808, + .total_size = 1024, .page_size = 256, - /* supports 4B addressing */ - /* supports SFDP */ - /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .tested = TEST_OK_PROBE | TEST_BAD_REW, - .probe = probe_spi_rdid, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_res2, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256 * 1024, 256} }, + .eraseblocks = { {8 * 1024, 128} }, + .block_erase = spi_block_erase_d7, + }, { + .eraseblocks = { {64 * 1024, 16} }, .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { { 65536 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { { 65536 * 1024, 1} }, + }, { + .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, } }, - .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ - .write = spi_chip_write_256, /* Multi I/O supported */ - .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ + .printlock = spi_prettyprint_status_register_default_bp2, + .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* some quad-read supported ("HD_READ mode") */ .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25LF040A", - .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040_REMS, - .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, + .vendor = "Sharp", + .name = "LH28F008BJT-BTLZ1", + .bustype = BUS_PARALLEL, + .manufacture_id = SHARP_ID, + .model_id = SHARP_LH28F008BJ__PB, + .total_size = 1024, + .page_size = 64 * 1024, .tested = TEST_OK_PREW, - .probe = probe_spi_res2, + .probe = probe_82802ab, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = spi_block_erase_20, + .eraseblocks = { + {8 * 1024, 8}, + {64 * 1024, 15} + }, + .block_erase = erase_block_82802ab, }, { - .eraseblocks = { {32 * 1024, 16} }, - .block_erase = spi_block_erase_52, + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = erase_sector_49lfxxxc, + } + }, + .unlock = unlock_lh28f008bjt, + .write = write_82802ab, + .read = read_memmapped, + .voltage = {2700, 3600}, + }, + + { + .vendor = "Sharp", + .name = "LHF00L04", + .bustype = BUS_FWH, /* A/A Mux */ + .manufacture_id = SHARP_ID, + .model_id = SHARP_LHF00L04, + .total_size = 1024, + .page_size = 64 * 1024, + .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, + .tested = TEST_UNTESTED, + .probe = probe_82802ab, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { + {64 * 1024, 15}, + {8 * 1024, 8} + }, + .block_erase = erase_block_82802ab, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = spi_block_erase_60, + .eraseblocks = { + {1024 * 1024, 1} + }, + .block_erase = NULL, /* 30 D0, only in A/A mux mode */ }, }, - .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ - .read = spi_chip_read, + .unlock = unlock_82802ab, + .write = write_82802ab, + .read = read_memmapped, .voltage = {3000, 3600}, },
{ - .vendor = "SST", - .name = "SST25LF080(A)", + .vendor = "Spansion", + .name = "S25FL004A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF080_REMS, - .total_size = 1024, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL004A, + .total_size = 512, .page_size = 256, - .feature_bits = FEATURE_WRSR_EITHER, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_UNTESTED, - .probe = probe_spi_res2, + .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, 8} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ + .write = spi_chip_write_256, .read = spi_chip_read, - .voltage = {3000, 3600}, + .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF010", + .vendor = "Spansion", + .name = "S25FL008A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF010_REMS, - .total_size = 128, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL008A, + .total_size = 1024, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, - .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PRE, + .probe = probe_spi_rdid, .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 = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } }, - .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, + .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF016B", + .vendor = "Spansion", + .name = "S25FL016A", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF016B, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL016A, .total_size = 2048, .page_size = 256, - .feature_bits = FEATURE_WRSR_EITHER, - .tested = TEST_OK_PREW, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_OK_PR, .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, - }, + } }, - .printlock = spi_prettyprint_status_register_sst25vf016, + .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ .unlock = spi_disable_blockprotect, - .write = spi_aai_write, + .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF032B", + .vendor = "Spansion", + .name = "S25FL032A/P", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF032B, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL032A, .total_size = 4096, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, + .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 = { {32 * 1024, 128} }, - .block_erase = spi_block_erase_52, - }, { .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, - }, + } }, - .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ .unlock = spi_disable_blockprotect, - .write = spi_aai_write, + .write = spi_chip_write_256, .read = spi_chip_read, .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF064C", + .vendor = "Spansion", + .name = "S25FL064A/P", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF064C, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL064A, .total_size = 8192, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, + .feature_bits = FEATURE_WRSR_WREN, .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 2048} }, - .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {32 * 1024, 256} }, - .block_erase = spi_block_erase_52, - }, { .eraseblocks = { {64 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, - }, + } }, - .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */ .unlock = spi_disable_blockprotect, .write = spi_chip_write_256, .read = spi_chip_read, @@ -9144,196 +9236,289 @@ const struct flashchip flashchips[] = { },
{ - .vendor = "SST", - .name = "SST25VF040", + .vendor = "Spansion", + .name = "S25FL204K", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040_REMS, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL204, .total_size = 512, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, - .tested = TEST_OK_PR, - .probe = probe_spi_rems, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = - { + .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} }, + .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_sst25, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ - .read = spi_chip_read, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF040B", + .vendor = "Spansion", + .name = "S25FL208K", .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040B, - .total_size = 512, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL208, + .total_size = 1024, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, - .tested = TEST_OK_PREW, + .feature_bits = FEATURE_WRSR_WREN, + .tested = TEST_UNTESTED, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = - { + .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, + .eraseblocks = { {4 * 1024, 256} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 16} }, - .block_erase = spi_block_erase_52, + .eraseblocks = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {64 * 1024, 8} }, + .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_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Spansion", + .name = "S25FL116K/S25FL216K", + .bustype = BUS_SPI, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL216, + .total_size = 2048, + .page_size = 256, + /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .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 = { {512 * 1024, 1} }, + .eraseblocks = { { 2048 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { { 2048 * 1024, 1} }, .block_erase = spi_block_erase_c7, - }, + } }, - .printlock = spi_prettyprint_status_register_sst25vf040b, - .unlock = spi_disable_blockprotect, - .write = spi_aai_write, - .read = spi_chip_read, + .printlock = spi_prettyprint_status_register_default_bp3, + .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */ + .write = spi_chip_write_256, + .read = spi_chip_read, /* Fast read (0x0B), dual I/O (0x3B) supported */ .voltage = {2700, 3600}, },
{ - .vendor = "SST", - .name = "SST25VF040B.REMS", + .vendor = "Spansion", + .name = "S25FL128S......0", /* uniform 256kB sectors */ .bustype = BUS_SPI, - .manufacture_id = SST_ID, - .model_id = SST_SST25VF040B_REMS, - .total_size = 512, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL128, + .total_size = 16384, .page_size = 256, - .feature_bits = FEATURE_WRSR_EWSR, - .tested = TEST_OK_PREW, - .probe = probe_spi_rems, + /* supports 4B addressing */ + /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, - .block_erasers = - { + .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, + .eraseblocks = { {4 * 1024, 4096} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 16} }, - .block_erase = spi_block_erase_52, + .eraseblocks = { {256 * 1024, 64} }, + .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { { 16384 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { { 16384 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ + .write = spi_chip_write_256, /* Multi I/O supported */ + .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Spansion", + .name = "S25FL256S......0", /* uniform 256kB sectors */ + .bustype = BUS_SPI, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL256, + .total_size = 32768, + .page_size = 256, + /* supports 4B addressing */ + /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .tested = TEST_OK_PROBE | TEST_BAD_REW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = { + { + .eraseblocks = { {4 * 1024, 8192} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {256 * 1024, 128} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { { 32768 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { { 32768 * 1024, 1} }, .block_erase = spi_block_erase_c7, - }, + } }, - .printlock = spi_prettyprint_status_register_sst25vf040b, - .unlock = spi_disable_blockprotect, - .write = spi_aai_write, - .read = spi_chip_read, + .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ + .write = spi_chip_write_256, /* Multi I/O supported */ + .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ + .voltage = {2700, 3600}, + }, + + { + .vendor = "Spansion", + .name = "S25FL512S", + .bustype = BUS_SPI, + .manufacture_id = SPANSION_ID, + .model_id = SPANSION_S25FL512, + .total_size = 65536, + .page_size = 256, + /* supports 4B addressing */ + /* supports SFDP */ + /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ + .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, + .tested = TEST_OK_PROBE | TEST_BAD_REW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, + .block_erasers = { + { + .eraseblocks = { {256 * 1024, 256} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { { 65536 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { { 65536 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + } + }, + .printlock = spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ + .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ + .write = spi_chip_write_256, /* Multi I/O supported */ + .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST25VF080B", + .name = "SST25LF040A", .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST25VF080B, - .total_size = 1024, + .model_id = SST_SST25VF040_REMS, + .total_size = 512, .page_size = 256, .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, + .probe = probe_spi_res2, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 256} }, + .eraseblocks = { {4 * 1024, 128} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 32} }, + .eraseblocks = { {32 * 1024, 16} }, .block_erase = spi_block_erase_52, }, { - .eraseblocks = { {64 * 1024, 16} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, + .eraseblocks = { {512 * 1024, 1} }, .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, }, }, .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ .unlock = spi_disable_blockprotect, - .write = spi_aai_write, + .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ .read = spi_chip_read, - .voltage = {2700, 3600}, + .voltage = {3000, 3600}, },
{ .vendor = "SST", - .name = "SST25WF512", + .name = "SST25LF080(A)", .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST25WF512, - .total_size = 64, + .model_id = SST_SST25VF080_REMS, + .total_size = 1024, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .probe = probe_spi_res2, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 16} }, + .eraseblocks = { {4 * 1024, 256} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 2} }, + .eraseblocks = { {32 * 1024, 32} }, .block_erase = spi_block_erase_52, }, { - .eraseblocks = { {1024 * 64, 1} }, + .eraseblocks = { {1024 * 1024, 1} }, .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {1024 * 64, 1} }, - .block_erase = spi_block_erase_c7, }, }, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ .unlock = spi_disable_blockprotect, - .write = spi_aai_write, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {1650, 1950}, + .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ + .read = spi_chip_read, + .voltage = {3000, 3600}, },
{ .vendor = "SST", - .name = "SST25WF010", + .name = "SST25VF010", .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST25WF010, + .model_id = SST_SST25VF010_REMS, .total_size = 128, .page_size = 256, - .feature_bits = FEATURE_WRSR_EITHER, - .tested = TEST_UNTESTED, - .probe = probe_spi_rdid, + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, + .probe = probe_spi_rems, .probe_timing = TIMING_ZERO, .block_erasers = { @@ -9344,331 +9529,549 @@ const struct flashchip flashchips[] = { .eraseblocks = { {32 * 1024, 4} }, .block_erase = spi_block_erase_52, }, { - .eraseblocks = { {1024 * 128, 1} }, + .eraseblocks = { {128 * 1024, 1} }, .block_erase = spi_block_erase_60, - }, { - .eraseblocks = { {1024 * 128, 1} }, - .block_erase = spi_block_erase_c7, }, }, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ .unlock = spi_disable_blockprotect, - .write = spi_aai_write, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {1650, 1950}, + .write = spi_chip_write_1, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST25WF020", + .name = "SST25VF016B", .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST25WF020, - .total_size = 256, + .model_id = SST_SST25VF016B, + .total_size = 2048, .page_size = 256, .feature_bits = FEATURE_WRSR_EITHER, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, + .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 8} }, + .eraseblocks = { {32 * 1024, 64} }, .block_erase = spi_block_erase_52, }, { - .eraseblocks = { {64 * 1024, 4} }, + .eraseblocks = { {64 * 1024, 32} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {1024 * 256, 1} }, + .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {1024 * 256, 1} }, + .eraseblocks = { {2 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, }, }, + .printlock = spi_prettyprint_status_register_sst25vf016, .unlock = spi_disable_blockprotect, .write = spi_aai_write, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {1650, 1950}, - }, + .read = spi_chip_read, + .voltage = {2700, 3600}, + },
{ .vendor = "SST", - .name = "SST25WF040", + .name = "SST25VF032B", .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST25WF040, - .total_size = 512, + .model_id = SST_SST25VF032B, + .total_size = 4096, .page_size = 256, - .feature_bits = FEATURE_WRSR_EITHER, - .tested = TEST_UNTESTED, + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, .probe = probe_spi_rdid, .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, + .eraseblocks = { {4 * 1024, 1024} }, .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {32 * 1024, 16} }, + .eraseblocks = { {32 * 1024, 128} }, .block_erase = spi_block_erase_52, }, { - .eraseblocks = { {64 * 1024, 8} }, + .eraseblocks = { {64 * 1024, 64} }, .block_erase = spi_block_erase_d8, }, { - .eraseblocks = { {1024 * 512, 1} }, + .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, }, { - .eraseblocks = { {1024 * 512, 1} }, + .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_c7, }, }, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ .unlock = spi_disable_blockprotect, .write = spi_aai_write, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {1650, 1950}, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST28SF040A", - .bustype = BUS_PARALLEL, + .name = "SST25VF064C", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST28SF040, - .total_size = 512, + .model_id = SST_SST25VF064C, + .total_size = 8192, .page_size = 256, - .feature_bits = 0, - .tested = TEST_UNTESTED, - .probe = probe_82802ab, - .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */ + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {128, 4096} }, - .block_erase = erase_sector_28sf040, + .eraseblocks = { {4 * 1024, 2048} }, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_28sf040, - } + .eraseblocks = { {32 * 1024, 256} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 128} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {8 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {8 * 1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + }, }, - .unlock = unprotect_28sf040, - .write = write_28sf040, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_256, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST29EE010", - .bustype = BUS_PARALLEL, + .name = "SST25VF040", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST29EE010, - .total_size = 128, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, + .model_id = SST_SST25VF040_REMS, + .total_size = 512, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EWSR, .tested = TEST_OK_PR, - .probe = probe_jedec, - .probe_timing = 10, + .probe = probe_spi_rems, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } + .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, + }, }, - .write = write_jedec, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */ + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST29LE010", - .bustype = BUS_PARALLEL, + .name = "SST25VF040B", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST29LE010, - .total_size = 128, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_UNTESTED, - .probe = probe_jedec, - .probe_timing = 10, + .model_id = SST_SST25VF040B, + .total_size = 512, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } + .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, + }, }, - .write = write_jedec, - .read = read_memmapped, - .voltage = {3000, 3600}, + .printlock = spi_prettyprint_status_register_sst25vf040b, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST29EE020A", - .bustype = BUS_PARALLEL, + .name = "SST25VF040B.REMS", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST29EE020A, - .total_size = 256, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_OK_PRE, - .probe = probe_jedec, - .probe_timing = 10, + .model_id = SST_SST25VF040B_REMS, + .total_size = 512, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, + .probe = probe_spi_rems, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } + .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, + }, }, - .write = write_jedec, - .read = read_memmapped, - .voltage = {4500, 5500}, + .printlock = spi_prettyprint_status_register_sst25vf040b, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST29LE020", - .bustype = BUS_PARALLEL, + .name = "SST25VF080B", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST29LE020, - .total_size = 256, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_OK_PRE, - .probe = probe_jedec, - .probe_timing = 10, + .model_id = SST_SST25VF080B, + .total_size = 1024, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EWSR, + .tested = TEST_OK_PREW, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } + .eraseblocks = { {4 * 1024, 256} }, + .block_erase = spi_block_erase_20, + }, { + .eraseblocks = { {32 * 1024, 32} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 16} }, + .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = spi_block_erase_c7, + }, }, - .write = write_jedec, - .read = read_memmapped, - .voltage = {3000, 3600}, + .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */ + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, + .voltage = {2700, 3600}, },
{ .vendor = "SST", - .name = "SST39SF512", - .bustype = BUS_PARALLEL, + .name = "SST25WF512", + .bustype = BUS_SPI, .manufacture_id = SST_ID, - .model_id = SST_SST39SF512, + .model_id = SST_SST25WF512, .total_size = 64, - .page_size = 4096, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, - .probe = probe_jedec, - .probe_timing = 1, /* 150 ns */ + .page_size = 256, + .feature_bits = FEATURE_WRSR_EITHER, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .probe_timing = TIMING_ZERO, .block_erasers = { { .eraseblocks = { {4 * 1024, 16} }, - .block_erase = erase_sector_jedec, + .block_erase = spi_block_erase_20, }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .eraseblocks = { {32 * 1024, 2} }, + .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {1024 * 64, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 64, 1} }, + .block_erase = spi_block_erase_c7, + }, + }, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {1650, 1950}, + }, + + { + .vendor = "SST", + .name = "SST25WF010", + .bustype = BUS_SPI, + .manufacture_id = SST_ID, + .model_id = SST_SST25WF010, + .total_size = 128, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EITHER, + .tested = TEST_UNTESTED, + .probe = probe_spi_rdid, + .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 = { {1024 * 128, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 128, 1} }, + .block_erase = spi_block_erase_c7, + }, + }, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {1650, 1950}, + }, + + { + .vendor = "SST", + .name = "SST25WF020", + .bustype = BUS_SPI, + .manufacture_id = SST_ID, + .model_id = SST_SST25WF020, + .total_size = 256, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EITHER, + .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 = { {1024 * 256, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 256, 1} }, + .block_erase = spi_block_erase_c7, + }, + }, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {1650, 1950}, + }, + + { + .vendor = "SST", + .name = "SST25WF040", + .bustype = BUS_SPI, + .manufacture_id = SST_ID, + .model_id = SST_SST25WF040, + .total_size = 512, + .page_size = 256, + .feature_bits = FEATURE_WRSR_EITHER, + .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 = { {1024 * 512, 1} }, + .block_erase = spi_block_erase_60, + }, { + .eraseblocks = { {1024 * 512, 1} }, + .block_erase = spi_block_erase_c7, + }, + }, + .unlock = spi_disable_blockprotect, + .write = spi_aai_write, + .read = spi_chip_read, /* Fast read (0x0B) supported */ + .voltage = {1650, 1950}, + }, + + { + .vendor = "SST", + .name = "SST28SF040A", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST28SF040, + .total_size = 512, + .page_size = 256, + .feature_bits = 0, + .tested = TEST_UNTESTED, + .probe = probe_82802ab, + .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */ + .block_erasers = + { + { + .eraseblocks = { {128, 4096} }, + .block_erase = erase_sector_28sf040, + }, { + .eraseblocks = { {512 * 1024, 1} }, + .block_erase = erase_chip_28sf040, } }, - .write = write_jedec_1, + .unlock = unprotect_28sf040, + .write = write_28sf040, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39SF010A", + .name = "SST29EE010", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39SF010, + .model_id = SST_SST29EE010, .total_size = 128, - .page_size = 4096, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_OK_PR, .probe = probe_jedec, - .probe_timing = 1, /* 150 ns */ + .probe_timing = 10, .block_erasers = { { - .eraseblocks = { {4 * 1024, 32} }, - .block_erase = erase_sector_jedec, - }, { .eraseblocks = { {128 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec_1, + .write = write_jedec, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39SF020A", + .name = "SST29LE010", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39SF020, + .model_id = SST_SST29LE010, + .total_size = 128, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, + .probe_timing = 10, + .block_erasers = + { + { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .write = write_jedec, + .read = read_memmapped, + .voltage = {3000, 3600}, + }, + + { + .vendor = "SST", + .name = "SST29EE020A", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST29EE020A, .total_size = 256, - .page_size = 4096, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_OK_PRE, .probe = probe_jedec, - .probe_timing = 1, /* 150 ns */ + .probe_timing = 10, .block_erasers = { { - .eraseblocks = { {4 * 1024, 64} }, - .block_erase = erase_sector_jedec, - }, { .eraseblocks = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec_1, + .write = write_jedec, .read = read_memmapped, .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39SF040", + .name = "SST29LE020", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39SF040, - .total_size = 512, - .page_size = 4096, - .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_OK_PREW, + .model_id = SST_SST29LE020, + .total_size = 256, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_OK_PRE, .probe = probe_jedec, - .probe_timing = 1, /* 150 ns */ + .probe_timing = 10, .block_erasers = { { - .eraseblocks = { {4 * 1024, 128} }, - .block_erase = erase_sector_jedec, - }, { - .eraseblocks = { {512 * 1024, 1} }, + .eraseblocks = { {256 * 1024, 1} }, .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec_1, + .write = write_jedec, .read = read_memmapped, - .voltage = {4500, 5500}, + .voltage = {3000, 3600}, },
{ .vendor = "SST", - .name = "SST39VF512", + .name = "SST39SF512", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39VF512, + .model_id = SST_SST39SF512, .total_size = 64, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, @@ -9687,15 +10090,15 @@ const struct flashchip flashchips[] = { }, .write = write_jedec_1, .read = read_memmapped, - .voltage = {2700, 3600}, + .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39VF010", + .name = "SST39SF010A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39VF010, + .model_id = SST_SST39SF010, .total_size = 128, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, @@ -9714,19 +10117,19 @@ const struct flashchip flashchips[] = { }, .write = write_jedec_1, .read = read_memmapped, - .voltage = {2700, 3600}, + .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39VF020", + .name = "SST39SF020A", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39VF020, + .model_id = SST_SST39SF020, .total_size = 256, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, - .tested = TEST_UNTESTED, + .tested = TEST_OK_PREW, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .block_erasers = @@ -9741,15 +10144,123 @@ const struct flashchip flashchips[] = { }, .write = write_jedec_1, .read = read_memmapped, - .voltage = {2700, 3600}, + .voltage = {4500, 5500}, },
{ .vendor = "SST", - .name = "SST39VF040", + .name = "SST39SF040", .bustype = BUS_PARALLEL, .manufacture_id = SST_ID, - .model_id = SST_SST39VF040, + .model_id = SST_SST39SF040, + .total_size = 512, + .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = 1, /* 150 ns */ + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 128} }, + .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 = "SST", + .name = "SST39VF512", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST39VF512, + .total_size = 64, + .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = 1, /* 150 ns */ + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 16} }, + .block_erase = erase_sector_jedec, + }, { + .eraseblocks = { {64 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {2700, 3600}, + }, + + { + .vendor = "SST", + .name = "SST39VF010", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST39VF010, + .total_size = 128, + .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_OK_PREW, + .probe = probe_jedec, + .probe_timing = 1, /* 150 ns */ + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 32} }, + .block_erase = erase_sector_jedec, + }, { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {2700, 3600}, + }, + + { + .vendor = "SST", + .name = "SST39VF020", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST39VF020, + .total_size = 256, + .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, + .probe_timing = 1, /* 150 ns */ + .block_erasers = + { + { + .eraseblocks = { {4 * 1024, 64} }, + .block_erase = erase_sector_jedec, + }, { + .eraseblocks = { {256 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .write = write_jedec_1, + .read = read_memmapped, + .voltage = {2700, 3600}, + }, + + { + .vendor = "SST", + .name = "SST39VF040", + .bustype = BUS_PARALLEL, + .manufacture_id = SST_ID, + .model_id = SST_SST39VF040, .total_size = 512, .page_size = 4096, .feature_bits = FEATURE_EITHER_RESET, @@ -10217,517 +10728,6 @@ const struct flashchip flashchips[] = {
{ .vendor = "ST", - .name = "M25P05-A", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P05A, - .total_size = 64, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {32 * 1024, 2} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - /* The ST M25P05 is a bit of a problem. It has the same ID as the - * ST M25P05-A in RES mode, but supports only 128 byte writes instead - * of 256 byte writes. We rely heavily on the fact that probe_spi_res1 - * only is successful if RDID does not work. - */ - { - .vendor = "ST", - .name = "M25P05", - .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P05_RES, - .total_size = 64, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_res1, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {32 * 1024, 2} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {64 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, /* 128 */ - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P10-A", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P10A, - .total_size = 128, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PRE, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - /* The ST M25P10 has the same problem as the M25P05. */ - { - .vendor = "ST", - .name = "M25P10", - .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P10_RES, - .total_size = 128, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_res1, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {32 * 1024, 4} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_1, /* 128 */ - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", /* Numonyx */ - .name = "M25P20", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P20, - .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 = { {64 * 1024, 4} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp1, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P20-old", - .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P20_RES, - .total_size = 256, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, - .probe = probe_spi_res1, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {64 * 1024, 4} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {256 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp1, - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, /* Fast read (0x0B) supported */ - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", /* Numonyx */ - .name = "M25P40", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P40, - .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, - .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, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P40-old", - .bustype = BUS_SPI, - .manufacture_id = 0, /* Not used. */ - .model_id = ST_M25P40_RES, - .total_size = 512, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_UNTESTED, - .probe = probe_spi_res1, - .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, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - }, - - { - .vendor = "ST", - .name = "M25P80", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P80, - .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 = { {64 * 1024, 16} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P16", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P16, - .total_size = 2048, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PR, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P32", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P32, - .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 = { {64 * 1024, 64} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {4 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P64", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P64, - .total_size = 8192, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .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, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25P128", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25P128, - .total_size = 16384, - .page_size = 256, - .feature_bits = FEATURE_WRSR_WREN, - .tested = TEST_OK_PREW, - .probe = probe_spi_rdid, - .probe_timing = TIMING_ZERO, - .block_erasers = - { - { - .eraseblocks = { {256 * 1024, 64} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {16 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp3, /* TODO: check */ - .unlock = spi_disable_blockprotect, - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25PX80", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX80, - .total_size = 1024, - .page_size = 256, - /* OTP: 64B total; read 0x4B, write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .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 = { {64 * 1024, 16} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25PX16", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX16, - .total_size = 2048, - .page_size = 256, - /* OTP: 64B total; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .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 = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_d8, - }, { - .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = spi_block_erase_c7, - } - }, - .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ - .write = spi_chip_write_256, - .read = spi_chip_read, - }, - - { - .vendor = "ST", - .name = "M25PX32", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX32, - .total_size = 4096, - .page_size = 256, - /* OTP: 64B total; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .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, - } - }, - .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ - .write = spi_chip_write_256, - .read = spi_chip_read, - .voltage = {2700, 3600}, - }, - - { - .vendor = "ST", - .name = "M25PX64", - .bustype = BUS_SPI, - .manufacture_id = ST_ID, - .model_id = ST_M25PX64, - .total_size = 8192, - .page_size = 256, - /* OTP: 64B total; read 0x4B; write 0x42 */ - .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP, - .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, - } - }, - .printlock = spi_prettyprint_status_register_default_bp2, /* bit5: T/B */ - .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */ - .write = spi_chip_write_256, - .read = spi_chip_read, - }, - - { - .vendor = "ST", .name = "M29F002B", .bustype = BUS_PARALLEL, .manufacture_id = ST_ID,