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@gmx.net
Index: flashrom-jedec_errorhandling/jedec.c =================================================================== --- flashrom-jedec_errorhandling/jedec.c (Revision 777) +++ flashrom-jedec_errorhandling/jedec.c (Arbeitskopie) @@ -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,30 @@ }
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;
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", dst);
- 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 +361,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; }
Next try, this time with fixed error location printing.
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@gmx.net
Index: flashrom-jedec_errorhandling/jedec.c =================================================================== --- flashrom-jedec_errorhandling/jedec.c (Revision 777) +++ flashrom-jedec_errorhandling/jedec.c (Arbeitskopie) @@ -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; }
On 11/25/2009 4:28 AM, Carl-Daniel Hailfinger wrote:
Next try, this time with fixed error location printing.
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 Hailfingerc-d.hailfinger.devel.2006@gmx.net
Index: flashrom-jedec_errorhandling/jedec.c
--- flashrom-jedec_errorhandling/jedec.c (Revision 777) +++ flashrom-jedec_errorhandling/jedec.c (Arbeitskopie) @@ -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))
dst++, src++; }failed = 1;
- 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))
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);failed = 1;
- return 0;
- return failed; }
Acked-by: Sean Nelson audiohacked@gmail.com
On 25.11.2009 16:36, Sean Nelson wrote:
On 11/25/2009 4:28 AM, Carl-Daniel Hailfinger wrote:
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 Hailfingerc-d.hailfinger.devel.2006@gmx.net
Acked-by: Sean Nelson audiohacked@gmail.com
Thanks, r779.
By the way, feel free to snip everything from the original mail if you don't have any comments on the patch except for the ack. Our patchwork instance at http://patchwork.coreboot.org/project/flashrom/list/ keeps track of which ack corresponds to which patch by evaluating "References" and "In-Reply-To" headers.
Regards, Carl-Daniel