From 2e88a9f4f017489eb8e9b64f59b3d9419c09346c Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Tue, 26 Jul 2011 14:18:52 +0000 Subject: 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 Acked-by: Stefan Tauner --- flashchips.c | 46 +++++++++++++++++++++++----------------------- w29ee011.c | 13 ++++++++----- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/flashchips.c b/flashchips.c index 982e166..42dd38a 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, diff --git a/w29ee011.c b/w29ee011.c index 4fc8853..21fb6f2 100644 --- a/w29ee011.c +++ b/w29ee011.c @@ -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; } -- cgit v1.1