diff options
author | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2011-07-26 14:18:52 +0000 |
---|---|---|
committer | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2011-07-26 14:18:52 +0000 |
commit | 2e88a9f4f017489eb8e9b64f59b3d9419c09346c (patch) | |
tree | 3005702fae6e6530c2998b32508a9dd2cec96721 | |
parent | a34d7190377cb085df5346e58405c117dbaede29 (diff) | |
download | flashrom-2e88a9f4f017489eb8e9b64f59b3d9419c09346c.tar.gz flashrom-2e88a9f4f017489eb8e9b64f59b3d9419c09346c.tar.bz2 flashrom-2e88a9f4f017489eb8e9b64f59b3d9419c09346c.zip |
Fix Winbond W29EE011, W29EE012, W29C010M, W29C011A probing
According to the datasheets probe_w29ee011 is the only valid probe
function for those chips, but we have reports where those chips
were only detected with probe_jedec, and thus we assume that our
datasheets only cover an earlier stepping.
Corresponding to flashrom svn r1391.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
-rw-r--r-- | flashchips.c | 46 | ||||
-rw-r--r-- | w29ee011.c | 13 |
2 files changed, 31 insertions, 28 deletions
diff --git a/flashchips.c b/flashchips.c index 982e1663..42dd38a5 100644 --- a/flashchips.c +++ b/flashchips.c @@ -8252,6 +8252,29 @@ const struct flashchip flashchips[] = { { .vendor = "Winbond", + .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old", + .bustype = CHIP_BUSTYPE_PARALLEL, + .manufacture_id = WINBOND_ID, + .model_id = WINBOND_W29C010, + .total_size = 128, + .page_size = 128, + .feature_bits = FEATURE_LONG_RESET, + .tested = TEST_OK_PRE, + .probe = probe_w29ee011, + .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */ + .block_erasers = + { + { + .eraseblocks = { {128 * 1024, 1} }, + .block_erase = erase_chip_block_jedec, + } + }, + .write = write_jedec, + .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", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = WINBOND_ID, @@ -8323,29 +8346,6 @@ const struct flashchip flashchips[] = { { .vendor = "Winbond", - .name = "W29C010(M)/W29C011A/W29EE011/W29EE012", - .bustype = CHIP_BUSTYPE_PARALLEL, - .manufacture_id = WINBOND_ID, - .model_id = WINBOND_W29C010, - .total_size = 128, - .page_size = 128, - .feature_bits = FEATURE_LONG_RESET, - .tested = TEST_OK_PRE, - .probe = probe_w29ee011, - .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */ - .block_erasers = - { - { - .eraseblocks = { {128 * 1024, 1} }, - .block_erase = erase_chip_block_jedec, - } - }, - .write = write_jedec, - .read = read_memmapped, - }, - - { - .vendor = "Winbond", .name = "W39L040", .bustype = CHIP_BUSTYPE_PARALLEL, .manufacture_id = WINBOND_ID, @@ -22,16 +22,19 @@ #include "flash.h" #include "chipdrivers.h" +/* According to the Winbond W29EE011, W29EE012, W29C010M, W29C011A + * datasheets this is the only valid probe function for those chips. + */ int probe_w29ee011(struct flashchip *flash) { chipaddr bios = flash->virtual_memory; uint8_t id1, id2; - if (!chip_to_probe || strcmp(chip_to_probe, "W29EE011")) { - msg_cdbg("Probing disabled for Winbond W29EE011 because " - "the probing sequence puts the AMIC A49LF040A in " - "a funky state. Use 'flashrom -c W29EE011' if you " - "have a board with this chip.\n"); + if (!chip_to_probe || strcmp(chip_to_probe, flash->name)) { + msg_cdbg("Old Winbond W29* probe method disabled because " + "the probing sequence puts the AMIC A49LF040A in " + "a funky state. Use 'flashrom -c %s' if you " + "have a board with such a chip.\n", flash->name); return 0; } |