[flashrom] [PATCH] Add eraseblock functions to self-check
Sean Nelson
audiohacked at gmail.com
Tue Jan 19 04:40:01 CET 2010
On 1/18/10 6:46 PM, Carl-Daniel Hailfinger wrote:
> Add eraseblock functions to self-check. It doesn't make sense to have
> different layouts for the same function on one chip.
> Keep going if an error is found, we want all errors to be reported in
> one fell swoop.
>
> Signed-off-by: Carl-Daniel Hailfinger<c-d.hailfinger.devel.2006 at gmx.net>
>
> Index: flashrom-selfcheck_eraseblocks_functions/flashrom.c
> ===================================================================
> --- flashrom-selfcheck_eraseblocks_functions/flashrom.c (Revision 866)
> +++ flashrom-selfcheck_eraseblocks_functions/flashrom.c (Arbeitskopie)
> @@ -833,10 +833,13 @@
> return 0;
> }
>
> -/* This function shares a lot of its structure with erase_flash(). */
> +/* This function shares a lot of its structure with erase_flash().
> + * Even if an error is found, the function will keep going and check the rest.
> + */
> int selfcheck_eraseblocks(struct flashchip *flash)
> {
> - int i, k;
> + int i, j, k;
> + int ret = 0;
>
> for (k = 0; k< NUM_ERASEFUNCTIONS; k++) {
> unsigned int done = 0;
> @@ -850,8 +853,7 @@
> "%i region %i has size 0. Please report"
> " a bug at flashrom at flashrom.org\n",
> flash->name, k, i);
> - return 1;
> - break;
> + ret = 1;
> }
> /* Blocks with zero count are bugs in flashchips.c. */
> if (!eraser.eraseblocks[i].count&&
> @@ -860,13 +862,15 @@
> "%i region %i has count 0. Please report"
> " a bug at flashrom at flashrom.org\n",
> flash->name, k, i);
> - return 1;
> - break;
> + ret = 1;
> }
> done += eraser.eraseblocks[i].count *
> eraser.eraseblocks[i].size;
> }
> - /* This erase function is completely empty. */
> + /* Empty eraseblock definition with erase function. */
> + if (!done&& eraser.block_erase)
> + msg_pspew("Strange: Empty eraseblock definition with "
> + "non-empty erase function. Not an error.\n");
> if (!done)
> continue;
> if (done != flash->total_size * 1024) {
> @@ -875,10 +879,25 @@
> " expected 0x%06x bytes. Please report a bug at"
> " flashrom at flashrom.org\n", flash->name, k,
> done, flash->total_size * 1024);
> - return 1;
> + ret = 1;
> }
> + if (!eraser.block_erase)
> + continue;
> + /* Check if there are identical erase functions for different
> + * layouts. That would imply "magic" erase functions. The
> + * easiest way to check this is with function pointers.
> + */
> + for (j = k + 1; j< NUM_ERASEFUNCTIONS; j++)
> + if (eraser.block_erase ==
> + flash->block_erasers[j].block_erase) {
> + msg_gerr("ERROR: Flash chip %s erase function "
> + "%i and %i are identical. Please report"
> + " a bug at flashrom at flashrom.org\n",
> + flash->name, k, j);
> + ret = 1;
> + }
> }
> - return 0;
> + return ret;
> }
>
> int erase_flash(struct flashchip *flash)
>
>
>
Acked-by: Sean Nelson <audiohacked at gmail.com>
More information about the flashrom
mailing list