Author: hailfinger Date: Tue Jul 26 16:18:52 2011 New Revision: 1391 URL: http://flashrom.org/trac/flashrom/changeset/1391
Log: 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.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at
Modified: trunk/flashchips.c trunk/w29ee011.c
Modified: trunk/flashchips.c ============================================================================== --- trunk/flashchips.c Tue Jul 26 02:54:42 2011 (r1390) +++ trunk/flashchips.c Tue Jul 26 16:18:52 2011 (r1391) @@ -8252,6 +8252,29 @@
{ .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, @@ -8322,29 +8345,6 @@ },
{ - .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,
Modified: trunk/w29ee011.c ============================================================================== --- trunk/w29ee011.c Tue Jul 26 02:54:42 2011 (r1390) +++ trunk/w29ee011.c Tue Jul 26 16:18:52 2011 (r1391) @@ -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; }