[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