mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-28 07:23:43 +02:00
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>
This commit is contained in:
parent
a34d719037
commit
2e88a9f4f0
46
flashchips.c
46
flashchips.c
@ -8251,6 +8251,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",
|
.vendor = "Winbond",
|
||||||
.name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
|
.name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
|
||||||
.bustype = CHIP_BUSTYPE_PARALLEL,
|
.bustype = CHIP_BUSTYPE_PARALLEL,
|
||||||
@ -8321,29 +8344,6 @@ const struct flashchip flashchips[] = {
|
|||||||
.voltage = {4500, 5500},
|
.voltage = {4500, 5500},
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
.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",
|
.vendor = "Winbond",
|
||||||
.name = "W39L040",
|
.name = "W39L040",
|
||||||
|
13
w29ee011.c
13
w29ee011.c
@ -22,16 +22,19 @@
|
|||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
#include "chipdrivers.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)
|
int probe_w29ee011(struct flashchip *flash)
|
||||||
{
|
{
|
||||||
chipaddr bios = flash->virtual_memory;
|
chipaddr bios = flash->virtual_memory;
|
||||||
uint8_t id1, id2;
|
uint8_t id1, id2;
|
||||||
|
|
||||||
if (!chip_to_probe || strcmp(chip_to_probe, "W29EE011")) {
|
if (!chip_to_probe || strcmp(chip_to_probe, flash->name)) {
|
||||||
msg_cdbg("Probing disabled for Winbond W29EE011 because "
|
msg_cdbg("Old Winbond W29* probe method disabled because "
|
||||||
"the probing sequence puts the AMIC A49LF040A in "
|
"the probing sequence puts the AMIC A49LF040A in "
|
||||||
"a funky state. Use 'flashrom -c W29EE011' if you "
|
"a funky state. Use 'flashrom -c %s' if you "
|
||||||
"have a board with this chip.\n");
|
"have a board with such a chip.\n", flash->name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user