On Sat, Nov 29, 2008 at 8:23 PM, FENG Yu Ning fengyuning1984@gmail.com wrote:
On Sat, Nov 29, 2008 at 9:15 AM, Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net wrote:
Index: flashrom-eraseblocks/flashrom.c
--- flashrom-eraseblocks/flashrom.c (Revision 3776) +++ flashrom-eraseblocks/flashrom.c (Arbeitskopie) @@ -534,11 +534,33 @@
if (erase_it) { printf("Erasing flash chip.\n");
if (!flash->erase) {
fprintf(stderr, "Error: flashrom has no erase function for this flash chip.\n");
if (!flash->block_erase && flash->eraseblocks[0].count) {
fprintf(stderr, "Hint: flashrom knows the eraseblock "
"layout, but there is no blockwise erase "
"function for this flash chip. "
"Using whole-chip erase.\n");
}
if (flash->block_erase && !flash->eraseblocks[0].count) {
fprintf(stderr, "Hint: flashrom has a blockwise erase "
"function for this flash chip, but the "
"eraseblock layout is unknown. "
"Using whole-chip erase.\n");
}
if (flash->block_erase && flash->eraseblocks[0].count) {
unsigned long done = 0;
int i, j;
for (i = 0; done < flash->total_size * 1024; i++) {
for (j = 0; j < flash->eraseblocks[i].count; j++) {
flash->block_erase(flash, done + flash->eraseblocks[i].size * j);
}
done += flash->eraseblocks[i].count * flash->eraseblocks[i].size;
}
} else if (flash->erase) {
flash->erase(flash);
} else {
fprintf(stderr, "Error: flashrom has no chip erase function for this flash chip.\n"); return 1; }
flash->erase(flash); exit(0); } else if (read_it) { if ((image = fopen(filename, "w")) == NULL) {
No comment to the logic. But the new code has a different degree of detail compared to other 'if (do_it)' blocks(i.e., the for loop).
I do have a comment to the logic now. If we want to erase a whole chip, we shall try 'flash->erase' first.
yu ning