aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-11-14 03:48:33 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-11-14 03:48:33 +0000
commit8a8a226add906fde7b6b90687241ebb20164f9db (patch)
treeb3eb6f832a839bd9246c4773bd99f3b107381eb9
parent11c9e687b495de6e308a7968ff40333db35058b6 (diff)
downloadflashrom-8a8a226add906fde7b6b90687241ebb20164f9db.tar.gz
flashrom-8a8a226add906fde7b6b90687241ebb20164f9db.tar.bz2
flashrom-8a8a226add906fde7b6b90687241ebb20164f9db.zip
Retry correct range in write_page_write_jedec()
The automatic retry in write_page_write_jedec didn't retry flashing the correct range, essentially rendering the functionality useless. This patch simplifies the code and fixes the bug. Thanks to Luke Dashjr for testing. Mark Winbond W29C040P as supported. Corresponding to flashrom svn r757. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Luke Dashjr <luke_coreboot@dashjr.org>
-rw-r--r--flashchips.c2
-rw-r--r--jedec.c6
2 files changed, 4 insertions, 4 deletions
diff --git a/flashchips.c b/flashchips.c
index ac27c905..65eb7f0a 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -3060,7 +3060,7 @@ struct flashchip flashchips[] = {
.model_id = W_29C040P,
.total_size = 512,
.page_size = 256,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_jedec,
.probe_timing = 10,
.erase = erase_chip_jedec,
diff --git a/jedec.c b/jedec.c
index fb6e5ed7..69a59b32 100644
--- a/jedec.c
+++ b/jedec.c
@@ -262,7 +262,7 @@ int erase_chip_jedec(struct flashchip *flash)
int write_page_write_jedec(struct flashchip *flash, uint8_t *src,
int start, int page_size)
{
- int i, tried = 0, start_index = 0, ok;
+ int i, tried = 0, ok;
uint8_t *s = src;
chipaddr bios = flash->virtual_memory;
chipaddr dst = bios + start;
@@ -275,7 +275,7 @@ retry:
chip_writeb(0xA0, bios + 0x5555);
/* transfer data from source to destination */
- for (i = start_index; i < page_size; i++) {
+ for (i = 0; i < page_size; i++) {
/* If the data is 0xFF, don't program it */
if (*src != 0xFF)
chip_writeb(*src, dst);
@@ -290,7 +290,7 @@ retry:
ok = !verify_range(flash, src, start, page_size, NULL);
if (!ok && tried++ < MAX_REFLASH_TRIES) {
- start_index = i;
+ fprintf(stderr, "retrying.\n");
goto retry;
}
if (!ok) {