Author: hailfinger
Date: 2009-11-25 17:41:50 +0100 (Wed, 25 Nov 2009)
New Revision: 779
Modified:
trunk/jedec.c
Log:
jedec.c was missing error handling in a few cases. Fix.
jedec.c error handling used double negation in too many places for no
good reason. Clean up.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Acked-by: Sean Nelson <audiohacked(a)gmail.com>
Modified: trunk/jedec.c
===================================================================
--- trunk/jedec.c 2009-11-25 15:04:28 UTC (rev 778)
+++ trunk/jedec.c 2009-11-25 16:41:50 UTC (rev 779)
@@ -262,7 +262,7 @@
int write_page_write_jedec(struct flashchip *flash, uint8_t *src,
int start, int page_size)
{
- int i, tried = 0, ok;
+ int i, tried = 0, failed;
uint8_t *s = src;
chipaddr bios = flash->virtual_memory;
chipaddr dst = bios + start;
@@ -287,27 +287,27 @@
dst = d;
src = s;
- ok = !verify_range(flash, src, start, page_size, NULL);
+ failed = verify_range(flash, src, start, page_size, NULL);
- if (!ok && tried++ < MAX_REFLASH_TRIES) {
+ if (failed && tried++ < MAX_REFLASH_TRIES) {
fprintf(stderr, "retrying.\n");
goto retry;
}
- if (!ok) {
+ if (failed) {
fprintf(stderr, " page 0x%lx failed!\n",
(d - bios) / page_size);
}
- return !ok;
+ return failed;
}
int write_byte_program_jedec(chipaddr bios, uint8_t *src,
chipaddr dst)
{
- int tried = 0, ok = 1;
+ int tried = 0, failed = 0;
- /* If the data is 0xFF, don't program it */
+ /* If the data is 0xFF, don't program it and don't complain. */
if (*src == 0xFF) {
- return -1;
+ return 0;
}
retry:
@@ -325,27 +325,32 @@
}
if (tried >= MAX_REFLASH_TRIES)
- ok = 0;
+ failed = 1;
- return !ok;
+ return failed;
}
int write_sector_jedec(chipaddr bios, uint8_t *src,
chipaddr dst, unsigned int page_size)
{
- int i;
+ int i, failed = 0;
+ chipaddr olddst;
+ olddst = dst;
for (i = 0; i < page_size; i++) {
- write_byte_program_jedec(bios, src, dst);
+ if (write_byte_program_jedec(bios, src, dst))
+ failed = 1;
dst++, src++;
}
+ if (failed)
+ fprintf(stderr, " writing sector at 0x%lx failed!\n", olddst);
- return 0;
+ return failed;
}
int write_jedec(struct flashchip *flash, uint8_t *buf)
{
- int i;
+ int i, failed = 0;
int total_size = flash->total_size * 1024;
int page_size = flash->page_size;
chipaddr bios = flash->virtual_memory;
@@ -358,12 +363,13 @@
printf("Programming page: ");
for (i = 0; i < total_size / page_size; i++) {
printf("%04d at address: 0x%08x", i, i * page_size);
- write_page_write_jedec(flash, buf + i * page_size,
- i * page_size, page_size);
+ if (write_page_write_jedec(flash, buf + i * page_size,
+ i * page_size, page_size))
+ failed = 1;
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");
protect_jedec(bios);
- return 0;
+ return failed;
}