[flashrom] [PATCH] Reenable forced read (stefanct's version)

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Thu Feb 16 20:08:13 CET 2012


what about something like this?
single loop, more obvious(?) execution flow
printf is misaligned, but you get the idea.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---

 cli_classic.c |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/cli_classic.c b/cli_classic.c
index 7661612..df1f668 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -456,11 +456,25 @@ int main(int argc, char *argv[])
 			printf("Note: flashrom can never write if the flash "
 			       "chip isn't found automatically.\n");
 		}
-#if 0 // FIXME: What happens for a forced chip read if multiple compatible programmers are registered?
 		if (force && read_it && chip_to_probe) {
+			struct registered_programmer *pgm;
+			struct registered_programmer *first_pgm = NULL;
 			printf("Force read (-f -r -c) requested, pretending "
 			       "the chip is there:\n");
-			startchip = probe_flash(0, &flashes[0], 1);
+			for (j = 0; j < registered_programmer_count; j++) {
+				pgm = &registered_programmers[j];
+				if (pgm->buses_supported & flashes[0].bustype) {
+					if (first_pgm == NULL)
+						first_pgm = pgm;
+					else {
+				printf("More than one compatible controller "
+				       "found for the requested flash chip, "
+				       "using the first one.\n");
+					break;
+					}
+				}
+			}
+			startchip = probe_flash(first_pgm, 0, &flashes[0], 1);
 			if (startchip == -1) {
 				printf("Probing for flash chip '%s' failed.\n",
 				       chip_to_probe);
@@ -471,7 +485,6 @@ int main(int argc, char *argv[])
 			       "contain garbage.\n");
 			return read_flash_to_file(&flashes[0], filename);
 		}
-#endif
 		ret = 1;
 		goto out_shutdown;
 	} else if (!chip_to_probe) {
-- 
1.7.1





More information about the flashrom mailing list