[flashrom] [PATCH] Clean up and fix jedec.c error handling
Sean Nelson
audiohacked at gmail.com
Wed Nov 25 16:36:27 CET 2009
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 Hailfinger<c-d.hailfinger.devel.2006 at 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;
> }
>
>
>
Acked-by: Sean Nelson <audiohacked at gmail.com>
More information about the flashrom
mailing list