aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--flashchips.c116
-rw-r--r--flashchips.h4
2 files changed, 97 insertions, 23 deletions
diff --git a/flashchips.c b/flashchips.c
index b876d51b..c8d51bff 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -44,6 +44,11 @@ struct flashchip flashchips[] = {
* .probe = Probe function
* .probe_timing = Probe function delay
* .erase = Chip erase function
+ * .block_erasers[] = Array of erase layouts and erase functions
+ * {
+ * .eraseblocks[] = Array of { blocksize, blockcount }
+ * .block_erase = Block erase function
+ * }
* .write = Chip write function
* .read = Chip read function
*/
@@ -1235,20 +1240,16 @@ struct flashchip flashchips[] = {
{
.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,
},
@@ -1274,16 +1275,13 @@ struct flashchip flashchips[] = {
{
.eraseblocks = { {4 * 1024, 32} },
.block_erase = spi_block_erase_20,
- },
- {
+ }, {
.eraseblocks = { {64 * 1024, 2} },
.block_erase = spi_block_erase_d8,
- },
- {
+ }, {
.eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_60,
- },
- {
+ }, {
.eraseblocks = { {128 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
@@ -1303,7 +1301,26 @@ struct flashchip flashchips[] = {
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .erase = spi_chip_erase_60_c7,
+ .erase = NULL,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 64} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 4} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {256 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
.write = spi_chip_write_256,
.read = spi_chip_read,
},
@@ -1316,10 +1333,29 @@ struct flashchip flashchips[] = {
.model_id = MX_25L4005,
.total_size = 512,
.page_size = 256,
- .tested = TEST_OK_PREW,
+ .tested = TEST_OK_PRW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .erase = spi_chip_erase_60_c7,
+ .erase = NULL,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 128} },
+ .block_erase = spi_block_erase_20,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 8} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {512 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
.write = spi_chip_write_256,
.read = spi_chip_read,
},
@@ -1332,10 +1368,29 @@ struct flashchip flashchips[] = {
.model_id = MX_25L8005,
.total_size = 1024,
.page_size = 256,
- .tested = TEST_OK_PREW,
+ .tested = TEST_OK_PRW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .erase = spi_chip_erase_60_c7,
+ .erase = NULL,
+ .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,
+ },
+ },
.write = spi_chip_write_256,
.read = spi_chip_read,
},
@@ -1348,10 +1403,29 @@ struct flashchip flashchips[] = {
.model_id = MX_25L1605,
.total_size = 2048,
.page_size = 256,
- .tested = TEST_OK_PREW,
+ .tested = TEST_OK_PRW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
- .erase = spi_chip_erase_60_c7,
+ .erase = NULL,
+ .block_erasers =
+ {
+ {
+ .eraseblocks = { {4 * 1024, 512} },
+ .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
+ }, {
+ .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
+ .block_erase = spi_block_erase_52,
+ }, {
+ .eraseblocks = { {64 * 1024, 32} },
+ .block_erase = spi_block_erase_d8,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_60,
+ }, {
+ .eraseblocks = { {2 * 1024 * 1024, 1} },
+ .block_erase = spi_block_erase_c7,
+ },
+ },
.write = spi_chip_write_256,
.read = spi_chip_read,
},
diff --git a/flashchips.h b/flashchips.h
index 40edbbba..81ce2504 100644
--- a/flashchips.h
+++ b/flashchips.h
@@ -251,11 +251,11 @@
* and use the same set of IDs.
*/
#define MX_ID 0xC2 /* Macronix (MX) */
-#define MX_25L512 0x2010 /* 2^19 kbit or 2^16 kByte */
+#define MX_25L512 0x2010 /* Same as MX25V512 */
#define MX_25L1005 0x2011
#define MX_25L2005 0x2012
#define MX_25L4005 0x2013 /* MX25L4005{,A} */
-#define MX_25L8005 0x2014
+#define MX_25L8005 0x2014 /* Same as MX25V8005 */
#define MX_25L1605 0x2015 /* MX25L1605{,A,D} */
#define MX_25L3205 0x2016 /* MX25L3205{,A} */
#define MX_25L6405 0x2017 /* MX25L3205{,D} */