summaryrefslogtreecommitdiffstats
path: root/flashchips.c
diff options
context:
space:
mode:
Diffstat (limited to 'flashchips.c')
-rw-r--r--flashchips.c8293
1 files changed, 4148 insertions, 4145 deletions
diff --git a/flashchips.c b/flashchips.c
index 0906b1f74..4dd9d774e 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -25,8 +25,11 @@
/**
* List of supported flash chips.
*
- * Please keep the list sorted by vendor name and chip family, so that the output of 'flashrom -L' is roughly
- * alphabetically sorted. Within families keep them in order of density.
+ * Temporarily, this file is sorted alphabetically by vendor and name to
+ * assist with merging the Chromium fork of flashrom.
+ *
+ * The usual intention is that that this list is sorted by vendor, then chip
+ * family and chip density, which is useful for the output of 'flashrom -L'.
*/
const struct flashchip flashchips[] = {
@@ -55,120 +58,120 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMD",
- .name = "Am29F010",
+ .name = "Am29F002(N)BB",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
- .model_id = AMD_AM29F010,
- .total_size = 128,
- .page_size = 16 * 1024,
- .feature_bits = FEATURE_SHORT_RESET,
+ .model_id = AMD_AM29F002BB,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {16 * 1024, 8} },
+ .eraseblocks = {
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {32 * 1024, 1},
+ {64 * 1024, 3},
+ },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {4500, 5500},
+ .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
},
{
.vendor = "AMD",
- .name = "Am29F010A/B",
+ .name = "Am29F002(N)BT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
- .model_id = AMD_AM29F010,
- .total_size = 128,
- .page_size = 16 * 1024,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .model_id = AMD_AM29F002BT,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {16 * 1024, 8} },
+ .eraseblocks = {
+ {64 * 1024, 3},
+ {32 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
+ },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {4500, 5500},
+ .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
},
{
.vendor = "AMD",
- .name = "Am29F002(N)BB",
+ .name = "Am29F010",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
- .model_id = AMD_AM29F002BB,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
+ .model_id = AMD_AM29F010,
+ .total_size = 128,
+ .page_size = 16 * 1024,
+ .feature_bits = FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {32 * 1024, 1},
- {64 * 1024, 3},
- },
+ .eraseblocks = { {16 * 1024, 8} },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
+ .voltage = {4500, 5500},
},
{
.vendor = "AMD",
- .name = "Am29F002(N)BT",
+ .name = "Am29F010A/B",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID,
- .model_id = AMD_AM29F002BT,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
+ .model_id = AMD_AM29F010,
+ .total_size = 128,
+ .page_size = 16 * 1024,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 3},
- {32 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
+ .eraseblocks = { {16 * 1024, 8} },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
+ .voltage = {4500, 5500},
},
{
@@ -616,32 +619,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L05PT",
+ .name = "A25L010",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L05PT,
- .total_size = 64,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L010,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid4,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
+ .eraseblocks = { { 4 * 1024, 32 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 2 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { { 128 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -650,32 +651,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L05PU",
+ .name = "A25L016",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L05PU,
- .total_size = 64,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L016,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid4,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- },
+ .eraseblocks = { { 4 * 1024, 512 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 32 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { { 2048 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -684,33 +683,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L10PT",
+ .name = "A25L020",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L10PT,
- .total_size = 128,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L020,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid4,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 1},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
+ .eraseblocks = { { 4 * 1024, 64 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 4 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { { 256 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -719,33 +715,69 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L10PU",
+ .name = "A25L032",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L10PU,
- .total_size = 128,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L032,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 64B total; read 0x4B, 0x48; 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, 1024 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 64 } },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { { 64 * 1024, 64 } },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1 } },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1 } },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_amic_a25l032, /* bit5: T/B, bit6: prot size */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "AMIC",
+ .name = "A25L040",
+ .bustype = BUS_SPI,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L040,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid4,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 1},
- },
+ .eraseblocks = { { 4 * 1024, 128 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 8 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { { 512 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -754,11 +786,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L20PT",
+ .name = "A25L05PT",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L20PT,
- .total_size = 256,
+ .model_id = AMIC_A25L05PT,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -768,7 +800,6 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 3},
{32 * 1024, 1},
{16 * 1024, 1},
{8 * 1024, 1},
@@ -776,7 +807,7 @@ const struct flashchip flashchips[] = {
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -789,11 +820,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L20PU",
+ .name = "A25L05PU",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L20PU,
- .total_size = 256,
+ .model_id = AMIC_A25L05PU,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -807,11 +838,10 @@ const struct flashchip flashchips[] = {
{8 * 1024, 1},
{16 * 1024, 1},
{32 * 1024, 1},
- {64 * 1024, 3},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -822,36 +852,28 @@ const struct flashchip flashchips[] = {
.voltage = {2700, 3600},
},
- /* The A25L40P{T,U} chips are distinguished by their
- * erase block layouts, but without any distinction in RDID.
- * This inexplicable quirk was verified by Rudolf Marek
- * and discussed on the flashrom mailing list on 2010-07-12.
- */
{
.vendor = "AMIC",
- .name = "A25L40PT",
+ .name = "A25L080",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L40PT,
- .total_size = 512,
+ .manufacture_id = AMIC_ID_NOPREFIX,
+ .model_id = AMIC_A25L080,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rdid4,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 7},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
+ .eraseblocks = { { 4 * 1024, 256 } },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 64 * 1024, 16 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { { 1024 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
@@ -864,33 +886,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L40PU",
+ .name = "A25L10PT",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L40PU,
- .total_size = 512,
+ .model_id = AMIC_A25L10PT,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
+ {64 * 1024, 1},
{32 * 1024, 1},
- {64 * 1024, 7},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -899,14 +921,14 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L80P",
+ .name = "A25L10PU",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID,
- .model_id = AMIC_A25L80P,
- .total_size = 1024,
+ .model_id = AMIC_A25L10PU,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PRE,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -917,15 +939,15 @@ const struct flashchip flashchips[] = {
{8 * 1024, 1},
{16 * 1024, 1},
{32 * 1024, 1},
- {64 * 1024, 15},
+ {64 * 1024, 1},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -1010,30 +1032,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L512",
+ .name = "A25L20PT",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L512,
- .total_size = 64,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L20PT,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 16 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 1 } },
+ .eraseblocks = {
+ {64 * 1024, 3},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 64 * 1024, 1 } },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
@@ -1042,58 +1067,69 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L010",
+ .name = "A25L20PU",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L010,
- .total_size = 128,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L20PU,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 32 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 2 } },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 3},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 128 * 1024, 1 } },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
},
+ /* The A25L40P{T,U} chips are distinguished by their
+ * erase block layouts, but without any distinction in RDID.
+ * This inexplicable quirk was verified by Rudolf Marek
+ * and discussed on the flashrom mailing list on 2010-07-12.
+ */
{
.vendor = "AMIC",
- .name = "A25L020",
+ .name = "A25L40PT",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L020,
- .total_size = 256,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L40PT,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .tested = TEST_OK_PR,
+ .probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 64 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 4 } },
+ .eraseblocks = {
+ {64 * 1024, 7},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 256 * 1024, 1 } },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -1106,26 +1142,29 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L040",
+ .name = "A25L40PU",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L040,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L40PU,
.total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 128 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 8 } },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 7},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 512 * 1024, 1 } },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -1138,11 +1177,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L080",
+ .name = "A25L512",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L080,
- .total_size = 1024,
+ .model_id = AMIC_A25L512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -1151,13 +1190,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 256 } },
+ .eraseblocks = { { 4 * 1024, 16 } },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { { 64 * 1024, 16 } },
+ .eraseblocks = { { 64 * 1024, 1 } },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 1024 * 1024, 1 } },
+ .eraseblocks = { { 64 * 1024, 1 } },
.block_erase = spi_block_erase_c7,
}
},
@@ -1170,26 +1209,29 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L016",
+ .name = "A25L80P",
.bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L016,
- .total_size = 2048,
+ .manufacture_id = AMIC_ID,
+ .model_id = AMIC_A25L80P,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .tested = TEST_OK_PRE,
+ .probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 512 } },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 64 * 1024, 32 } },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 15},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 2048 * 1024, 1 } },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -1202,15 +1244,16 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25L032",
+ .name = "A25LQ032/A25LQ32A",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25L032,
+ .model_id = AMIC_A25LQ032,
.total_size = 4096,
.page_size = 256,
+ /* A25LQ32A supports SFDP */
/* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -1281,46 +1324,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "AMIC",
- .name = "A25LQ032/A25LQ32A",
- .bustype = BUS_SPI,
- .manufacture_id = AMIC_ID_NOPREFIX,
- .model_id = AMIC_A25LQ032,
- .total_size = 4096,
- .page_size = 256,
- /* A25LQ32A supports SFDP */
- /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .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_52,
- }, {
- .eraseblocks = { { 64 * 1024, 64 } },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 4096 * 1024, 1 } },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 4096 * 1024, 1 } },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_amic_a25l032, /* bit5: T/B, bit6: prot size */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "AMIC",
.name = "A25LQ64",
.bustype = BUS_SPI,
.manufacture_id = AMIC_ID_NOPREFIX,
@@ -1944,11 +1947,13 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT25F512",
+ /* The A suffix indicates 33MHz instead of 20MHz clock rate.
+ * All other properties seem to be the same.*/
+ .name = "AT25F1024(A)",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F512,
- .total_size = 64,
+ .model_id = ATMEL_AT25F1024,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -1957,10 +1962,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
@@ -1973,29 +1978,28 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT25F512A",
+ .name = "AT25F2048",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F512A,
- .total_size = 64,
- .page_size = 128,
+ .model_id = ATMEL_AT25F2048,
+ .total_size = 256,
+ .page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_at25f,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
- .printlock = spi_prettyprint_status_register_at25f512a,
- /* FIXME: It is not correct to use this one, because the BP1 bit is N/A. */
- .unlock = spi_disable_blockprotect_at25f512a,
+ .printlock = spi_prettyprint_status_register_at25f,
+ .unlock = spi_disable_blockprotect_at25f,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2003,41 +2007,29 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT25F512B",
+ .name = "AT25F4096",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F512B,
- .total_size = 64,
+ .model_id = ATMEL_AT25F4096,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_at25f,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
- .printlock = spi_prettyprint_status_register_at25f512b,
- .unlock = spi_disable_blockprotect_at25f512b,
+ .printlock = spi_prettyprint_status_register_at25f4096,
+ /* "Bits 5-6 are 0s when device is not in an internal write cycle." Better leave them alone: */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2045,13 +2037,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- /* The A suffix indicates 33MHz instead of 20MHz clock rate.
- * All other properties seem to be the same.*/
- .name = "AT25F1024(A)",
+ .name = "AT25F512",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F1024,
- .total_size = 128,
+ .model_id = ATMEL_AT25F512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -2060,10 +2050,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
@@ -2076,28 +2066,29 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT25F2048",
+ .name = "AT25F512A",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F2048,
- .total_size = 256,
- .page_size = 256,
+ .model_id = ATMEL_AT25F512A,
+ .total_size = 64,
+ .page_size = 128,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_at25f,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
- .printlock = spi_prettyprint_status_register_at25f,
- .unlock = spi_disable_blockprotect_at25f,
+ .printlock = spi_prettyprint_status_register_at25f512a,
+ /* FIXME: It is not correct to use this one, because the BP1 bit is N/A. */
+ .unlock = spi_disable_blockprotect_at25f512a,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2105,29 +2096,41 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT25F4096",
+ .name = "AT25F512B",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT25F4096,
- .total_size = 512,
+ .model_id = ATMEL_AT25F512B,
+ .total_size = 64,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_at25f,
+ /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .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,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_62,
}
},
- .printlock = spi_prettyprint_status_register_at25f4096,
- /* "Bits 5-6 are 0s when device is not in an internal write cycle." Better leave them alone: */
- .unlock = spi_disable_blockprotect_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_at25f512b,
+ .unlock = spi_disable_blockprotect_at25f512b,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2550,30 +2553,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT29C512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT29C512,
- .total_size = 64,
- .page_size = 128,
- .feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 10000, /* 10mS, Enter=Exec */
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .write = write_jedec,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Atmel",
.name = "AT29C010A",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -2646,6 +2625,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
+ .name = "AT29C512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT29C512,
+ .total_size = 64,
+ .page_size = 128,
+ .feature_bits = FEATURE_LONG_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 10000, /* 10mS, Enter=Exec */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .write = write_jedec,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Atmel",
.name = "AT45CS1282",
.bustype = BUS_SPI,
.manufacture_id = ATMEL_ID,
@@ -3057,6 +3060,31 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
+ .name = "AT49(H)F010",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ATMEL_ID,
+ .model_id = ATMEL_AT49F010,
+ .total_size = 128,
+ .page_size = 0, /* unused */
+ .feature_bits = FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_at49f,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
+ .vendor = "Atmel",
.name = "AT49BV512",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -3145,31 +3173,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT49(H)F010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT49F010,
- .total_size = 128,
- .page_size = 0, /* unused */
- .feature_bits = FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_at49f,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Atmel",
.name = "AT49F020",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
@@ -3331,10 +3334,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT49LH00B4",
+ .name = "AT49LH004",
.bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT49LH00B4,
+ .model_id = ATMEL_AT49LH004,
.total_size = 512,
.page_size = 0, /* unused */
.feature_bits = FEATURE_REGISTERMAP,
@@ -3345,17 +3348,17 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
+ {64 * 1024, 7},
+ {32 * 1024, 1},
{8 * 1024, 2},
{16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 7},
},
- .block_erase = NULL, /* TODO: Implement. */
+ .block_erase = erase_block_82802ab,
}, {
.eraseblocks = {
{64 * 1024, 8},
},
- .block_erase = erase_block_82802ab,
+ .block_erase = NULL, /* TODO: Implement. */
},
},
.printlock = printlock_regspace2_block_eraser_0,
@@ -3367,10 +3370,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
- .name = "AT49LH004",
+ .name = "AT49LH00B4",
.bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
.manufacture_id = ATMEL_ID,
- .model_id = ATMEL_AT49LH004,
+ .model_id = ATMEL_AT49LH00B4,
.total_size = 512,
.page_size = 0, /* unused */
.feature_bits = FEATURE_REGISTERMAP,
@@ -3381,17 +3384,17 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 7},
- {32 * 1024, 1},
{8 * 1024, 2},
{16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 7},
},
- .block_erase = erase_block_82802ab,
+ .block_erase = NULL, /* TODO: Implement. */
}, {
.eraseblocks = {
{64 * 1024, 8},
},
- .block_erase = NULL, /* TODO: Implement. */
+ .block_erase = erase_block_82802ab,
},
},
.printlock = printlock_regspace2_block_eraser_0,
@@ -3402,30 +3405,6 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Catalyst",
- .name = "CAT28F512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = CATALYST_ID,
- .model_id = CATALYST_CAT28F512,
- .total_size = 64,
- .page_size = 0, /* unused */
- .feature_bits = 0,
- .tested = {.probe = OK, .read = OK, .erase = BAD, .write = BAD },
- .probe = probe_jedec, /* FIXME! */
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = NULL, /* TODO */
- },
- },
- .write = NULL, /* TODO */
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
.vendor = "Bright",
.name = "BM29F040",
.bustype = BUS_PARALLEL,
@@ -3453,6 +3432,30 @@ const struct flashchip flashchips[] = {
},
{
+ .vendor = "Catalyst",
+ .name = "CAT28F512",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = CATALYST_ID,
+ .model_id = CATALYST_CAT28F512,
+ .total_size = 64,
+ .page_size = 0, /* unused */
+ .feature_bits = 0,
+ .tested = {.probe = OK, .read = OK, .erase = BAD, .write = BAD },
+ .probe = probe_jedec, /* FIXME! */
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = NULL, /* TODO */
+ },
+ },
+ .write = NULL, /* TODO */
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
+ },
+
+ {
.vendor = "ENE",
.name = "KB9012 (EDI)",
.bustype = BUS_SPI,
@@ -3477,35 +3480,96 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "ESMT",
- .name = "F49B002UA",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ESMT_ID,
- .model_id = ESMT_F49B002UA,
- .total_size = 256,
- .page_size = 4096,
- .feature_bits = FEATURE_EITHER_RESET,
+ .vendor = "ESI",
+ .name = "ES25P16",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P16,
+ .total_size = 2 * 1024,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {128 * 1024, 1},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
- .block_erase = erase_sector_jedec,
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
}
},
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ESI",
+ .name = "ES25P40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P40,
+ .total_size = 512,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ESI",
+ .name = "ES25P80",
+ .bustype = BUS_SPI,
+ .manufacture_id = EXCEL_ID_NOPREFIX,
+ .model_id = EXCEL_ES25P80,
+ .total_size = 1024,
+ .page_size = 256,
+ /* 256-byte parameter page separate from memory array:
+ * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .voltage = {2700, 3600},
},
{
@@ -3579,42 +3643,40 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Eon",
- .name = "EN25B05",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B05,
- .total_size = 64,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .vendor = "ESMT",
+ .name = "F49B002UA",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ESMT_ID,
+ .model_id = ESMT_F49B002UA,
+ .total_size = 256,
+ .page_size = 4096,
+ .feature_bits = FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
+ {128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
{16 * 1024, 1},
- {32 * 1024, 1},
},
- .block_erase = spi_block_erase_d8,
+ .block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .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, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
.vendor = "Eon",
- .name = "EN25B05T",
+ .name = "EN25B05",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = EON_EN25B05,
@@ -3628,10 +3690,10 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
{4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
},
.block_erase = spi_block_erase_d8,
}, {
@@ -3648,7 +3710,7 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P05",
+ .name = "EN25B05T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = EON_EN25B05,
@@ -3662,7 +3724,11 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {32 * 1024, 2} },
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {64 * 1024, 1} },
@@ -3746,11 +3812,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P10",
+ .name = "EN25B16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B10,
- .total_size = 128,
+ .model_id = EON_EN25B16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -3759,10 +3825,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 31},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -3775,11 +3847,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B20",
+ .name = "EN25B16T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B20,
- .total_size = 256,
+ .model_id = EON_EN25B16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -3789,15 +3861,15 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
+ {64 * 1024, 31},
{32 * 1024, 1},
- {64 * 1024, 3}
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -3810,7 +3882,7 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B20T",
+ .name = "EN25B20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = EON_EN25B20,
@@ -3824,11 +3896,11 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 3},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
{4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 3}
},
.block_erase = spi_block_erase_d8,
}, {
@@ -3845,7 +3917,7 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P20",
+ .name = "EN25B20T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = EON_EN25B20,
@@ -3858,7 +3930,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = {
+ {64 * 1024, 3},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {256 * 1024, 1} },
@@ -3874,13 +3952,14 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B40",
+ .name = "EN25B32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B40,
- .total_size = 512,
+ .model_id = EON_EN25B32,
+ .total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -3892,11 +3971,11 @@ const struct flashchip flashchips[] = {
{8 * 1024, 1},
{16 * 1024, 1},
{32 * 1024, 1},
- {64 * 1024, 7}
+ {64 * 1024, 63},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -3909,13 +3988,14 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B40T",
+ .name = "EN25B32T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B40,
- .total_size = 512,
+ .model_id = EON_EN25B32,
+ .total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -3923,7 +4003,7 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 7},
+ {64 * 1024, 63},
{32 * 1024, 1},
{16 * 1024, 1},
{8 * 1024, 1},
@@ -3931,7 +4011,7 @@ const struct flashchip flashchips[] = {
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -3944,7 +4024,7 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P40",
+ .name = "EN25B40",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
.model_id = EON_EN25B40,
@@ -3957,7 +4037,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = {
+ {4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 7}
+ },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {512 * 1024, 1} },
@@ -3973,11 +4059,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B80",
+ .name = "EN25B40T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
+ .model_id = EON_EN25B40,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -3987,15 +4073,15 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
+ {64 * 1024, 7},
{32 * 1024, 1},
- {64 * 1024, 15}
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4008,13 +4094,14 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B80T",
+ .name = "EN25B64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
+ .model_id = EON_EN25B64,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -4022,15 +4109,15 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 15},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
{4 * 1024, 2},
+ {8 * 1024, 1},
+ {16 * 1024, 1},
+ {32 * 1024, 1},
+ {64 * 1024, 127},
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4043,23 +4130,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P80",
+ .name = "EN25B64T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B80,
- .total_size = 1024,
+ .model_id = EON_EN25B64,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = {
+ {64 * 1024, 127},
+ {32 * 1024, 1},
+ {16 * 1024, 1},
+ {8 * 1024, 1},
+ {4 * 1024, 2},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4072,11 +4166,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B16",
+ .name = "EN25B80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B16,
- .total_size = 2048,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -4090,11 +4184,11 @@ const struct flashchip flashchips[] = {
{8 * 1024, 1},
{16 * 1024, 1},
{32 * 1024, 1},
- {64 * 1024, 31},
+ {64 * 1024, 15}
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4107,11 +4201,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25B16T",
+ .name = "EN25B80T",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B16,
- .total_size = 2048,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -4121,7 +4215,7 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 31},
+ {64 * 1024, 15},
{32 * 1024, 1},
{16 * 1024, 1},
{8 * 1024, 1},
@@ -4129,7 +4223,7 @@ const struct flashchip flashchips[] = {
},
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4142,244 +4236,265 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25P16",
+ .name = "EN25F05",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B16,
- .total_size = 2048,
+ .model_id = EON_EN25F05,
+ .total_size = 64,
.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 = { {64 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 16} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 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, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25B32",
+ .name = "EN25F10",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B32,
- .total_size = 4096,
+ .model_id = EON_EN25F10,
+ .total_size = 128,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 63},
- },
+ .eraseblocks = { {4 * 1024, 32} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25B32T",
+ .name = "EN25F16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B32,
- .total_size = 4096,
+ .model_id = EON_EN25F16,
+ .total_size = 2048,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 63},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25P32", /* Uniform version of EN25B32 */
+ .name = "EN25F20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B32,
- .total_size = 4096,
+ .model_id = EON_EN25F20,
+ .total_size = 256,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25B64",
+ .name = "EN25F32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B64,
- .total_size = 8192,
+ .model_id = EON_EN25F32,
+ .total_size = 4096,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {4 * 1024, 2},
- {8 * 1024, 1},
- {16 * 1024, 1},
- {32 * 1024, 1},
- {64 * 1024, 127},
- },
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25B64T",
+ .name = "EN25F40",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B64,
- .total_size = 8192,
+ .model_id = EON_EN25F40,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 127},
- {32 * 1024, 1},
- {16 * 1024, 1},
- {8 * 1024, 1},
- {4 * 1024, 2},
- },
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25P64",
+ .name = "EN25F64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25B64,
+ .model_id = EON_EN25F64,
.total_size = 8192,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .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 = { {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_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25F05",
+ .name = "EN25F80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F05,
- .total_size = 64,
+ .model_id = EON_EN25F80,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -4388,19 +4503,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4413,11 +4525,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25F10",
+ .name = "EN25P05",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F10,
- .total_size = 128,
+ .model_id = EON_EN25B05,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -4426,36 +4538,28 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = {
+ {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {64 * 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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25F20",
+ .name = "EN25P10",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F20,
- .total_size = 256,
+ .model_id = EON_EN25B10,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -4464,266 +4568,222 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {128 * 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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25F40",
+ .name = "EN25P16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F40,
- .total_size = 512,
+ .model_id = EON_EN25B16,
+ .total_size = 2048,
.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 = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {2 * 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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25F80",
+ .name = "EN25P20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F80,
- .total_size = 1024,
+ .model_id = EON_EN25B20,
+ .total_size = 256,
.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, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
+ .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_plain, /* TODO: improve */
.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 = "Eon",
- .name = "EN25F16",
+ .name = "EN25P32", /* Uniform version of EN25B32 */
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F16,
- .total_size = 2048,
+ .model_id = EON_EN25B32,
+ .total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ /* OTP: 512B total; enter 0x3A */
+ .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 = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25F32",
+ .name = "EN25P40",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F32,
- .total_size = 4096,
+ .model_id = EON_EN25B40,
+ .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, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.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 = "Eon",
- .name = "EN25F64",
+ .name = "EN25P64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25F64,
+ .model_id = EON_EN25B64,
.total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
.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_60,
- }, {
- .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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25Q40",
+ .name = "EN25P80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q40,
- .total_size = 512,
+ .model_id = EON_EN25B80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {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,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25Q80(A)",
+ .name = "EN25Q128",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q80,
- .total_size = 1024,
+ .model_id = EON_EN25Q128,
+ .total_size = 16384,
.page_size = 256,
- /* OTP: 256B total; enter 0x3A */
+ /* OTP: 512B total; enter 0x3A */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4731,7 +4791,6 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
},
{
@@ -4814,6 +4873,42 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
+ .name = "EN25Q40",
+ .bustype = BUS_SPI,
+ .manufacture_id = EON_ID_NOPREFIX,
+ .model_id = EON_EN25Q40,
+ .total_size = 512,
+ .page_size = 256,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN25Q64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
@@ -4850,30 +4945,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25Q128",
+ .name = "EN25Q80(A)",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25Q128,
- .total_size = 16384,
+ .model_id = EON_EN25Q80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
+ /* OTP: 256B total; enter 0x3A */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4881,36 +4976,37 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "Eon",
- .name = "EN25QH16",
+ .name = "EN25QH128",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH16,
- .total_size = 2048,
+ .model_id = EON_EN25QH128,
+ .total_size = 16384,
.page_size = 256,
/* supports SFDP */
/* OTP: 512B total; enter 0x3A */
/* QPI enable 0x38, disable 0xFF */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 2048, 1} },
+ .eraseblocks = { { 16384 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 2048, 1} },
+ .eraseblocks = { { 16384 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4923,11 +5019,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25QH32",
+ .name = "EN25QH16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH32,
- .total_size = 4096,
+ .model_id = EON_EN25QH16,
+ .total_size = 2048,
.page_size = 256,
/* supports SFDP */
/* OTP: 512B total; enter 0x3A */
@@ -4939,16 +5035,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 4096, 1} },
+ .eraseblocks = { {1024 * 2048, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 4096, 1} },
+ .eraseblocks = { {1024 * 2048, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4961,11 +5057,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25QH64",
+ .name = "EN25QH32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH64,
- .total_size = 8192,
+ .model_id = EON_EN25QH32,
+ .total_size = 4096,
.page_size = 256,
/* supports SFDP */
/* OTP: 512B total; enter 0x3A */
@@ -4977,16 +5073,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 8192 * 1024, 1} },
+ .eraseblocks = { {1024 * 4096, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { { 8192 * 1024, 1} },
+ .eraseblocks = { {1024 * 4096, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -4999,32 +5095,32 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25QH128",
+ .name = "EN25QH64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25QH128,
- .total_size = 16384,
+ .model_id = EON_EN25QH64,
+ .total_size = 8192,
.page_size = 256,
/* supports SFDP */
/* OTP: 512B total; enter 0x3A */
/* QPI enable 0x38, disable 0xFF */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { { 16384 * 1024, 1} },
+ .eraseblocks = { { 8192 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { { 16384 * 1024, 1} },
+ .eraseblocks = { { 8192 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -5073,35 +5169,38 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S20",
+ .name = "EN25S16",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S20,
- .total_size = 256,
+ .model_id = EON_EN25S16,
+ .total_size = 2048,
.page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_UNTESTED,
.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 = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_en25s_wp,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {1650, 1950},
@@ -5109,30 +5208,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S40",
+ .name = "EN25S20",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S40,
- .total_size = 512,
+ .model_id = EON_EN25S20,
+ .total_size = 256,
.page_size = 256,
/* OTP: 256B total; enter 0x3A */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -5145,35 +5244,38 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S80",
+ .name = "EN25S32",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S80,
- .total_size = 1024,
+ .model_id = EON_EN25S32,
+ .total_size = 4096,
.page_size = 256,
- /* OTP: 256B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* OTP: 512B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 128} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {4096 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {4096 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_en25s_wp,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {1650, 1950},
@@ -5181,38 +5283,35 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S16",
+ .name = "EN25S40",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S16,
- .total_size = 2048,
+ .model_id = EON_EN25S40,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
+ /* OTP: 256B total; enter 0x3A */
+ .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} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2048 * 1024, 1} },
+ .eraseblocks = { {512 * 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_en25s_wp,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {1650, 1950},
@@ -5220,11 +5319,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S32",
+ .name = "EN25S64",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S32,
- .total_size = 4096,
+ .model_id = EON_EN25S64,
+ .total_size = 8192,
.page_size = 256,
/* OTP: 512B total; enter 0x3A */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
@@ -5234,19 +5333,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4096 * 1024, 1} },
+ .eraseblocks = { {8192 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4096 * 1024, 1} },
+ .eraseblocks = { {8192 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -5259,35 +5355,35 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN25S64",
+ .name = "EN25S80",
.bustype = BUS_SPI,
.manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S64,
- .total_size = 8192,
+ .model_id = EON_EN25S80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 512B total; enter 0x3A */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ /* OTP: 256B total; enter 0x3A */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8192 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8192 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_en25s_wp,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {1650, 1950},
@@ -5295,34 +5391,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN29F010",
- .bustype = BUS_PARALLEL,
- .manufacture_id = EON_ID,
- .model_id = EON_EN29F010,
- .total_size = 128,
- .page_size = 128,
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PRE,
- .probe = probe_jedec,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = { {16 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- },
- {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {4500, 5500},
- },
-
- {
- .vendor = "Eon",
.name = "EN29F002(A)(N)B",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
@@ -5387,59 +5455,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
- .name = "EN29LV040(A)",
+ .name = "EN29F010",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
- .model_id = EON_EN29LV040,
- .total_size = 512,
- .page_size = 4 * 1024,
- .tested = TEST_OK_PREW,
+ .model_id = EON_EN29F010,
+ .total_size = 128,
+ .page_size = 128,
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
- .probe_timing = TIMING_ZERO,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {16 * 1024, 8} },
.block_erase = erase_sector_jedec,
},
{
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R and 55R, others 2.7-3.6V */
- },
-
- {
- .vendor = "Eon",
- .name = "EN29LV640B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = EON_ID,
- .model_id = EON_EN29LV640B,
- .total_size = 8192,
- .page_size = 8192,
- .feature_bits = FEATURE_ADDR_SHIFTED,
- .tested = TEST_OK_PREW,
- .probe = probe_en29lv640b,
- .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 127},
- },
- .block_erase = erase_block_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_en29lv640b,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
@@ -5557,95 +5596,59 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "ESI",
- .name = "ES25P40",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P40,
+ .vendor = "Eon",
+ .name = "EN29LV040(A)",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = EON_ID,
+ .model_id = EON_EN29LV040,
.total_size = 512,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .page_size = 4 * 1024,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
.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_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ESI",
- .name = "ES25P80",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P80,
- .total_size = 1024,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
+ .block_erase = erase_sector_jedec,
+ },
{
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
- .voltage = {2700, 3600},
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R and 55R, others 2.7-3.6V */
},
{
- .vendor = "ESI",
- .name = "ES25P16",
- .bustype = BUS_SPI,
- .manufacture_id = EXCEL_ID_NOPREFIX,
- .model_id = EXCEL_ES25P16,
- .total_size = 2 * 1024,
- .page_size = 256,
- /* 256-byte parameter page separate from memory array:
- * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
+ .vendor = "Eon",
+ .name = "EN29LV640B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = EON_ID,
+ .model_id = EON_EN29LV640B,
+ .total_size = 8192,
+ .page_size = 8192,
+ .feature_bits = FEATURE_ADDR_SHIFTED,
+ .tested = TEST_OK_PREW,
+ .probe = probe_en29lv640b,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 127},
+ },
+ .block_erase = erase_block_jedec,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast Read (0x0B) supported */
+ .write = write_en29lv640b,
+ .read = read_memmapped,
.voltage = {2700, 3600},
},
@@ -5844,33 +5847,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25LQ40",
+ .name = "GD25B128B/GD25Q128B",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ40,
- .total_size = 512,
+ .model_id = GIGADEVICE_GD25Q128,
+ .total_size = 16384,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -5878,16 +5881,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1695, 1950},
+ .voltage = {2700, 3600},
},
{
.vendor = "GigaDevice",
- .name = "GD25LQ80",
+ .name = "GD25LQ128",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ80,
- .total_size = 1024,
+ .model_id = GIGADEVICE_GD25LQ128,
+ .total_size = 16384,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -5897,19 +5900,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6000,33 +6003,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25LQ64(B)",
+ .name = "GD25LQ40",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ64,
- .total_size = 8192,
+ .model_id = GIGADEVICE_GD25LQ40,
+ .total_size = 512,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 16} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6039,33 +6042,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25LQ128",
+ .name = "GD25LQ64(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25LQ128,
- .total_size = 16384,
+ .model_id = GIGADEVICE_GD25LQ64,
+ .total_size = 8192,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6078,29 +6081,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q512",
+ .name = "GD25LQ80",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q512,
- .total_size = 64,
+ .model_id = GIGADEVICE_GD25LQ80,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.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 = { {64 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6108,7 +6115,7 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .voltage = {1695, 1950},
},
{
@@ -6151,37 +6158,40 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q20(B)",
+ .name = "GD25Q128C",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q20,
- .total_size = 256,
+ .model_id = GIGADEVICE_GD25Q128,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 1536B total; read 0x48; write 0x42, erase 0x44 */
+ /* QPI: enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
+ /* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
.printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .unlock = spi_disable_blockprotect_bp4_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2700, 3600},
@@ -6189,32 +6199,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q40(B)",
+ .name = "GD25Q16(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q40,
- .total_size = 512,
+ .model_id = GIGADEVICE_GD25Q16,
+ .total_size = 2048,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 16} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6227,33 +6238,32 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q80(B)",
+ .name = "GD25Q20(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q80,
- .total_size = 1024,
+ .model_id = GIGADEVICE_GD25Q20,
+ .total_size = 256,
.page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 8} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6266,13 +6276,13 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q16(B)",
+ .name = "GD25Q32(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q16,
- .total_size = 2048,
+ .model_id = GIGADEVICE_GD25Q32,
+ .total_size = 4096,
.page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -6280,19 +6290,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6305,33 +6315,32 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q32(B)",
+ .name = "GD25Q40(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q32,
- .total_size = 4096,
+ .model_id = GIGADEVICE_GD25Q40,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 16} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6344,33 +6353,29 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q64(B)",
+ .name = "GD25Q512",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q64,
- .total_size = 8192,
+ .model_id = GIGADEVICE_GD25Q512,
+ .total_size = 64,
.page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6383,11 +6388,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25B128B/GD25Q128B",
+ .name = "GD25Q64(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q128,
- .total_size = 16384,
+ .model_id = GIGADEVICE_GD25Q64,
+ .total_size = 8192,
.page_size = 256,
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -6397,19 +6402,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -6422,40 +6427,38 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
- .name = "GD25Q128C",
+ .name = "GD25Q80(B)",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25Q128,
- .total_size = 16384,
+ .model_id = GIGADEVICE_GD25Q80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 1536B total; read 0x48; write 0x42, erase 0x44 */
- /* QPI: enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
.printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2700, 3600},
@@ -6502,6 +6505,46 @@ const struct flashchip flashchips[] = {
{
.vendor = "GigaDevice",
+ .name = "GD25VQ16C",
+ .bustype = BUS_SPI,
+ .manufacture_id = GIGADEVICE_ID,
+ .model_id = GIGADEVICE_GD25VQ16C,
+ .total_size = 2 * 1024,
+ .page_size = 256,
+ /* Supports SFDP */
+ /* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { { 4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { { 32 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { { 64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp4_srwd,
+ .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "GigaDevice",
.name = "GD25VQ21B",
.bustype = BUS_SPI,
.manufacture_id = GIGADEVICE_ID,
@@ -6659,65 +6702,25 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "GigaDevice",
- .name = "GD25VQ16C",
- .bustype = BUS_SPI,
- .manufacture_id = GIGADEVICE_ID,
- .model_id = GIGADEVICE_GD25VQ16C,
- .total_size = 2 * 1024,
- .page_size = 256,
- /* Supports SFDP */
- /* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { { 4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { { 32 * 1024, 64} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { { 64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp4_srwd,
- .unlock = spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2300, 3600},
- },
-
- {
.vendor = "Hyundai",
- .name = "HY29F002T",
+ .name = "HY29F002B",
.bustype = BUS_PARALLEL,
.manufacture_id = HYUNDAI_ID,
- .model_id = HYUNDAI_HY29F002T,
+ .model_id = HYUNDAI_HY29F002B,
.total_size = 256,
.page_size = 256 * 1024,
.feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
- .tested = TEST_OK_PRE,
+ .tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
- {64 * 1024, 3},
- {32 * 1024, 1},
- {8 * 1024, 2},
{16 * 1024, 1},
+ {8 * 1024, 2},
+ {32 * 1024, 1},
+ {64 * 1024, 3},
},
.block_erase = erase_sector_jedec,
}, {
@@ -6732,24 +6735,24 @@ const struct flashchip flashchips[] = {
{
.vendor = "Hyundai",
- .name = "HY29F002B",
+ .name = "HY29F002T",
.bustype = BUS_PARALLEL,
.manufacture_id = HYUNDAI_ID,
- .model_id = HYUNDAI_HY29F002B,
+ .model_id = HYUNDAI_HY29F002T,
.total_size = 256,
.page_size = 256 * 1024,
.feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {32 * 1024, 1},
{64 * 1024, 3},
+ {32 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
@@ -6790,6 +6793,428 @@ const struct flashchip flashchips[] = {
},
{
+ .vendor = "ISSI",
+ .name = "IS25LP064",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25LP064,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total; read 0x48; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25LP128",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25LP128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 1024B total; read 0x48; 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, 4096} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 4096} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 512} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25LP256",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25LP256,
+ .total_size = 32768,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
+ /* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_4BA_ENTER_EAR7,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_20,
+ /* could also use spi_block_erase_d7 */
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25WP032",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25WP032,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 1024B total; read 0x48; write 0x42 */
+ /* QPI enable 0x35, disable 0xF5 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 1024} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .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,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25WP064",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25WP064,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total; read 0x48; write 0x42 */
+ /* QPI enable 0x35, disable 0xF5 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .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 = { {4 * 1024, 2048} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25WP128",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25WP128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 1024B total; read 0x48; write 0x42 */
+ /* QPI enable 0x35, disable 0xF5 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 4096} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 4096} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {32 * 1024, 512} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS25WP256",
+ .bustype = BUS_SPI,
+ .manufacture_id = ISSI_ID_SPI,
+ .model_id = ISSI_IS25WP256,
+ .total_size = 32768,
+ .page_size = 256,
+ /* supports SFDP */
+ /* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
+ /* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_4BA_ENTER_EAR7,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_20,
+ /* could also use spi_block_erase_d7 */
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {1650, 1950},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS29GL064B",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ISSI_ID,
+ .model_id = ISSI_PMC_IS29GL064B,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 127},
+ },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS29GL064H/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ISSI_ID,
+ .model_id = ISSI_PMC_IS29GL064HL,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS29GL064T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ISSI_ID,
+ .model_id = ISSI_PMC_IS29GL064T,
+ .total_size = 8192,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 127},
+ {8 * 1024, 8},
+ },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "ISSI",
+ .name = "IS29GL128H/L",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = ISSI_ID,
+ .model_id = ISSI_PMC_IS29GL128HL,
+ .total_size = 16384,
+ .page_size = 128 * 1024, /* actual page size is 16 */
+ .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec_29gl,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {128 * 1024, 128} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
.vendor = "Intel",
.name = "25F160S33B8",
.bustype = BUS_SPI,
@@ -7106,33 +7531,37 @@ const struct flashchip flashchips[] = {
{
.vendor = "Intel",
- .name = "28F008S3/S5/SC",
+ .name = "28F004B5/BE/BV/BX-B",
.bustype = BUS_PARALLEL,
.manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004S3,
+ .model_id = INTEL_28F004B,
.total_size = 512,
- .page_size = 256,
+ .page_size = 128 * 1024, /* maximal block size */
.tested = TEST_UNTESTED,
.probe = probe_82802ab,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = {
+ {16 * 1024, 1},
+ {8 * 1024, 2},
+ {96 * 1024, 1},
+ {128 * 1024, 3},
+ },
.block_erase = erase_block_82802ab,
},
},
- .unlock = unlock_28f004s5,
.write = write_82802ab,
.read = read_memmapped,
},
{
.vendor = "Intel",
- .name = "28F004B5/BE/BV/BX-B",
+ .name = "28F004B5/BE/BV/BX-T",
.bustype = BUS_PARALLEL,
.manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004B,
+ .model_id = INTEL_28F004T,
.total_size = 512,
.page_size = 128 * 1024, /* maximal block size */
.tested = TEST_UNTESTED,
@@ -7142,10 +7571,10 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {96 * 1024, 1},
{128 * 1024, 3},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
},
.block_erase = erase_block_82802ab,
},
@@ -7156,27 +7585,23 @@ const struct flashchip flashchips[] = {
{
.vendor = "Intel",
- .name = "28F004B5/BE/BV/BX-T",
+ .name = "28F008S3/S5/SC",
.bustype = BUS_PARALLEL,
.manufacture_id = INTEL_ID,
- .model_id = INTEL_28F004T,
+ .model_id = INTEL_28F004S3,
.total_size = 512,
- .page_size = 128 * 1024, /* maximal block size */
+ .page_size = 256,
.tested = TEST_UNTESTED,
.probe = probe_82802ab,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
- .eraseblocks = {
- {128 * 1024, 3},
- {96 * 1024, 1},
- {8 * 1024, 2},
- {16 * 1024, 1},
- },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = erase_block_82802ab,
},
},
+ .unlock = unlock_28f004s5,
.write = write_82802ab,
.read = read_memmapped,
},
@@ -7288,425 +7713,19 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "ISSI",
- .name = "IS25LP064",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25LP064,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total; read 0x48; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 256} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25LP128",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25LP128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 1024B total; read 0x48; 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, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 512} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25LP256",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25LP256,
- .total_size = 32768,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
- /* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_4BA_ENTER_EAR7,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_20,
- /* could also use spi_block_erase_d7 */
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25WP032",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25WP032,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 1024B total; read 0x48; write 0x42 */
- /* QPI enable 0x35, disable 0xF5 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 1024} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25WP064",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25WP064,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total; read 0x48; write 0x42 */
- /* QPI enable 0x35, disable 0xF5 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .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 = { {4 * 1024, 2048} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 256} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25WP128",
+ .vendor = "Macronix",
+ .name = "MX23L12854",
.bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25WP128,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX23L12854,
.total_size = 16384,
.page_size = 256,
- /* OTP: 1024B total; read 0x48; write 0x42 */
- /* QPI enable 0x35, disable 0xF5 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 4096} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {32 * 1024, 512} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS25WP256",
- .bustype = BUS_SPI,
- .manufacture_id = ISSI_ID_SPI,
- .model_id = ISSI_IS25WP256,
- .total_size = 32768,
- .page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
- /* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_4BA_ENTER_EAR7,
- .tested = TEST_OK_PREW,
+ .tested = {.probe = NT, .read = NT, .erase = NA, .write = NA},
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_20,
- /* could also use spi_block_erase_d7 */
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS29GL064B",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ISSI_ID,
- .model_id = ISSI_PMC_IS29GL064B,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 127},
- },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS29GL064T",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ISSI_ID,
- .model_id = ISSI_PMC_IS29GL064T,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {64 * 1024, 127},
- {8 * 1024, 8},
- },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS29GL064H/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ISSI_ID,
- .model_id = ISSI_PMC_IS29GL064HL,
- .total_size = 8192,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "ISSI",
- .name = "IS29GL128H/L",
- .bustype = BUS_PARALLEL,
- .manufacture_id = ISSI_ID,
- .model_id = ISSI_PMC_IS29GL128HL,
- .total_size = 16384,
- .page_size = 128 * 1024, /* actual page size is 16 */
- .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec_29gl,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {128 * 1024, 128} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- },
- },
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {2700, 3600},
+ .write = NULL, /* MX23L12854 is a mask ROM, so it is read-only */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {3000, 3600},
},
{
@@ -7759,61 +7778,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX23L12854",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX23L12854,
- .total_size = 16384,
- .page_size = 256,
- .tested = {.probe = NT, .read = NT, .erase = NA, .write = NA},
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .write = NULL, /* MX23L12854 is a mask ROM, so it is read-only */
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {3000, 3600},
- },
-
- {
- .vendor = "Macronix",
- .name = "MX25L512(E)/MX25V512(C)",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L512,
- .total_size = 64,
- .page_size = 256,
- /* MX25L512E supports SFDP */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 16} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 1} },
- .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,
- },
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported, MX25L512E supports dual I/O */
- .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V512(C) */
- },
-
- {
- .vendor = "Macronix",
.name = "MX25L1005(C)/MX25L1006E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -7850,37 +7814,35 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L2005(C)/MX25L2006E",
+ .name = "MX25L12805D",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L2005,
- .total_size = 256,
+ .model_id = MACRONIX_MX25L12805D,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 64B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
@@ -7888,37 +7850,39 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L4005(A/C)/MX25L4006E",
+ .name = "MX25L12835F/MX25L12845E/MX25L12865E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L4005,
- .total_size = 512,
+ .model_id = MACRONIX_MX25L12805D,
+ .total_size = 16384,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- },
+ }
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
@@ -7926,46 +7890,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005",
- .bustype = BUS_SPI,
- .manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L8005,
- .total_size = 1024,
- .page_size = 256,
- /* MX25L8006E, MX25L8008E support SFDP */
- /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- },
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V8005 */
- },
-
- {
- .vendor = "Macronix",
.name = "MX25L1605",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
@@ -8147,11 +8071,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L3205(A)",
+ .name = "MX25L2005(C)/MX25L2006E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L3205,
- .total_size = 4096,
+ .model_id = MACRONIX_MX25L2005,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -8160,20 +8084,23 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* bit6: error flag */
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
@@ -8182,21 +8109,69 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L3205D/MX25L3208D",
+ .name = "MX25L25635F",
+ .bustype = BUS_SPI,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX25L25635F,
+ .total_size = 32768,
+ .page_size = 256,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Macronix",
+ .name = "MX25L3205(A)",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX25L3205,
.total_size = 4096,
.page_size = 256,
- /* OTP: 64B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
.eraseblocks = { {64 * 1024, 64} },
@@ -8209,16 +8184,16 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* bit6: error flag */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L3206E/MX25L3208E",
+ .name = "MX25L3205D/MX25L3208D",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX25L3205,
@@ -8238,9 +8213,6 @@ const struct flashchip flashchips[] = {
.eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_52,
- }, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
@@ -8248,7 +8220,7 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */
@@ -8257,7 +8229,7 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L3273E",
+ .name = "MX25L3206E/MX25L3208E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX25L3205,
@@ -8274,12 +8246,12 @@ const struct flashchip flashchips[] = {
.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 = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
@@ -8332,139 +8304,139 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L6405",
+ .name = "MX25L3273E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L6405,
- .total_size = 8192,
+ .model_id = MACRONIX_MX25L3205,
+ .total_size = 4096,
.page_size = 256,
- /* Has an additional 512B EEPROM sector */
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 64B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 128} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- }
+ },
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: error flag */
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
.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) and dual I/O supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L6405D",
+ .name = "MX25L4005(A/C)/MX25L4006E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L6405,
- .total_size = 8192,
+ .model_id = MACRONIX_MX25L4005,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 64B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- }
+ },
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0xBB) supported */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L6406E/MX25L6408E",
+ .name = "MX25L512(E)/MX25V512(C)",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L6405,
- .total_size = 8192,
+ .model_id = MACRONIX_MX25L512,
+ .total_size = 64,
.page_size = 256,
- /* MX25L6406E supports SFDP */
- /* OTP: 06E 64B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* MX25L512E supports SFDP */
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- }
+ },
},
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read supported */
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B) supported, MX25L512E supports dual I/O */
+ .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V512(C) */
},
{
.vendor = "Macronix",
- .name = "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F",
+ .name = "MX25L6405",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX25L6405,
.total_size = 8192,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* Has an additional 512B EEPROM sector */
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {64 * 1024, 128} },
.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,
}, {
@@ -8475,20 +8447,20 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: error flag */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L12805D",
+ .name = "MX25L6405D",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L12805D,
- .total_size = 16384,
+ .model_id = MACRONIX_MX25L6405,
+ .total_size = 8192,
.page_size = 256,
/* OTP: 64B total; enter 0xB1, exit 0xC1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -8498,35 +8470,36 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: continuously program mode */
.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 (0xBB) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L12835F/MX25L12845E/MX25L12865E",
+ .name = "MX25L6406E/MX25L6408E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L12805D,
- .total_size = 16384,
+ .model_id = MACRONIX_MX25L6405,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ /* MX25L6406E supports SFDP */
+ /* OTP: 06E 64B total; enter 0xB1, exit 0xC1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -8534,138 +8507,118 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
.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 supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25L25635F",
+ .name = "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L25635F,
- .total_size = 32768,
+ .model_id = MACRONIX_MX25L6405,
+ .total_size = 8192,
.page_size = 256,
+ /* supports SFDP */
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 8192} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.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) and multi I/O supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX66L51235F",
+ .name = "MX25L6495F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX66L51235F,
- .total_size = 65536,
+ .model_id = MACRONIX_MX25L6495F,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
+ /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16384} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 16384} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 2048} },
- .block_erase = spi_block_erase_5c,
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 2048} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 1024} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 1024} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {64 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2700, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25U8032E",
+ .name = "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U8032E,
+ .model_id = MACRONIX_MX25L8005,
.total_size = 1024,
.page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* MX25L8006E, MX25L8008E support SFDP */
+ /* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -8675,7 +8628,7 @@ const struct flashchip flashchips[] = {
.eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_52,
}, {
.eraseblocks = { {64 * 1024, 16} },
@@ -8686,68 +8639,63 @@ const struct flashchip flashchips[] = {
}, {
.eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
- }
+ },
},
- /* TODO: security register */
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 2000},
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600}, /* 2.35-3.6V for MX25V8005 */
},
{
.vendor = "Macronix",
- .name = "MX25U1635E",
+ .name = "MX25R6435F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U1635E,
- .total_size = 2048,
+ .model_id = MACRONIX_MX25R6435F,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 512B total; enter 0xB1, exit 0xC1 */
- /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PR,
+ /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
+ .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} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- /* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 2000},
+ .voltage = {1650, 3600},
},
{
.vendor = "Macronix",
- .name = "MX25U3235E/F",
+ .name = "MX25U12835F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U3235E,
- .total_size = 4096,
+ .model_id = MACRONIX_MX25U12835E,
+ .total_size = 16384,
.page_size = 256,
- /* F model supports SFDP */
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
- /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -8755,61 +8703,60 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
/* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
+ .write = spi_chip_write_256, /* Multi I/O supported */
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {1650, 2000},
},
{
.vendor = "Macronix",
- .name = "MX25U6435E/F",
+ .name = "MX25U1635E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U6435E,
- .total_size = 8192,
+ .model_id = MACRONIX_MX25U1635E,
+ .total_size = 2048,
.page_size = 256,
- /* F model supports SFDP */
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
/* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
+ .tested = TEST_OK_PR,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -8823,33 +8770,42 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25U12835F",
+ .name = "MX25U25635F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U12835E,
- .total_size = 16384,
+ .model_id = MACRONIX_MX25U25635F,
+ .total_size = 32768,
.page_size = 256,
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
+ .tested = TEST_OK_PR,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 8192} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 8192} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 1024} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 1024} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 512} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {32 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -8863,49 +8819,42 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25U25635F",
+ .name = "MX25U3235E/F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25U25635F,
- .total_size = 32768,
+ .model_id = MACRONIX_MX25U3235E,
+ .total_size = 4096,
.page_size = 256,
+ /* F model supports SFDP */
/* OTP: 512B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
- .tested = TEST_OK_PR,
+ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 8192} },
- .block_erase = spi_block_erase_21,
- }, {
- .eraseblocks = { {4 * 1024, 8192} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 1024} },
- .block_erase = spi_block_erase_5c,
- }, {
- .eraseblocks = { {32 * 1024, 1024} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { {64 * 1024, 512} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {32 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
/* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256, /* Multi I/O supported */
+ .write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {1650, 2000},
},
@@ -8961,14 +8910,16 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX25L6495F",
+ .name = "MX25U6435E/F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L6495F,
+ .model_id = MACRONIX_MX25U6435E,
.total_size = 8192,
.page_size = 256,
- /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* F model supports SFDP */
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ /* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -8978,12 +8929,12 @@ const struct flashchip flashchips[] = {
.eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
.eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
+ .eraseblocks = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
@@ -8991,21 +8942,23 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
}
},
- .unlock = spi_disable_blockprotect,
+ /* TODO: security register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .voltage = {1650, 2000},
},
{
.vendor = "Macronix",
- .name = "MX25R6435F",
+ .name = "MX25U8032E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25R6435F,
- .total_size = 8192,
+ .model_id = MACRONIX_MX25U8032E,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 1024B total; enter 0xB1, exit 0xC1 */
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -9013,27 +8966,28 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
+ /* TODO: security register */
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {1650, 3600},
+ .voltage = {1650, 2000},
},
{
@@ -9259,11 +9213,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX29GL320EB",
+ .name = "MX29GL128F",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL320EB,
- .total_size = 4096,
+ .model_id = MACRONIX_MX29GL128F,
+ .total_size = 16384,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
@@ -9272,13 +9226,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 63},
- },
+ .eraseblocks = { {128 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
@@ -9289,10 +9240,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX29GL320ET",
+ .name = "MX29GL320EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL320ET,
+ .model_id = MACRONIX_MX29GL320EB,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -9303,8 +9254,8 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 63},
{8 * 1024, 8},
+ {64 * 1024, 63},
},
.block_erase = erase_sector_jedec,
}, {
@@ -9346,11 +9297,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX29GL640EB",
+ .name = "MX29GL320ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL640EB,
- .total_size = 8192,
+ .model_id = MACRONIX_MX29GL320ET,
+ .total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
@@ -9360,12 +9311,12 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
+ {64 * 1024, 63},
{8 * 1024, 8},
- {64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
@@ -9376,10 +9327,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX29GL640ET",
+ .name = "MX29GL640EB",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL640ET,
+ .model_id = MACRONIX_MX29GL640EB,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -9390,8 +9341,8 @@ const struct flashchip flashchips[] = {
{
{
.eraseblocks = {
- {64 * 1024, 127},
{8 * 1024, 8},
+ {64 * 1024, 127},
},
.block_erase = erase_sector_jedec,
}, {
@@ -9433,11 +9384,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Macronix",
- .name = "MX29GL128F",
+ .name = "MX29GL640ET",
.bustype = BUS_PARALLEL,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX29GL128F,
- .total_size = 16384,
+ .model_id = MACRONIX_MX29GL640ET,
+ .total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
.tested = TEST_UNTESTED,
@@ -9446,10 +9397,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {128 * 1024, 128} },
+ .eraseblocks = {
+ {64 * 1024, 127},
+ {8 * 1024, 8},
+ },
.block_erase = erase_sector_jedec,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
},
},
@@ -9486,31 +9440,51 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Micron/Numonyx/ST",
- .name = "M25P05-A",
+ .vendor = "Macronix",
+ .name = "MX66L51235F",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P05A,
- .total_size = 64,
+ .manufacture_id = MACRONIX_ID,
+ .model_id = MACRONIX_MX66L51235F,
+ .total_size = 65536,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 512B total; enter 0xB1, exit 0xC1 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {4 * 1024, 16384} },
+ .block_erase = spi_block_erase_21,
+ }, {
+ .eraseblocks = { {4 * 1024, 16384} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {32 * 1024, 2048} },
+ .block_erase = spi_block_erase_5c,
+ }, {
+ .eraseblocks = { {32 * 1024, 2048} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 1024} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { {64 * 1024, 1024} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {64 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {64 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ /* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
@@ -9550,11 +9524,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P10-A",
+ .name = "M25P05-A",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P10A,
- .total_size = 128,
+ .model_id = ST_M25P05A,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9563,10 +9537,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9608,70 +9582,70 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Micron/Numonyx/ST", /* Numonyx */
- .name = "M25P20",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P10-A",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P20,
- .total_size = 256,
+ .model_id = ST_M25P10A,
+ .total_size = 128,
.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 = { {64 * 1024, 4} },
+ .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_bp1_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P20-old",
+ .name = "M25P128",
.bustype = BUS_SPI,
- .manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P20_RES,
- .total_size = 256,
+ .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_res1,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {256 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp3_srwd, /* TODO: check */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
{
- .vendor = "Micron/Numonyx/ST", /* Numonyx */
- .name = "M25P40",
+ .vendor = "Micron/Numonyx/ST",
+ .name = "M25P16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P40,
- .total_size = 512,
+ .model_id = ST_M25P16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9680,10 +9654,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9695,40 +9669,70 @@ const struct flashchip flashchips[] = {
},
{
+ .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_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_bp1_srwd,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
.vendor = "Micron/Numonyx/ST",
- .name = "M25P40-old",
+ .name = "M25P20-old",
.bustype = BUS_SPI,
.manufacture_id = 0, /* Not used. */
- .model_id = ST_M25P40_RES,
- .total_size = 512,
+ .model_id = ST_M25P20_RES,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 8} },
+ .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_bp3_srwd, /* TODO: check */
- .unlock = spi_disable_blockprotect_bp3_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .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 = "Micron/Numonyx/ST",
- .name = "M25P80",
+ .name = "M25P32",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P80,
- .total_size = 1024,
+ .model_id = ST_M25P32,
+ .total_size = 4096,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9737,10 +9741,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9752,12 +9756,12 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Micron/Numonyx/ST",
- .name = "M25P16",
+ .vendor = "Micron/Numonyx/ST", /* Numonyx */
+ .name = "M25P40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P16,
- .total_size = 2048,
+ .model_id = ST_M25P40,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9766,10 +9770,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9782,23 +9786,23 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P32",
+ .name = "M25P40-old",
.bustype = BUS_SPI,
- .manufacture_id = ST_ID,
- .model_id = ST_M25P32,
- .total_size = 4096,
+ .manufacture_id = 0, /* Not used. */
+ .model_id = ST_M25P40_RES,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9806,7 +9810,6 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
},
{
@@ -9840,11 +9843,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25P128",
+ .name = "M25P80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25P128,
- .total_size = 16384,
+ .model_id = ST_M25P80,
+ .total_size = 1024,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9853,10 +9856,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9901,11 +9904,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PE20",
+ .name = "M25PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PE20,
- .total_size = 256,
+ .model_id = ST_M25PE16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
@@ -9914,13 +9917,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .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 = { {256 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9933,26 +9936,26 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PE40",
+ .name = "M25PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PE40,
- .total_size = 512,
+ .model_id = ST_M25PE20,
+ .total_size = 256,
.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} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9965,11 +9968,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PE80",
+ .name = "M25PE40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PE80,
- .total_size = 1024,
+ .model_id = ST_M25PE40,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -9978,13 +9981,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -9997,26 +10000,26 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PE16",
+ .name = "M25PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PE16,
- .total_size = 2048,
+ .model_id = ST_M25PE80,
+ .total_size = 1024,
.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} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -10029,13 +10032,13 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PX80",
+ .name = "M25PX16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PX80,
- .total_size = 1024,
+ .model_id = ST_M25PX16,
+ .total_size = 2048,
.page_size = 256,
- /* OTP: 64B total; read 0x4B, write 0x42 */
+ /* OTP: 64B total; read 0x4B; write 0x42 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -10043,13 +10046,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 256 } },
+ .eraseblocks = { { 4 * 1024, 512 } },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -10057,32 +10060,32 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
+ .voltage = {2300, 3600},
},
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PX16",
+ .name = "M25PX32",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PX16,
- .total_size = 2048,
+ .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_PREW,
+ .tested = TEST_OK_PRE,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 512 } },
+ .eraseblocks = { { 4 * 1024, 1024 } },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -10090,32 +10093,32 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp2_srwd, /* TODO: per 64kB sector lock registers */
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2300, 3600},
+ .voltage = {2700, 3600},
},
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PX32",
+ .name = "M25PX64",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PX32,
- .total_size = 4096,
+ .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,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 1024 } },
+ .eraseblocks = { { 4 * 1024, 2048 } },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -10128,13 +10131,13 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M25PX64",
+ .name = "M25PX80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M25PX64,
- .total_size = 8192,
+ .model_id = ST_M25PX80,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 64B total; read 0x4B; write 0x42 */
+ /* OTP: 64B total; read 0x4B, write 0x42 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -10142,13 +10145,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { { 4 * 1024, 2048 } },
+ .eraseblocks = { { 4 * 1024, 256 } },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -10189,11 +10192,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M45PE20",
+ .name = "M45PE16",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE20,
- .total_size = 256,
+ .model_id = ST_M45PE16,
+ .total_size = 2048,
.page_size = 256,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
@@ -10201,10 +10204,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {256, 1024} },
+ .eraseblocks = { {256, 8192} },
.block_erase = spi_block_erase_db,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}
},
@@ -10217,11 +10220,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Micron/Numonyx/ST",
- .name = "M45PE40",
+ .name = "M45PE20",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE40,
- .total_size = 512,
+ .model_id = ST_M45PE20,
+ .total_size = 256,
.page_size = 256,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
@@ -10229,27 +10232,27 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {256, 2048} },
+ .eraseblocks = { {256, 1024} },
.block_erase = spi_block_erase_db,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .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 supported (similar to PP but allows 0->1 changes) */
+ .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 = "M45PE80",
+ .name = "M45PE40",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE80,
- .total_size = 1024,
+ .model_id = ST_M45PE40,
+ .total_size = 512,
.page_size = 256,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
@@ -10257,27 +10260,27 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {256, 4096} },
+ .eraseblocks = { {256, 2048} },
.block_erase = spi_block_erase_db,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 8} },
.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) */
+ .write = spi_chip_write_256, /* Page write supported (similar to PP but allows 0->1 changes) */
.read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Micron/Numonyx/ST",
- .name = "M45PE16",
+ .name = "M45PE80",
.bustype = BUS_SPI,
.manufacture_id = ST_ID,
- .model_id = ST_M45PE16,
- .total_size = 2048,
+ .model_id = ST_M45PE80,
+ .total_size = 1024,
.page_size = 256,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
@@ -10285,10 +10288,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {256, 8192} },
+ .eraseblocks = { {256, 4096} },
.block_erase = spi_block_erase_db,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}
},
@@ -10852,6 +10855,41 @@ const struct flashchip flashchips[] = {
{
.vendor = "Nantronics",
+ .name = "N25S16",
+ .bustype = BUS_SPI,
+ .manufacture_id = NANTRONICS_ID_NOPREFIX,
+ .model_id = NANTRONICS_N25S16,
+ .total_size = 2048,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Nantronics",
.name = "N25S20",
.bustype = BUS_SPI,
.manufacture_id = NANTRONICS_ID_NOPREFIX,
@@ -10971,85 +11009,50 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Nantronics",
- .name = "N25S16",
- .bustype = BUS_SPI,
- .manufacture_id = NANTRONICS_ID_NOPREFIX,
- .model_id = NANTRONICS_N25S16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual I/O read (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
.vendor = "PMC",
- .name = "Pm25LD256C",
+ .name = "Pm25LD010(C)",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD256C,
- .total_size = 32,
+ .model_id = PMC_PM25LD010,
+ .total_size = 128,
.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, 8} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 8} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {32 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {32 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {32 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ .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},
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */
},
{
.vendor = "PMC",
- .name = "Pm25LD512(C)",
+ .name = "Pm25LD020(C)",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD512,
- .total_size = 64,
+ .model_id = PMC_PM25LD020,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -11058,19 +11061,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -11078,16 +11081,16 @@ const struct flashchip flashchips[] = {
.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},
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */
},
{
.vendor = "PMC",
- .name = "Pm25LD010(C)",
+ .name = "Pm25LD040(C)",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD010,
- .total_size = 128,
+ .model_id = PMC_PM25LV040,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -11096,74 +11099,74 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
+ .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 Pm25LD010 */
+ .voltage = {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */
},
{
.vendor = "PMC",
- .name = "Pm25LD020(C)",
+ .name = "Pm25LD256C",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LD020,
- .total_size = 256,
+ .model_id = PMC_PM25LD256C,
+ .total_size = 32,
.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, 64} },
+ .eraseblocks = { {4 * 1024, 8} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 8} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 1} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {32 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* FIXME: C version supports "Safe Guard" */
+ .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 Pm25LD020 */
+ .voltage = {2700, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LD040(C)",
+ .name = "Pm25LD512(C)",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV040,
- .total_size = 512,
+ .model_id = PMC_PM25LD512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -11172,36 +11175,36 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
+ .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 Pm25LD040 */
+ .voltage = {2300, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LQ020",
+ .name = "Pm25LQ016",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ020,
- .total_size = 256,
+ .model_id = PMC_PM25LQ016,
+ .total_size = 2048,
.page_size = 256,
/* OTP: 256B total; read 0x4B, write 0xB1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -11211,36 +11214,36 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {2048 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
.voltage = {2300, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LQ040",
+ .name = "Pm25LQ020",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ040,
- .total_size = 512,
+ .model_id = PMC_PM25LQ020,
+ .total_size = 256,
.page_size = 256,
/* OTP: 256B total; read 0x4B, write 0xB1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -11250,58 +11253,58 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6 is quad enable */
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .read = spi_chip_read,
.voltage = {2300, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LQ080",
+ .name = "Pm25LQ032C",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ080,
- .total_size = 1024,
+ .model_id = PMC_PM25LQ032C,
+ .total_size = 4096,
.page_size = 256,
/* OTP: 64B total; read 0x4B, write 0xB1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {4096 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {4096 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -11309,16 +11312,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2300, 3600},
+ .voltage = {2700, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LQ016",
+ .name = "Pm25LQ040",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ016,
- .total_size = 2048,
+ .model_id = PMC_PM25LQ040,
+ .total_size = 512,
.page_size = 256,
/* OTP: 256B total; read 0x4B, write 0xB1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -11328,19 +11331,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2048 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2048 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -11353,33 +11356,33 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm25LQ032C",
+ .name = "Pm25LQ080",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LQ032C,
- .total_size = 4096,
+ .model_id = PMC_PM25LQ080,
+ .total_size = 1024,
.page_size = 256,
/* OTP: 64B total; read 0x4B, write 0xB1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4096 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4096 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -11387,16 +11390,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .voltage = {2300, 3600},
},
{
.vendor = "PMC",
- .name = "Pm25LV512(A)",
+ .name = "Pm25LV010",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM25LV512,
- .total_size = 64,
+ .model_id = PMC_PM25LV010,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -11405,13 +11408,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -11424,15 +11427,15 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm25LV010",
+ .name = "Pm25LV010A",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID_NOPREFIX,
+ .manufacture_id = PMC_ID,
.model_id = PMC_PM25LV010,
.total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
- .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
@@ -11456,30 +11459,36 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm25LV010A",
+ .name = "Pm25LV016B",
.bustype = BUS_SPI,
.manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV010,
- .total_size = 128,
+ .model_id = PMC_PM25LV016B,
+ .total_size = 2048,
.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} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 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_bp1_srwd,
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
@@ -11590,36 +11599,30 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm25LV016B",
+ .name = "Pm25LV512(A)",
.bustype = BUS_SPI,
- .manufacture_id = PMC_ID,
- .model_id = PMC_PM25LV016B,
- .total_size = 2048,
+ .manufacture_id = PMC_ID_NOPREFIX,
+ .model_id = PMC_PM25LV512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2, /* The continuation code is transferred as the 3rd byte m( */
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_d7,
}, {
- .eraseblocks = { {4 * 1024, 512} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
- .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) supported */
@@ -11628,24 +11631,24 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm29F002T",
+ .name = "Pm29F002B",
.bustype = BUS_PARALLEL,
.manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM29F002T,
+ .model_id = PMC_PM29F002B,
.total_size = 256,
.page_size = 8 * 1024,
.feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_FIXME,
.block_erasers =
{
{
.eraseblocks = {
- {128 * 1024, 1},
- {96 * 1024, 1},
- {8 * 1024, 2},
{16 * 1024, 1},
+ {8 * 1024, 2},
+ {96 * 1024, 1},
+ {128 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
@@ -11660,24 +11663,24 @@ const struct flashchip flashchips[] = {
{
.vendor = "PMC",
- .name = "Pm29F002B",
+ .name = "Pm29F002T",
.bustype = BUS_PARALLEL,
.manufacture_id = PMC_ID_NOPREFIX,
- .model_id = PMC_PM29F002B,
+ .model_id = PMC_PM29F002T,
.total_size = 256,
.page_size = 8 * 1024,
.feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_jedec,
.probe_timing = TIMING_FIXME,
.block_erasers =
{
{
.eraseblocks = {
- {16 * 1024, 1},
- {8 * 1024, 2},
- {96 * 1024, 1},
{128 * 1024, 1},
+ {96 * 1024, 1},
+ {8 * 1024, 2},
+ {16 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
@@ -11873,1138 +11876,6 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Sanyo",
- .name = "LE25FW106",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW106,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {2 * 1024, 64} },
- .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_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd, /* FIXME: Add ERSER error flag. */
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW406A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW406A,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_plain,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU106B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU106B,
- .total_size = 128,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- /* FIXME: Is this correct?
- {
- .eraseblocks = { {2 * 1024, 64} },
- .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_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU206",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU206,
- .total_size = 256,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_d7,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp1_srwd,
- .unlock = spi_disable_blockprotect_bp1_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU206A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU206A,
- .total_size = 256,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 64} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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 = { {256 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU406B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU406B,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FU406C/LE25U40CMC",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FU406C,
- .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 = { {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 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual read (0x3B) and dual I/O (0xBB) supported */
- .voltage = {2300, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW203A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW203A,
- .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,
- }, {
- .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. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW403A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW403A,
- .total_size = 512,
- .page_size = 256,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256, 2 * 1024} },
- .block_erase = spi_block_erase_db,
- }, {
- .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_welwip,
- .unlock = NULL, /* #WP pin write-protects lower 64kB. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW418A",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW418A,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .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_bp2_srwd,
- .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 = "Sanyo",
- .name = "LE25FW806",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW806,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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_bp2_srwd,
- .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Sanyo",
- .name = "LE25FW808",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID,
- .model_id = SANYO_LE25FW808,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_res2,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {8 * 1024, 128} },
- .block_erase = spi_block_erase_d7,
- }, {
- .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_bp2_srwd,
- .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 = "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_82802ab,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = {
- {8 * 1024, 8},
- {64 * 1024, 15}
- },
- .block_erase = erase_block_82802ab,
- }, {
- .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 = {
- {1024 * 1024, 1}
- },
- .block_erase = NULL, /* 30 D0, only in A/A mux mode */
- },
- },
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_82802ab,
- .read = read_memmapped,
- .voltage = {3000, 3600},
- },
-
- {
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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 =
- {
- {
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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,
- .tested = TEST_OK_PREW,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .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,
- .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL204K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL204,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PR,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = spi_block_erase_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_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL208K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL208,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {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_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL116K/S25FL216K", /* FIXME: separate them */
- .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 = { { 2048 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 2048 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL132K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL132K,
- .total_size = 4096,
- .page_size = 256,
- /* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .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 = { { 4096 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 4096 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL164K",
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL164K,
- .total_size = 8192,
- .page_size = 256,
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .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 = { {64 * 1024, 128} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 8192 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 8192 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL127S-64kB", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .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_PREW,
- /* FIXME: we should distinguish the configuration on probing time like we do for AT45DB chips */
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of 32 so-called "parameter sectors" with
- * opcode 0x20 which may be configured to be on top or bottom of the address
- * space. Trying to access an address outside these 4kB blocks does have no
- * effect on the memory contents, e.g.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .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 = "S25FL127S-256kB", /* uniform 256kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 512,
- /* 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
- .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 = "S25FL128P......0", /* uniform 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .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 = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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_bp3_srwd,
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL128P......1", /* uniform 256kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 16384 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Spansion",
- .name = "S25FL128S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .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_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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 = "S25FL128S......1", /* uniform 256 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 512,
- /* 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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 = "S25FL129P......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 506B total, 16B reserved; 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 =
- {
- {
- /* FIXME: This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does have no
- * effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- /* FIXME: Additionally it also supports erase opcode 40h for the respective 2*4 kB pairs
- .eraseblocks = {
- {8 * 1024, 16},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_40,
- }, { */
- .eraseblocks = { { 64 * 1024, 256} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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: Configuration register */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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 = "S25FL129P......1", /* uniform 256 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL128,
- .total_size = 16384,
- .page_size = 256,
- /* OTP: 506B total, 16B 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 =
- {
- {
- .eraseblocks = { {256 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .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: Configuration register */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .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", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
- .bustype = BUS_SPI,
- .manufacture_id = SPANSION_ID,
- .model_id = SPANSION_S25FL256,
- .total_size = 32768,
- .page_size = 256,
- /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_EAR7,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- /* This chip supports erasing of the 32 so-called "parameter sectors" with
- * opcode 0x20. Trying to access an address outside these 4kB blocks does
- * have no effect on the memory contents, but sets a flag in the SR.
- .eraseblocks = {
- {4 * 1024, 32},
- {64 * 1024, 254} // inaccessible
- },
- .block_erase = spi_block_erase_20,
- }, { */
- .eraseblocks = { { 64 * 1024, 512} },
- .block_erase = spi_block_erase_dc,
- }, {
- .eraseblocks = { { 64 * 1024, 512} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { { 32768 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { { 32768 * 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},
- .wrea_override = 0x17,
- },
-
- {
.vendor = "SST",
.name = "SST25LF020A",
.bustype = BUS_SPI,
@@ -13102,11 +11973,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
- .name = "SST25VF512(A)",
+ .name = "SST25VF010(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF512_REMS,
- .total_size = 64,
+ .model_id = SST_SST25VF010_REMS,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PREW,
@@ -13115,64 +11986,64 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 2} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_d8, /* Supported by SST25VF512A only */
+ .eraseblocks = { {32 * 1024, 4} },
+ .block_erase = spi_block_erase_d8, /* Supported by SST25VF010A only */
}, {
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {64 * 1024, 1} },
- .block_erase = spi_block_erase_c7, /* Supported by SST25VF512A only */
+ .eraseblocks = { {128 * 1024, 1} },
+ .block_erase = spi_block_erase_c7, /* Supported by SST25VF010A only */
},
},
.printlock = spi_prettyprint_status_register_sst25, /* FIXME: No BP2 & 3 */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
- .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF512A only */
+ .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF010A only */
.voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST25VF010(A)",
+ .name = "SST25VF016B",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF010_REMS,
- .total_size = 128,
+ .model_id = SST_SST25VF016B,
+ .total_size = 2048,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
+ .feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rems,
+ .probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {32 * 1024, 4} },
- .block_erase = spi_block_erase_d8, /* Supported by SST25VF010A only */
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {128 * 1024, 1} },
- .block_erase = spi_block_erase_c7, /* Supported by SST25VF010A only */
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: No BP2 & 3 */
+ .printlock = spi_prettyprint_status_register_sst25vf016,
.unlock = spi_disable_blockprotect,
- .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
- .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF010A only */
+ .write = spi_aai_write,
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
@@ -13248,6 +12119,44 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
+ .name = "SST25VF032B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF032B,
+ .total_size = 4096,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_EWSR,
+ .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 */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_aai_write,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "SST",
.name = "SST25VF040",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
@@ -13356,83 +12265,51 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
- .name = "SST25WF020A",
+ .name = "SST25VF064C",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF020A,
- .total_size = 256,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF064C,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .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, 64} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .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_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
- },
-
- {
- .vendor = "SST",
- .name = "SST25WF040B",
- .bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF040B,
- .total_size = 512,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
+ .eraseblocks = { {32 * 1024, 256} },
+ .block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
+ .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
- .voltage = {1650, 1950},
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST25WF080B",
+ .name = "SST25VF080B",
.bustype = BUS_SPI,
- .manufacture_id = SANYO_ID, /* See flashchips.h */
- .model_id = SST_SST25WF080B,
+ .manufacture_id = SST_ID,
+ .model_id = SST_SST25VF080B,
.total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ .feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
@@ -13442,6 +12319,9 @@ const struct flashchip flashchips[] = {
.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,
}, {
@@ -13452,321 +12332,312 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
- .voltage = {1650, 1950},
+ .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 = "SST25VF080B",
+ .name = "SST25VF512(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF080B,
- .total_size = 1024,
+ .model_id = SST_SST25VF512_REMS,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EWSR,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_rems,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
+ .eraseblocks = { {32 * 1024, 2} },
+ .block_erase = spi_block_erase_d8, /* Supported by SST25VF512A only */
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
+ .eraseblocks = { {64 * 1024, 1} },
+ .block_erase = spi_block_erase_c7, /* Supported by SST25VF512A only */
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: No BP2 & 3 */
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
- .read = spi_chip_read,
+ .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
+ .read = spi_chip_read, /* Fast read (0x0B) supported by SST25VF512A only */
.voltage = {2700, 3600},
},
{
.vendor = "SST",
- .name = "SST25VF016B",
+ .name = "SST25WF010",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF016B,
- .total_size = 2048,
+ .model_id = SST_SST25WF010,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 4} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 128, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 128, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25vf016,
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
.write = spi_aai_write,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST25VF032B",
+ .name = "SST25WF020",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF032B,
- .total_size = 4096,
+ .model_id = SST_SST25WF020,
+ .total_size = 256,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EWSR,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 8} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 256, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 256, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
.write = spi_aai_write,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST25VF064C",
+ .name = "SST25WF020A",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25VF064C,
- .total_size = 8192,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF020A,
+ .total_size = 256,
.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 =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* TODO: check */
- .unlock = spi_disable_blockprotect,
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
.write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {2700, 3600},
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST26VF016B(A)",
+ .name = "SST25WF040",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST26VF016B,
- .total_size = 2048,
+ .model_id = SST_SST25WF040,
+ .total_size = 512,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_EITHER,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = {
- {8 * 1024, 4},
- {32 * 1024, 1},
- {64 * 1024, 30},
- {32 * 1024, 1},
- {8 * 1024, 4},
- },
+ .eraseblocks = { {32 * 1024, 16} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 512, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1024 * 512, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect_sst26_global_unprotect,
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST26VF032B(A)",
+ .name = "SST25WF040B",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST26VF032B,
- .total_size = 4096,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF040B,
+ .total_size = 512,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = {
- {8 * 1024, 4},
- {32 * 1024, 1},
- {64 * 1024, 62},
- {32 * 1024, 1},
- {8 * 1024, 4},
- },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect_sst26_global_unprotect,
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST26VF064B(A)",
+ .name = "SST25WF080",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST26VF064B,
- .total_size = 8192,
+ .model_id = SST_SST25WF080,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = {
- {8 * 1024, 4},
- {32 * 1024, 1},
- {64 * 1024, 126},
- {32 * 1024, 1},
- {8 * 1024, 4},
- },
+ .eraseblocks = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .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_plain, /* TODO: improve */
- .unlock = spi_disable_blockprotect_sst26_global_unprotect,
- .write = spi_chip_write_256, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
- .voltage = {2700, 3600},
+ .printlock = spi_prettyprint_status_register_sst25, /* *does* have a BP3 but it is useless */
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_aai_write,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST25WF512",
+ .name = "SST25WF080B",
.bustype = BUS_SPI,
- .manufacture_id = SST_ID,
- .model_id = SST_SST25WF512,
- .total_size = 64,
+ .manufacture_id = SANYO_ID, /* See flashchips.h */
+ .model_id = SST_SST25WF080B,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 16} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 2} },
- .block_erase = spi_block_erase_52,
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 64, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 64, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
- .printlock = spi_prettyprint_status_register_sst25, /* FIXME: does not have a BP3 */
+ .printlock = spi_prettyprint_status_register_bp2_tb_bpl,
.unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
.voltage = {1650, 1950},
},
{
.vendor = "SST",
- .name = "SST25WF010",
+ .name = "SST25WF512",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF010,
- .total_size = 128,
+ .model_id = SST_SST25WF512,
+ .total_size = 64,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_UNTESTED,
@@ -13775,16 +12646,16 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 16} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 4} },
+ .eraseblocks = { {32 * 1024, 2} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {1024 * 128, 1} },
+ .eraseblocks = { {1024 * 64, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 128, 1} },
+ .eraseblocks = { {1024 * 64, 1} },
.block_erase = spi_block_erase_c7,
},
},
@@ -13797,116 +12668,116 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
- .name = "SST25WF020",
+ .name = "SST26VF016B(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF020,
- .total_size = 256,
+ .model_id = SST_SST26VF016B,
+ .total_size = 2048,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
- .tested = TEST_UNTESTED,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = {
+ {8 * 1024, 4},
+ {32 * 1024, 1},
+ {64 * 1024, 30},
+ {32 * 1024, 1},
+ {8 * 1024, 4},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 256, 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_sst25, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
+ .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 = "SST25WF040",
+ .name = "SST26VF032B(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF040,
- .total_size = 512,
+ .model_id = SST_SST26VF032B,
+ .total_size = 4096,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.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} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = {
+ {8 * 1024, 4},
+ {32 * 1024, 1},
+ {64 * 1024, 62},
+ {32 * 1024, 1},
+ {8 * 1024, 4},
+ },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 512, 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, /* FIXME: does not have a BP3 */
- .unlock = spi_disable_blockprotect_bp2_srwd,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
+ .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 = "SST25WF080",
+ .name = "SST26VF064B(A)",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25WF080,
- .total_size = 1024,
+ .model_id = SST_SST26VF064B,
+ .total_size = 8192,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_EITHER,
+ .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} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = {
+ {8 * 1024, 4},
+ {32 * 1024, 1},
+ {64 * 1024, 126},
+ {32 * 1024, 1},
+ {8 * 1024, 4},
+ },
.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_sst25, /* *does* have a BP3 but it is useless */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_aai_write,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {1650, 1950},
+ .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_sst26_global_unprotect,
+ .write = spi_chip_write_256, /* Multi I/O supported */
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
},
{
@@ -13963,50 +12834,50 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
- .name = "SST29LE010",
+ .name = "SST29EE020A",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST29LE010,
- .total_size = 128,
+ .model_id = SST_SST29EE020A,
+ .total_size = 256,
.page_size = 128,
.feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PRE,
.probe = probe_jedec,
.probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
.write = write_jedec,
.read = read_memmapped,
- .voltage = {3000, 3600},
+ .voltage = {4500, 5500},
},
{
.vendor = "SST",
- .name = "SST29EE020A",
+ .name = "SST29LE010",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
- .model_id = SST_SST29EE020A,
- .total_size = 256,
+ .model_id = SST_SST29LE010,
+ .total_size = 128,
.page_size = 128,
.feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PRE,
+ .tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
.write = write_jedec,
.read = read_memmapped,
- .voltage = {4500, 5500},
+ .voltage = {3000, 3600},
},
{
@@ -14035,33 +12906,6 @@ const struct flashchip flashchips[] = {
{
.vendor = "SST",
- .name = "SST39SF512",
- .bustype = BUS_PARALLEL,
- .manufacture_id = SST_ID,
- .model_id = SST_SST39SF512,
- .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 = {4500, 5500},
- },
-
- {
- .vendor = "SST",
.name = "SST39SF010A",
.bustype = BUS_PARALLEL,
.manufacture_id = SST_ID,
@@ -14143,10 +12987,10 @@ const struct flashchip flashchips[] = {
{
.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,
@@ -14165,7 +13009,7 @@ const struct flashchip flashchips[] = {
},
.write = write_jedec_1,
.read = read_memmapped,
- .voltage = {2700, 3600},
+ .voltage = {4500, 5500},
},
{
@@ -14281,6 +13125,33 @@ const struct flashchip flashchips[] = {
{
.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 = "SST49LF002A/B",
.bustype = BUS_FWH, /* A/A Mux */
.manufacture_id = SST_ID,
@@ -15233,6 +14104,1138 @@ const struct flashchip flashchips[] = {
},
{
+ .vendor = "Sanyo",
+ .name = "LE25FU106B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU106B,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ /* FIXME: Is this correct?
+ {
+ .eraseblocks = { {2 * 1024, 64} },
+ .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_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU206",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU206,
+ .total_size = 256,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd,
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU206A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU206A,
+ .total_size = 256,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {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 = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU406B",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU406B,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FU406C/LE25U40CMC",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FU406C,
+ .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 = { {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 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B), dual read (0x3B) and dual I/O (0xBB) supported */
+ .voltage = {2300, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW106",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW106,
+ .total_size = 128,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {2 * 1024, 64} },
+ .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_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp1_srwd, /* FIXME: Add ERSER error flag. */
+ .unlock = spi_disable_blockprotect_bp1_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW203A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW203A,
+ .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,
+ }, {
+ .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. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW403A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW403A,
+ .total_size = 512,
+ .page_size = 256,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256, 2 * 1024} },
+ .block_erase = spi_block_erase_db,
+ }, {
+ .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_welwip,
+ .unlock = NULL, /* #WP pin write-protects lower 64kB. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW406A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW406A,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_plain,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW418A",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW418A,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .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_bp2_srwd,
+ .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 = "Sanyo",
+ .name = "LE25FW806",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW806,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .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_bp2_srwd,
+ .unlock = spi_disable_blockprotect, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Sanyo",
+ .name = "LE25FW808",
+ .bustype = BUS_SPI,
+ .manufacture_id = SANYO_ID,
+ .model_id = SANYO_LE25FW808,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_res2,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {8 * 1024, 128} },
+ .block_erase = spi_block_erase_d7,
+ }, {
+ .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_bp2_srwd,
+ .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 = "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_82802ab,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {8 * 1024, 8},
+ {64 * 1024, 15}
+ },
+ .block_erase = erase_block_82802ab,
+ }, {
+ .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 = {
+ {1024 * 1024, 1}
+ },
+ .block_erase = NULL, /* 30 D0, only in A/A mux mode */
+ },
+ },
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_82802ab,
+ .read = read_memmapped,
+ .voltage = {3000, 3600},
+ },
+
+ {
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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 =
+ {
+ {
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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,
+ .tested = TEST_OK_PREW,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .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,
+ .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_plain, /* TODO: improve */
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL116K/S25FL216K", /* FIXME: separate them */
+ .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 = { { 2048 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 2048 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL127S-256kB", /* uniform 256kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 512,
+ /* 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .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 = "S25FL127S-64kB", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .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_PREW,
+ /* FIXME: we should distinguish the configuration on probing time like we do for AT45DB chips */
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of 32 so-called "parameter sectors" with
+ * opcode 0x20 which may be configured to be on top or bottom of the address
+ * space. Trying to access an address outside these 4kB blocks does have no
+ * effect on the memory contents, e.g.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .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 = "S25FL128P......0", /* uniform 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .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 = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL128P......1", /* uniform 256kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 16384 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd,
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL128S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .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_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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 = "S25FL128S......1", /* uniform 256 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 512,
+ /* 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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 = "S25FL129P......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 506B total, 16B reserved; 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 =
+ {
+ {
+ /* FIXME: This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does have no
+ * effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ /* FIXME: Additionally it also supports erase opcode 40h for the respective 2*4 kB pairs
+ .eraseblocks = {
+ {8 * 1024, 16},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_40,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 256} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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: Configuration register */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .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 = "S25FL129P......1", /* uniform 256 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL128,
+ .total_size = 16384,
+ .page_size = 256,
+ /* OTP: 506B total, 16B 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 =
+ {
+ {
+ .eraseblocks = { {256 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .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: Configuration register */
+ .unlock = spi_disable_blockprotect_bp2_srwd,
+ .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 = "S25FL132K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL132K,
+ .total_size = 4096,
+ .page_size = 256,
+ /* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
+ .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 = { { 4096 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 4096 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL164K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL164K,
+ .total_size = 8192,
+ .page_size = 256,
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .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 = { {64 * 1024, 128} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 8192 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 8192 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ }
+ },
+ .printlock = spi_prettyprint_status_register_bp2_srwd, /* TODO: improve */
+ .unlock = spi_disable_blockprotect_bp2_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL204K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL204,
+ .total_size = 512,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PR,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_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_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL208K",
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL208,
+ .total_size = 1024,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 256} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {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_bp3_srwd,
+ .unlock = spi_disable_blockprotect_bp3_srwd, /* #WP pin write-protects SRWP bit. */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) and dual I/O (0x3B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Spansion",
+ .name = "S25FL256S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
+ .bustype = BUS_SPI,
+ .manufacture_id = SPANSION_ID,
+ .model_id = SPANSION_S25FL256,
+ .total_size = 32768,
+ .page_size = 256,
+ /* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_EAR7,
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ /* This chip supports erasing of the 32 so-called "parameter sectors" with
+ * opcode 0x20. Trying to access an address outside these 4kB blocks does
+ * have no effect on the memory contents, but sets a flag in the SR.
+ .eraseblocks = {
+ {4 * 1024, 32},
+ {64 * 1024, 254} // inaccessible
+ },
+ .block_erase = spi_block_erase_20,
+ }, { */
+ .eraseblocks = { { 64 * 1024, 512} },
+ .block_erase = spi_block_erase_dc,
+ }, {
+ .eraseblocks = { { 64 * 1024, 512} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { { 32768 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { { 32768 * 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},
+ .wrea_override = 0x17,
+ },
+
+ {
.vendor = "SyncMOS/MoselVitelic",
.name = "{F,S,V}29C51001B",
.bustype = BUS_PARALLEL,
@@ -15511,53 +15514,122 @@ const struct flashchip flashchips[] = {
},
{
+ .vendor = "Unknown",
+ .name = "SFDP-capable chip",
+ .bustype = BUS_SPI,
+ .manufacture_id = GENERIC_MANUF_ID,
+ .model_id = SFDP_DEVICE_ID,
+ .total_size = 0, /* set by probing function */
+ .page_size = 0, /* set by probing function */
+ .feature_bits = 0, /* set by probing function */
+ /* We present our own "report this" text hence we do not */
+ /* want the default "This flash part has status UNTESTED..." */
+ /* text to be printed. */
+ .tested = TEST_OK_PREW,
+ .probe = probe_spi_sfdp,
+ .block_erasers = {}, /* set by probing function */
+ .unlock = spi_disable_blockprotect, /* is this safe? */
+ .write = NULL, /* set by probing function */
+ .read = spi_chip_read,
+ /* FIXME: some vendor extensions define this */
+ .voltage = {0},
+ },
+
+ {
.vendor = "Winbond",
- .name = "W25Q40.V",
+ .name = "W25P16",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q40_V,
- .total_size = 512,
+ .model_id = WINBOND_NEX_W25P16,
+ .total_size = 2048,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 756B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {32 * 1024, 16} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = spi_block_erase_60,
+ .eraseblocks = { {2048 * 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, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25P32",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25P32,
+ .total_size = 4096,
+ .page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 64} },
+ .block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {4096 * 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, /* Multi I/O supported */
- .read = spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
+ .write = spi_chip_write_256,
+ .read = spi_chip_read, /* Fast read (0x0B) supported */
.voltage = {2700, 3600},
},
{
.vendor = "Winbond",
- .name = "W25Q80.V",
+ .name = "W25P80",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80_V,
+ .model_id = WINBOND_NEX_W25P80,
.total_size = 1024,
.page_size = 256,
+ .feature_bits = FEATURE_WRSR_WREN,
+ .tested = TEST_UNTESTED,
+ .probe = probe_spi_rdid,
+ .probe_timing = TIMING_ZERO,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {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, /* Fast read (0x0B) supported */
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W25Q128.V",
+ .bustype = BUS_SPI,
+ .manufacture_id = WINBOND_NEX_ID,
+ .model_id = WINBOND_NEX_W25Q128_V,
+ .total_size = 16384,
+ .page_size = 256,
/* supports SFDP */
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
@@ -15567,19 +15639,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 32} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15592,38 +15664,35 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q16.V",
+ .name = "W25Q128.V..M",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q16_V,
- .total_size = 2048,
+ .model_id = WINBOND_NEX_W25Q128_V_M,
+ .total_size = 16384,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 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,
@@ -15632,34 +15701,34 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q32.V",
+ .name = "W25Q128.W",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q32_V,
- .total_size = 4096,
+ .model_id = WINBOND_NEX_W25Q128_W,
+ .total_size = 16384,
.page_size = 256,
/* supports SFDP */
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 4096} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 512} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 256} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {16 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15667,16 +15736,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
+ .voltage = {1650, 1950},
},
{
.vendor = "Winbond",
- .name = "W25Q64.V",
+ .name = "W25Q16.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q64_V,
- .total_size = 8192,
+ .model_id = WINBOND_NEX_W25Q16_V,
+ .total_size = 2048,
.page_size = 256,
/* supports SFDP */
/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
@@ -15687,19 +15756,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15712,34 +15781,34 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q128.V",
+ .name = "W25Q16.W",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q128_V,
- .total_size = 16384,
+ .model_id = WINBOND_NEX_W25Q16_W,
+ .total_size = 2048,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* QPI enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 64} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15747,44 +15816,46 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
.vendor = "Winbond",
- .name = "W25Q128.V..M",
+ .name = "W25Q20.W",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q128_V_M,
- .total_size = 16384,
+ .model_id = WINBOND_NEX_W25Q20_W,
+ .total_size = 256,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_OK_PREW,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 8} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {256 * 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},
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
@@ -15878,33 +15949,34 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q20.W",
+ .name = "W25Q32.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q20_W,
- .total_size = 256,
+ .model_id = WINBOND_NEX_W25Q32_V,
+ .total_size = 4096,
.page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15912,38 +15984,39 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
},
{
.vendor = "Winbond",
- .name = "W25Q40BW",
+ .name = "W25Q32.W",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q40BW,
- .total_size = 512,
+ .model_id = WINBOND_NEX_W25Q32_W,
+ .total_size = 4096,
.page_size = 256,
/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
+ /* QPI enable 0x38, disable 0xFF */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
.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 = { {512 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -15956,13 +16029,14 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q80BW",
+ .name = "W25Q40.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80BW,
- .total_size = 1024,
+ .model_id = WINBOND_NEX_W25Q40_V,
+ .total_size = 512,
.page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* supports SFDP */
+ /* OTP: 756B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
@@ -15970,40 +16044,40 @@ const struct flashchip flashchips[] = {
.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} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 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 = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .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 = "Winbond",
- .name = "W25Q40EW",
+ .name = "W25Q40BW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q40EW,
+ .model_id = WINBOND_NEX_W25Q40BW,
.total_size = 512,
.page_size = 256,
- /* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -16029,38 +16103,38 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
.vendor = "Winbond",
- .name = "W25Q80EW",
+ .name = "W25Q40EW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q80EW,
- .total_size = 1024,
+ .model_id = WINBOND_NEX_W25Q40EW,
+ .total_size = 512,
.page_size = 256,
/* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.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} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16073,34 +16147,34 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q16.W",
+ .name = "W25Q64.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q16_W,
- .total_size = 2048,
+ .model_id = WINBOND_NEX_W25Q64_V,
+ .total_size = 8192,
.page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- /* QPI enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
- .tested = TEST_UNTESTED,
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .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} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16108,16 +16182,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
},
{
.vendor = "Winbond",
- .name = "W25Q32.W",
+ .name = "W25Q64.W",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q32_W,
- .total_size = 4096,
+ .model_id = WINBOND_NEX_W25Q64_W,
+ .total_size = 8192,
.page_size = 256,
/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
/* QPI enable 0x38, disable 0xFF */
@@ -16128,19 +16202,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 2048} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
+ .eraseblocks = { {32 * 1024, 256} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16153,34 +16227,34 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25Q64.W",
+ .name = "W25Q80.V",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q64_W,
- .total_size = 8192,
+ .model_id = WINBOND_NEX_W25Q80_V,
+ .total_size = 1024,
.page_size = 256,
- /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- /* QPI enable 0x38, disable 0xFF */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ /* supports SFDP */
+ /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 2048} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 256} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .eraseblocks = { {1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16188,39 +16262,38 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
+ .voltage = {2700, 3600},
},
{
.vendor = "Winbond",
- .name = "W25Q128.W",
+ .name = "W25Q80BW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25Q128_W,
- .total_size = 16384,
+ .model_id = WINBOND_NEX_W25Q80BW,
+ .total_size = 1024,
.page_size = 256,
- /* supports SFDP */
- /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
+ /* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 4096} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 512} },
+ .eraseblocks = { {32 * 1024, 32} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 256} },
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {16 * 1024 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16228,31 +16301,38 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {1650, 1950},
+ .voltage = {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
.vendor = "Winbond",
- .name = "W25X10",
+ .name = "W25Q80EW",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X10,
- .total_size = 128,
+ .model_id = WINBOND_NEX_W25Q80EW,
+ .total_size = 1024,
.page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
+ /* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
+ .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 32} },
+ .eraseblocks = { {4 * 1024, 256} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 2} },
+ .eraseblocks = { {32 * 1024, 32} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {1 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16260,16 +16340,16 @@ const struct flashchip flashchips[] = {
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
- .voltage = {2700, 3600},
+ .voltage = {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
},
{
.vendor = "Winbond",
- .name = "W25X20",
+ .name = "W25X10",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X20,
- .total_size = 256,
+ .model_id = WINBOND_NEX_W25X10,
+ .total_size = 128,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -16278,13 +16358,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 64} },
+ .eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 4} },
+ .eraseblocks = { {64 * 1024, 2} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16297,11 +16377,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25X40",
+ .name = "W25X16",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X40,
- .total_size = 512,
+ .model_id = WINBOND_NEX_W25X16,
+ .total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -16310,13 +16390,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 128} },
+ .eraseblocks = { {4 * 1024, 512} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 8} },
+ .eraseblocks = { {32 * 1024, 64} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16329,11 +16415,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25X80",
+ .name = "W25X20",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X80,
- .total_size = 1024,
+ .model_id = WINBOND_NEX_W25X20,
+ .total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -16342,13 +16428,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 256} },
+ .eraseblocks = { {4 * 1024, 64} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {64 * 1024, 16} },
+ .eraseblocks = { {64 * 1024, 4} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {1024 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16361,11 +16447,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25X16",
+ .name = "W25X32",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X16,
- .total_size = 2048,
+ .model_id = WINBOND_NEX_W25X32,
+ .total_size = 4096,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -16374,19 +16460,19 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 512} },
+ .eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 64} },
+ .eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
- .eraseblocks = { {64 * 1024, 32} },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
- .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16399,11 +16485,11 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25X32",
+ .name = "W25X40",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25X32,
- .total_size = 4096,
+ .model_id = WINBOND_NEX_W25X40,
+ .total_size = 512,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
@@ -16412,19 +16498,13 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {4 * 1024, 1024} },
+ .eraseblocks = { {4 * 1024, 128} },
.block_erase = spi_block_erase_20,
}, {
- .eraseblocks = { {32 * 1024, 128} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = { {64 * 1024, 8} },
.block_erase = spi_block_erase_d8,
}, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {4 * 1024 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = spi_block_erase_c7,
}
},
@@ -16475,19 +16555,22 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W25P80",
+ .name = "W25X80",
.bustype = BUS_SPI,
.manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P80,
+ .model_id = WINBOND_NEX_W25X80,
.total_size = 1024,
.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 = { {64 * 1024, 16} },
.block_erase = spi_block_erase_d8,
}, {
@@ -16498,90 +16581,32 @@ const struct flashchip flashchips[] = {
.printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
.unlock = spi_disable_blockprotect,
.write = spi_chip_write_256,
- .read = spi_chip_read, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25P16",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P16,
- .total_size = 2048,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 32} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {2048 * 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, /* Fast read (0x0B) supported */
- .voltage = {2700, 3600},
- },
-
- {
- .vendor = "Winbond",
- .name = "W25P32",
- .bustype = BUS_SPI,
- .manufacture_id = WINBOND_NEX_ID,
- .model_id = WINBOND_NEX_W25P32,
- .total_size = 4096,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 64} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {4096 * 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, /* Fast read (0x0B) supported */
+ .read = spi_chip_read,
.voltage = {2700, 3600},
},
+ /* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
{
.vendor = "Winbond",
- .name = "W29C512A/W29EE512",
+ .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C512A,
- .total_size = 64,
+ .model_id = WINBOND_W29C010,
+ .total_size = 128,
.page_size = 128,
.feature_bits = FEATURE_LONG_RESET,
.tested = TEST_OK_PREW,
.probe = probe_jedec,
- .probe_timing = 10,
+ .probe_timing = 10, /* used datasheet for the W29C011A */
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 1} },
+ .eraseblocks = { {128 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
.write = write_jedec,
.read = read_memmapped,
- .voltage = {4500, 5500},
},
{
@@ -16607,46 +16632,46 @@ const struct flashchip flashchips[] = {
.read = read_memmapped,
},
- /* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
{
.vendor = "Winbond",
- .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
+ .name = "W29C020(C)/W29C022",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C010,
- .total_size = 128,
+ .model_id = WINBOND_W29C020,
+ .total_size = 256,
.page_size = 128,
.feature_bits = FEATURE_LONG_RESET,
.tested = TEST_OK_PREW,
.probe = probe_jedec,
- .probe_timing = 10, /* used datasheet for the W29C011A */
+ .probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {128 * 1024, 1} },
+ .eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
.write = write_jedec,
.read = read_memmapped,
+ .voltage = {4500, 5500},
},
{
.vendor = "Winbond",
- .name = "W29C020(C)/W29C022",
+ .name = "W29C040/P",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C020,
- .total_size = 256,
- .page_size = 128,
+ .model_id = WINBOND_W29C040,
+ .total_size = 512,
+ .page_size = 256,
.feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_OK_PREW,
+ .tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {256 * 1024, 1} },
+ .eraseblocks = { {512 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
@@ -16657,20 +16682,20 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W29C040/P",
+ .name = "W29C512A/W29EE512",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W29C040,
- .total_size = 512,
- .page_size = 256,
+ .model_id = WINBOND_W29C512A,
+ .total_size = 64,
+ .page_size = 128,
.feature_bits = FEATURE_LONG_RESET,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_jedec,
.probe_timing = 10,
.block_erasers =
{
{
- .eraseblocks = { {512 * 1024, 1} },
+ .eraseblocks = { {64 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
},
@@ -16711,10 +16736,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W29GL032CT",
+ .name = "W29GL032CH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL032CT,
+ .model_id = WINBOND_W29GL032CHL,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -16724,10 +16749,7 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 63},
- {8 * 1024, 8},
- },
+ .eraseblocks = { {64 * 1024, 64} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
@@ -16741,10 +16763,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W29GL032CH/L",
+ .name = "W29GL032CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL032CHL,
+ .model_id = WINBOND_W29GL032CT,
.total_size = 4096,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -16754,7 +16776,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 64} },
+ .eraseblocks = {
+ {64 * 1024, 63},
+ {8 * 1024, 8},
+ },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
@@ -16798,10 +16823,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W29GL064CT",
+ .name = "W29GL064CH/L",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL064CT,
+ .model_id = WINBOND_W29GL064CHL,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -16811,10 +16836,7 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = {
- {64 * 1024, 127},
- {8 * 1024, 8},
- },
+ .eraseblocks = { {64 * 1024, 128} },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
@@ -16828,10 +16850,10 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
- .name = "W29GL064CH/L",
+ .name = "W29GL064CT",
.bustype = BUS_PARALLEL,
.manufacture_id = AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
- .model_id = WINBOND_W29GL064CHL,
+ .model_id = WINBOND_W29GL064CT,
.total_size = 8192,
.page_size = 128 * 1024, /* actual page size is 16 */
.feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
@@ -16841,7 +16863,10 @@ const struct flashchip flashchips[] = {
.block_erasers =
{
{
- .eraseblocks = { {64 * 1024, 128} },
+ .eraseblocks = {
+ {64 * 1024, 127},
+ {8 * 1024, 8},
+ },
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {8 * 1024 * 1024, 1} },
@@ -17201,6 +17226,63 @@ const struct flashchip flashchips[] = {
{
.vendor = "Winbond",
+ .name = "W39V080FA",
+ .bustype = BUS_FWH,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W39V080FA,
+ .total_size = 1024,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+ .tested = TEST_OK_PREW,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 16} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_w39v080fa,
+ .unlock = unlock_regspace2_uniform_64k,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* Also has 12V fast program */
+ },
+
+ {
+ .vendor = "Winbond",
+ .name = "W39V080FA (dual mode)",
+ .bustype = BUS_FWH,
+ .manufacture_id = WINBOND_ID,
+ .model_id = WINBOND_W39V080FA_DM,
+ .total_size = 512,
+ .page_size = 64 * 1024,
+ .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = 10,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = erase_sector_jedec,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ }
+ },
+ .printlock = printlock_w39v080fa_dual,
+ .write = write_jedec_1,
+ .read = read_memmapped,
+ .voltage = {3000, 3600}, /* Also has 12V fast program */
+ },
+
+ {
+ .vendor = "Winbond",
.name = "W49F002U/N",
.bustype = BUS_PARALLEL,
.manufacture_id = WINBOND_ID,
@@ -17320,63 +17402,6 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Winbond",
- .name = "W39V080FA",
- .bustype = BUS_FWH,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W39V080FA,
- .total_size = 1024,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_OK_PREW,
- .probe = probe_jedec,
- .probe_timing = 10,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_w39v080fa,
- .unlock = unlock_regspace2_uniform_64k,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600}, /* Also has 12V fast program */
- },
-
- {
- .vendor = "Winbond",
- .name = "W39V080FA (dual mode)",
- .bustype = BUS_FWH,
- .manufacture_id = WINBOND_ID,
- .model_id = WINBOND_W39V080FA_DM,
- .total_size = 512,
- .page_size = 64 * 1024,
- .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
- .tested = TEST_UNTESTED,
- .probe = probe_jedec,
- .probe_timing = 10,
- .block_erasers =
- {
- {
- .eraseblocks = { {64 * 1024, 8} },
- .block_erase = erase_sector_jedec,
- }, {
- .eraseblocks = { {512 * 1024, 1} },
- .block_erase = erase_chip_block_jedec,
- }
- },
- .printlock = printlock_w39v080fa_dual,
- .write = write_jedec_1,
- .read = read_memmapped,
- .voltage = {3000, 3600}, /* Also has 12V fast program */
- },
-
- {
.vendor = "Zetta Device",
.name = "ZD25D20",
.bustype = BUS_SPI,
@@ -17453,28 +17478,6 @@ const struct flashchip flashchips[] = {
},
{
- .vendor = "Unknown",
- .name = "SFDP-capable chip",
- .bustype = BUS_SPI,
- .manufacture_id = GENERIC_MANUF_ID,
- .model_id = SFDP_DEVICE_ID,
- .total_size = 0, /* set by probing function */
- .page_size = 0, /* set by probing function */
- .feature_bits = 0, /* set by probing function */
- /* We present our own "report this" text hence we do not */
- /* want the default "This flash part has status UNTESTED..." */
- /* text to be printed. */
- .tested = TEST_OK_PREW,
- .probe = probe_spi_sfdp,
- .block_erasers = {}, /* set by probing function */
- .unlock = spi_disable_blockprotect, /* is this safe? */
- .write = NULL, /* set by probing function */
- .read = spi_chip_read,
- /* FIXME: some vendor extensions define this */
- .voltage = {0},
- },
-
- {
.vendor = "Programmer",
.name = "Opaque flash chip",
.bustype = BUS_PROG,