diff options
-rw-r--r-- | flashchips.c | 116 | ||||
-rw-r--r-- | flashchips.h | 4 |
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} */ |