Author: snelson Date: 2010-01-29 00:55:12 +0100 (Fri, 29 Jan 2010) New Revision: 886
Modified: trunk/Makefile trunk/flash.h trunk/flashchips.c trunk/jedec.c Log: Complete the addition of Feature Bits for all Jedec based chips. Add FEATURE_SHORT_RESET, FEATURE_LONG_RESET, and FEATURE_EITHER_RESET rewrite jedec functions to use getaddrmask
convert write_49f002 to write_jedec_1 convert write_w39v040c to write_jedec_1 convert probe_w39v040c to probe_jedec convert write_49lf040 to write_jedec_1 convert write_pm29f002 to write_jedec convert write_29f040b to write_jedec_1 convert probe_29f040b to probe_jedec convert erase_chip_29f040b to erase_chip_block_jedec convert erase_sector_29f040b to erase_sector_jedec convert write_m29f002b to write_jedec convert write_m29f002t to write_jedec convert *_29f002 to *_jedec
decouple unused files from Makefile: am29f040b.c en29f002a.c m29f002.c mx29f002.c pm29f002.c sst49lf040.c w39v040c.c w49f002u.c
Signed-off-by: Sean Nelson audiohacked@gmail.com Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Anders Juel Jensen andersjjensen@gmail.com
Modified: trunk/Makefile =================================================================== --- trunk/Makefile 2010-01-28 19:02:36 UTC (rev 885) +++ trunk/Makefile 2010-01-28 23:55:12 UTC (rev 886) @@ -42,8 +42,7 @@ endif
CHIP_OBJS = jedec.o stm50flw0x0x.o w39v080fa.o sharplhf00l04.o w29ee011.o \ - sst28sf040.o am29f040b.o mx29f002.o m29f400bt.o pm29f002.o w39v040c.o \ - w49f002u.o 82802ab.o pm49fl00x.o sst49lf040.o en29f002a.o m29f002.o \ + sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o
LIB_OBJS = layout.o
Modified: trunk/flash.h =================================================================== --- trunk/flash.h 2010-01-28 19:02:36 UTC (rev 885) +++ trunk/flash.h 2010-01-28 23:55:12 UTC (rev 886) @@ -154,8 +154,14 @@
#define FEATURE_REGISTERMAP (1 << 0) #define FEATURE_BYTEWRITES (1 << 1) +#define FEATURE_LONG_RESET (0 << 4) +#define FEATURE_SHORT_RESET (1 << 4) +#define FEATURE_EITHER_RESET FEATURE_LONG_RESET #define FEATURE_ADDR_FULL (0 << 2) #define FEATURE_ADDR_MASK (3 << 2) +#define FEATURE_ADDR_2AA (1 << 2) +#define FEATURE_ADDR_AAA (2 << 2) +#define FEATURE_ADDR_SHIFTED 0
struct flashchip { const char *vendor;
Modified: trunk/flashchips.c =================================================================== --- trunk/flashchips.c 2010-01-28 19:02:36 UTC (rev 885) +++ trunk/flashchips.c 2010-01-28 23:55:12 UTC (rev 886) @@ -62,21 +62,22 @@ .model_id = AM_29F010B, /* Same as Am29F010A */ .total_size = 128, .page_size = 16 * 1024, - .tested = TEST_OK_PRW, - .probe = probe_29f040b, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_ZERO, .erase = NULL, .block_erasers = { { .eraseblocks = { {16 * 1024, 8} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_pm29f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -88,6 +89,7 @@ .model_id = AM_29F002BB, .total_size = 256, .page_size = 256, + .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, @@ -119,7 +121,8 @@ .model_id = AM_29F002BT, .total_size = 256, .page_size = 256, - .tested = TEST_OK_PR, + .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, .erase = NULL, @@ -150,21 +153,22 @@ .model_id = AM_29F016D, .total_size = 2 * 1024, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f040b, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 32} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {2048 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -176,21 +180,22 @@ .model_id = AM_29F040B, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, - .probe = probe_29f040b, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -202,6 +207,7 @@ .model_id = AM_29F080B, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, @@ -210,13 +216,13 @@ { { .eraseblocks = { {64 * 1024, 16} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -228,21 +234,22 @@ .model_id = AM_29LV040B, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f040b, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -254,21 +261,22 @@ .model_id = AM_29LV080B, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f040b, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 16} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {1024 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -280,6 +288,7 @@ .model_id = ASD_AE49F2008, .total_size = 256, .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_FIXME, @@ -841,7 +850,8 @@ .model_id = AT_29C512, .total_size = 64, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10000, /* 10mS, Enter=Exec */ .erase = NULL, @@ -865,7 +875,8 @@ .model_id = AT_29C010A, .total_size = 128, .page_size = 128, - .tested = TEST_OK_PR, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10000, /* 10mS, Enter=Exec */ .erase = NULL, @@ -888,7 +899,8 @@ .model_id = AT_29C020, .total_size = 256, .page_size = 256, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10000, /* 10ms */ .erase = NULL, @@ -911,6 +923,7 @@ .model_id = AT_29C040A, .total_size = 512, .page_size = 256, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10000, /* 10 ms */ @@ -1078,7 +1091,8 @@ .model_id = AT_49BV512, .total_size = 64, .page_size = 64, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -1089,7 +1103,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -1101,6 +1115,7 @@ .model_id = AT_49F002N, .total_size = 256, .page_size = 256, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -1120,7 +1135,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -1132,7 +1147,8 @@ .model_id = AT_49F002NT, .total_size = 256, .page_size = 256, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -1151,7 +1167,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -1229,8 +1245,9 @@ .model_id = AMIC_A29002B, .total_size = 256, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f002, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -1242,10 +1259,10 @@ {32 * 1024, 1}, {64 * 1024, 3}, }, - .block_erase = erase_sector_29f002, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, @@ -1260,8 +1277,9 @@ .model_id = AMIC_A29002T, .total_size = 256, .page_size = 64 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f002, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -1273,10 +1291,10 @@ {8 * 1024, 2}, {16 * 1024, 1}, }, - .block_erase = erase_sector_29f002, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, @@ -1291,21 +1309,22 @@ .model_id = AMIC_A29040B, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f040b, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 8} }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -1317,8 +1336,8 @@ .model_id = AMIC_A49LF040A, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .erase = NULL, @@ -1344,6 +1363,7 @@ .model_id = EMST_F49B002UA, .total_size = 256, .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -1363,7 +1383,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -2151,6 +2171,7 @@ .model_id = EN_29F002B, .total_size = 256, .page_size = 256, + .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -2182,7 +2203,8 @@ .model_id = EN_29F002T, .total_size = 256, .page_size = 256, - .tested = TEST_OK_PR, + .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -2213,6 +2235,7 @@ .model_id = MBM29F004BC, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -2226,10 +2249,10 @@ {32 * 1024, 1}, {64 * 1024, 7}, }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, .write = NULL, @@ -2244,6 +2267,7 @@ .model_id = MBM29F004TC, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -2257,10 +2281,10 @@ {8 * 1024, 2}, {16 * 1024, 1}, }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, .write = NULL, @@ -2268,6 +2292,7 @@ },
{ + /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */ .vendor = "Fujitsu", .name = "MBM29F400BC", .bustype = CHIP_BUSTYPE_PARALLEL, @@ -2275,6 +2300,7 @@ .model_id = MBM29F400BC, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */ @@ -2306,6 +2332,7 @@ .model_id = MBM29F400TC, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */ @@ -2337,6 +2364,7 @@ .model_id = P28F001BXB, .total_size = 128, .page_size = 128 * 1024, /* 8k + 2x4k + 112k */ + .feature_bits = 0, .tested = TEST_BAD_WRITE, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -2364,7 +2392,8 @@ .model_id = P28F001BXT, .total_size = 128, .page_size = 128 * 1024, /* 112k + 2x4k + 8k */ - .tested = TEST_OK_PR|TEST_BAD_WRITE, + .feature_bits = 0, + .tested = TEST_BAD_WRITE, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -2391,6 +2420,7 @@ .model_id = I_82802AB, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */ @@ -2414,6 +2444,7 @@ .model_id = I_82802AC, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */ @@ -2804,8 +2835,9 @@ .model_id = MX_29F001B, .total_size = 128, .page_size = 32 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f002, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -2818,10 +2850,10 @@ {32 * 1024, 1}, {64 * 1024, 1}, }, - .block_erase = erase_sector_29f002, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, @@ -2836,8 +2868,9 @@ .model_id = MX_29F001T, .total_size = 128, .page_size = 32 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f002, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -2850,10 +2883,10 @@ {4 * 1024, 2}, {8 * 1024, 1}, }, - .block_erase = erase_sector_29f002, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, } }, .write = write_jedec_1, @@ -2868,8 +2901,9 @@ .model_id = MX_29F002B, .total_size = 256, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f002, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -2881,10 +2915,10 @@ {32 * 1024, 1}, {64 * 1024, 3}, }, - .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */ + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, @@ -2899,8 +2933,9 @@ .model_id = MX_29F002T, .total_size = 256, .page_size = 64 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f002, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = @@ -2912,10 +2947,10 @@ {8 * 1024, 2}, {16 * 1024, 1}, }, - .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */ + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, @@ -2930,18 +2965,19 @@ .model_id = MX_29LV040, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PR, - .probe = probe_29f002, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, - .block_erase = erase_sector_29f002, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f002, + .block_erase = erase_chip_block_jedec, }, }, .write = write_jedec_1, @@ -3287,8 +3323,9 @@ .model_id = PMC_29F002T, .total_size = 256, .page_size = 8 * 1024, - .tested = TEST_OK_PRW, - .probe = probe_29f040b, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -3300,13 +3337,13 @@ {8 * 1024, 2}, {16 * 1024, 1}, }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_pm29f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3318,8 +3355,9 @@ .model_id = PMC_29F002B, .total_size = 256, .page_size = 8 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, - .probe = probe_29f040b, + .probe = probe_jedec, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -3331,13 +3369,13 @@ {96 * 1024, 1}, {128 * 1024, 1}, }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {256 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, }, }, - .write = write_pm29f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3349,7 +3387,8 @@ .model_id = PMC_39F010, .total_size = 128, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -3366,20 +3405,20 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
{ .vendor = "PMC", .name = "Pm49FL002", - .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/ + .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/ .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL002, .total_size = 256, .page_size = 16 * 1024, - .feature_bits = FEATURE_REGISTERMAP, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .erase = NULL, /* Was: erase_49fl00x */ @@ -3403,13 +3442,13 @@ { .vendor = "PMC", .name = "Pm49FL004", - .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/ + .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/ .manufacture_id = PMC_ID_NOPREFIX, .model_id = PMC_49FL004, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */ .erase = NULL, /* Was: erase_49fl00x */ @@ -3464,6 +3503,7 @@ .model_id = SHARP_LHF00L04, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .probe_timing = TIMING_ZERO, @@ -3751,6 +3791,7 @@ .model_id = SST_28SF040, .total_size = 512, .page_size = 256, + .feature_bits = 0, .tested = TEST_UNTESTED, .probe = probe_28sf040, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */ @@ -3777,7 +3818,8 @@ .model_id = SST_29EE010, .total_size = 128, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -3800,6 +3842,7 @@ .model_id = SST_29LE010, .total_size = 128, .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, @@ -3823,7 +3866,8 @@ .model_id = SST_29EE020A, .total_size = 256, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -3846,6 +3890,7 @@ .model_id = SST_29LE020, .total_size = 256, .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, @@ -3869,7 +3914,8 @@ .model_id = SST_39SF512, .total_size = 64, .page_size = 4096, - .tested = TEST_OK_PREW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -3883,7 +3929,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3895,7 +3941,8 @@ .model_id = SST_39SF010, .total_size = 128, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -3909,7 +3956,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3921,7 +3968,8 @@ .model_id = SST_39SF020, .total_size = 256, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -3935,7 +3983,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3947,7 +3995,8 @@ .model_id = SST_39SF040, .total_size = 512, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -3961,7 +4010,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3973,7 +4022,8 @@ .model_id = SST_39VF512, .total_size = 64, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns*/ .erase = NULL, @@ -3987,7 +4037,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -3999,7 +4049,8 @@ .model_id = SST_39VF010, .total_size = 128, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4013,7 +4064,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4025,7 +4076,8 @@ .model_id = SST_39VF020, .total_size = 256, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4039,7 +4091,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4051,7 +4103,8 @@ .model_id = SST_39VF040, .total_size = 512, .page_size = 4096, - .tested = TEST_OK_PROBE, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4065,7 +4118,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4077,6 +4130,7 @@ .model_id = SST_39VF080, .total_size = 1024, .page_size = 4096, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ @@ -4094,7 +4148,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4106,7 +4160,7 @@ .model_id = SST_49LF002A, .total_size = 256, .page_size = 16 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PRW, .probe = probe_sst_fwhub, .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */ @@ -4136,7 +4190,7 @@ .model_id = SST_49LF003A, .total_size = 384, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PR, .probe = probe_sst_fwhub, .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */ @@ -4169,7 +4223,7 @@ .model_id = SST_49LF004A, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PREW, .probe = probe_sst_fwhub, .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */ @@ -4199,6 +4253,7 @@ .model_id = SST_49LF004C, .total_size = 512, .page_size = 4 * 1024, + .feature_bits = 0, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */ @@ -4230,7 +4285,7 @@ .model_id = SST_49LF008A, .total_size = 1024, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_OK_PRW, .probe = probe_sst_fwhub, .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */ @@ -4260,6 +4315,7 @@ .model_id = SST_49LF008C, .total_size = 1024, .page_size = 4 * 1024, + .feature_bits = 0, .tested = TEST_UNTESTED, .probe = probe_49lfxxxc, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */ @@ -4291,6 +4347,7 @@ .model_id = SST_49LF016C, .total_size = 2048, .page_size = 4 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_49lfxxxc, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */ @@ -4322,7 +4379,8 @@ .model_id = SST_49LF020, .total_size = 256, .page_size = 16 * 1024, - .tested = TEST_OK_PR, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4339,7 +4397,7 @@ .block_erase = NULL, } }, - .write = write_49lf040, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4351,7 +4409,8 @@ .model_id = SST_49LF020A, .total_size = 256, .page_size = 4 * 1024, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4368,7 +4427,7 @@ .block_erase = NULL, } }, - .write = write_49lf040, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4380,7 +4439,8 @@ .model_id = SST_49LF040, .total_size = 512, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150 ns */ .erase = NULL, @@ -4397,7 +4457,7 @@ .block_erase = NULL, } }, - .write = write_49lf040, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4409,7 +4469,7 @@ .model_id = SST_49LF040B, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */ @@ -4427,7 +4487,7 @@ .block_erase = NULL, } }, - .write = write_49lf040, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4439,7 +4499,8 @@ .model_id = SST_49LF080A, .total_size = 1024, .page_size = 4096, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_FIXME, .erase = NULL, @@ -4456,7 +4517,7 @@ .block_erase = NULL, } }, - .write = write_49lf040, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4468,6 +4529,7 @@ .model_id = SST_49LF160C, .total_size = 2048, .page_size = 4 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_49lfxxxc, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */ @@ -4818,6 +4880,7 @@ .model_id = ST_M29F002B, .total_size = 256, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -4837,7 +4900,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_m29f002b, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4849,7 +4912,8 @@ .model_id = ST_M29F002T, .total_size = 256, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -4868,7 +4932,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_m29f002t, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4880,25 +4944,27 @@ .model_id = ST_M29F040B, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, - .probe = probe_29f040b, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */ .erase = NULL, .block_erasers = { { .eraseblocks = { {64 * 1024, 8}, }, - .block_erase = erase_sector_29f040b, + .block_erase = erase_sector_jedec, }, { .eraseblocks = { {512 * 1024, 1} }, - .block_erase = erase_chip_29f040b, + .block_erase = erase_chip_block_jedec, } }, - .write = write_29f040b, + .write = write_jedec_1, .read = read_memmapped, },
{ + /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */ .vendor = "ST", .name = "M29F400BT", .bustype = CHIP_BUSTYPE_PARALLEL, @@ -4906,6 +4972,7 @@ .model_id = ST_M29F400BT, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_m29f400bt, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */ @@ -4937,6 +5004,7 @@ .model_id = ST_M29W010B, .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, /* Datasheet has no timing info specified */ @@ -4951,7 +5019,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec, + .write = write_jedec_1, .read = read_memmapped, },
@@ -4963,6 +5031,7 @@ .model_id = ST_M29W040B, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -4977,21 +5046,21 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_jedec, + .write = write_jedec_1, .read = read_memmapped, },
{ .vendor = "ST", .name = "M50FLW040A", - .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */ + .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */ .manufacture_id = ST_ID, .model_id = ST_M50FLW040A, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_82802ab, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -5019,14 +5088,14 @@ { .vendor = "ST", .name = "M50FLW040B", - .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */ + .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */ .manufacture_id = ST_ID, .model_id = ST_M50FLW040B, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_82802ab, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -5054,14 +5123,14 @@ { .vendor = "ST", .name = "M50FLW080A", - .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */ + .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */ .manufacture_id = ST_ID, .model_id = ST_M50FLW080A, .total_size = 1024, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, - .tested = TEST_OK_PRW, - .probe = probe_jedec, + .feature_bits = 0, + .tested = TEST_UNTESTED, + .probe = probe_82802ab, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -5089,14 +5158,14 @@ { .vendor = "ST", .name = "M50FLW080B", - .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */ + .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */ .manufacture_id = ST_ID, .model_id = ST_M50FLW080B, .total_size = 1024, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_82802ab, .probe_timing = TIMING_FIXME, .erase = NULL, .block_erasers = @@ -5129,8 +5198,9 @@ .model_id = ST_M50FW002, .total_size = 256, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_49lfxxxc, + .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */ .erase = NULL, .block_erasers = @@ -5148,7 +5218,7 @@ .block_erase = erase_chip_stm50flw0x0x, } }, - .write = NULL, + .write = write_stm50flw0x0x, .read = read_memmapped, },
@@ -5160,6 +5230,7 @@ .model_id = ST_M50FW016, .total_size = 2048, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_UNTESTED, .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */ @@ -5186,6 +5257,7 @@ .model_id = ST_M50FW040, .total_size = 512, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */ @@ -5212,6 +5284,7 @@ .model_id = ST_M50FW080, .total_size = 1024, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_OK_PRW, .probe = probe_82802ab, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */ @@ -5238,8 +5311,9 @@ .model_id = ST_M50LPW116, .total_size = 2048, .page_size = 64 * 1024, + .feature_bits = 0, .tested = TEST_UNTESTED, - .probe = probe_jedec, + .probe = probe_82802ab, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, .block_erasers = @@ -5255,10 +5329,10 @@ .block_erase = erase_block_stm50flw0x0x, }, { .eraseblocks = { {2 * 1024 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, + .block_erase = erase_chip_stm50flw0x0x, } }, - .write = write_jedec, + .write = write_stm50flw0x0x, .read = read_memmapped, },
@@ -5270,6 +5344,7 @@ .model_id = S29C31004T, .total_size = 512, .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -5284,7 +5359,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5296,6 +5371,7 @@ .model_id = S29C51001T, .total_size = 128, .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -5310,7 +5386,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5322,7 +5398,8 @@ .model_id = S29C51002T, .total_size = 256, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ .erase = NULL, @@ -5336,7 +5413,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5348,6 +5425,7 @@ .model_id = S29C51004T, .total_size = 512, .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, @@ -5362,7 +5440,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5374,6 +5452,7 @@ .model_id = TI_TMS29F002RB, .total_size = 256, .page_size = 16384, /* Non-uniform sectors */ + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -5393,7 +5472,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = NULL, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5405,6 +5484,7 @@ .model_id = TI_TMS29F002RT, .total_size = 256, .page_size = 16384, /* Non-uniform sectors */ + .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */ @@ -5424,7 +5504,7 @@ .block_erase = erase_chip_block_jedec, }, }, - .write = NULL, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5681,7 +5761,8 @@ .model_id = W_29C011, .total_size = 128, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, /* used datasheet for the W29C011A */ .erase = NULL, @@ -5704,7 +5785,8 @@ .model_id = W_29C020C, .total_size = 256, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5727,7 +5809,8 @@ .model_id = W_29C040P, .total_size = 512, .page_size = 256, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5750,6 +5833,7 @@ .model_id = W_29C011, .total_size = 128, .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, .tested = TEST_OK_PRW, .probe = probe_w29ee011, .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */ @@ -5773,7 +5857,8 @@ .model_id = W_39V040A, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5787,7 +5872,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5799,7 +5884,8 @@ .model_id = W_39V040B, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PR | TEST_BAD_WRITE, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5813,7 +5899,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5825,8 +5911,9 @@ .model_id = W_39V040C, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, - .probe = probe_w39v040c, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, + .probe = probe_jedec, .probe_timing = TIMING_FIXME, .erase = NULL, /* Was erase_w39v040c */ .block_erasers = @@ -5839,7 +5926,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_w39v040c, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5851,7 +5938,8 @@ .model_id = W_39V040FA, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5868,7 +5956,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5880,7 +5968,8 @@ .model_id = W_39V080A, .total_size = 1024, .page_size = 64 * 1024, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5894,7 +5983,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5906,7 +5995,8 @@ .model_id = W_49F002U, .total_size = 256, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5925,7 +6015,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5937,7 +6027,8 @@ .model_id = W_49V002A, .total_size = 256, .page_size = 128, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, .erase = NULL, @@ -5956,7 +6047,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5968,6 +6059,7 @@ .model_id = W_49V002FA, .total_size = 256, .page_size = 128, + .feature_bits = FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = 10, @@ -5987,7 +6079,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_49f002, + .write = write_jedec_1, .read = read_memmapped, },
@@ -5999,8 +6091,8 @@ .model_id = W_39V080FA, .total_size = 1024, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, - .tested = TEST_OK_PRW, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, + .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_FIXME, .erase = NULL, /* Was erase_winbond_fwhub */ @@ -6014,7 +6106,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_winbond_fwhub, + .write = write_jedec_1, .read = read_memmapped, },
@@ -6026,7 +6118,7 @@ .model_id = W_39V080FA_DM, .total_size = 512, .page_size = 64 * 1024, - .feature_bits = FEATURE_REGISTERMAP, + .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET, .tested = TEST_UNTESTED, .probe = probe_jedec, .probe_timing = TIMING_FIXME, @@ -6041,7 +6133,7 @@ .block_erase = erase_chip_block_jedec, } }, - .write = write_winbond_fwhub, + .write = write_jedec_1, .read = read_memmapped, },
Modified: trunk/jedec.c =================================================================== --- trunk/jedec.c 2010-01-28 19:02:36 UTC (rev 885) +++ trunk/jedec.c 2010-01-28 23:55:12 UTC (rev 886) @@ -27,6 +27,7 @@ #define MAX_REFLASH_TRIES 0x10 #define MASK_FULL 0xffff #define MASK_2AA 0x7ff +#define MASK_AAA 0xfff
/* Check one byte for odd parity */ uint8_t oddparity(uint8_t val) @@ -98,8 +99,7 @@ chip_writeb(0xA0, bios + (0x5555 & mask)); }
-int probe_jedec_common(struct flashchip *flash, - unsigned int mask, int long_reset) +int probe_jedec_common(struct flashchip *flash, unsigned int mask) { chipaddr bios = flash->virtual_memory; uint8_t id1, id2; @@ -152,7 +152,7 @@ }
/* Issue JEDEC Product ID Exit command */ - if (long_reset) + if ((flash->feature_bits & FEATURE_SHORT_RESET) == FEATURE_LONG_RESET) { chip_writeb(0xAA, bios + (0x5555 & mask)); if (probe_timing_exit) @@ -379,6 +379,12 @@ case FEATURE_ADDR_FULL: return MASK_FULL; break; + case FEATURE_ADDR_2AA: + return MASK_2AA; + break; + case FEATURE_ADDR_AAA: + return MASK_AAA; + break; default: fprintf(stderr, "%s called with unknown mask\n", __func__); return 0; @@ -388,10 +394,13 @@
int write_jedec(struct flashchip *flash, uint8_t *buf) { + int mask; int i, failed = 0; int total_size = flash->total_size * 1024; int page_size = flash->page_size;
+ mask = getaddrmask(flash); + if (erase_chip_jedec(flash)) { fprintf(stderr,"ERASE FAILED!\n"); return -1; @@ -401,7 +410,7 @@ for (i = 0; i < total_size / page_size; i++) { printf("%04d at address: 0x%08x", i, i * page_size); if (write_page_write_jedec_common(flash, buf + i * page_size, - i * page_size, page_size, MASK_FULL)) + i * page_size, page_size, mask)) failed = 1; printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); } @@ -415,7 +424,10 @@ int i; chipaddr bios = flash->virtual_memory; chipaddr dst = bios; + int mask;
+ mask = getaddrmask(flash); + programmer_delay(10); if (erase_flash(flash)) { fprintf(stderr, "ERASE FAILED!\n"); @@ -427,7 +439,7 @@ if ((i & 0x3) == 0) printf("address: 0x%08lx", (unsigned long)i * 1024);
- write_sector_jedec_common(flash, buf + i * 1024, dst + i * 1024, 1024, MASK_FULL); + write_sector_jedec_common(flash, buf + i * 1024, dst + i * 1024, 1024, mask);
if ((i & 0x3) == 0) printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); @@ -441,12 +453,15 @@ int erase_chip_block_jedec(struct flashchip *flash, unsigned int addr, unsigned int blocksize) { + int mask; + + mask = getaddrmask(flash); if ((addr != 0) || (blocksize != flash->total_size * 1024)) { fprintf(stderr, "%s called with incorrect arguments\n", __func__); return -1; } - return erase_chip_jedec_common(flash, MASK_FULL); + return erase_chip_jedec_common(flash, mask); }
int probe_jedec(struct flashchip *flash) @@ -454,20 +469,29 @@ int mask;
mask = getaddrmask(flash); - return probe_jedec_common(flash, mask, 1); + return probe_jedec_common(flash, mask); }
int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int size) { - return erase_sector_jedec_common(flash, page, size, MASK_FULL); + int mask; + + mask = getaddrmask(flash); + return erase_sector_jedec_common(flash, page, size, mask); }
int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int size) { - return erase_block_jedec_common(flash, page, size, MASK_FULL); + int mask; + + mask = getaddrmask(flash); + return erase_block_jedec_common(flash, page, size, mask); }
int erase_chip_jedec(struct flashchip *flash) { - return erase_chip_jedec_common(flash, MASK_FULL); + int mask; + + mask = getaddrmask(flash); + return erase_chip_jedec_common(flash, mask); }