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>
diff --git a/flashchips.c b/flashchips.c
index 982e166..42dd38a 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -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,
@@ -8323,29 +8346,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,
.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;
}