1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 23:22:37 +02:00

Change chip_readb in loop to use verify_range in write_page_write_jedec (jedec.c)

Tested by Urja Rannikko with external flasher.
Tested by Uwe Hermann with onboard flash.

Corresponding to flashrom svn r632.

Signed-off-by: Urja Rannikko <urjaman@gmail.com>
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Urja Rannikko <urjaman@gmail.com>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
Urja Rannikko 2009-06-25 13:57:31 +00:00 committed by Carl-Daniel Hailfinger
parent ea07f6245c
commit 0c854c0509

22
jedec.c
View File

@ -262,12 +262,14 @@ int erase_chip_jedec(struct flashchip *flash)
return 0; return 0;
} }
int write_page_write_jedec(chipaddr bios, uint8_t *src, int write_page_write_jedec(struct flashchip *flash, uint8_t *src,
chipaddr dst, int page_size) int start, int page_size)
{ {
int i, tried = 0, start_index = 0, ok; int i, tried = 0, start_index = 0, ok;
chipaddr d = dst;
uint8_t *s = src; uint8_t *s = src;
chipaddr bios = flash->virtual_memory;
chipaddr dst = bios + start;
chipaddr d = dst;
retry: retry:
/* Issue JEDEC Data Unprotect comand */ /* Issue JEDEC Data Unprotect comand */
@ -288,15 +290,7 @@ retry:
dst = d; dst = d;
src = s; src = s;
ok = 1; ok = !verify_range(flash, src, start, page_size, NULL);
for (i = 0; i < page_size; i++) {
if (chip_readb(dst) != *src) {
ok = 0;
break;
}
dst++;
src++;
}
if (!ok && tried++ < MAX_REFLASH_TRIES) { if (!ok && tried++ < MAX_REFLASH_TRIES) {
start_index = i; start_index = i;
@ -367,8 +361,8 @@ int write_jedec(struct flashchip *flash, uint8_t *buf)
printf("Programming page: "); printf("Programming page: ");
for (i = 0; i < total_size / page_size; i++) { for (i = 0; i < total_size / page_size; i++) {
printf("%04d at address: 0x%08x", i, i * page_size); printf("%04d at address: 0x%08x", i, i * page_size);
write_page_write_jedec(bios, buf + i * page_size, write_page_write_jedec(flash, buf + i * page_size,
bios + i * page_size, page_size); i * page_size, page_size);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
} }
printf("\n"); printf("\n");