--force may have been a good idea back when only developers were using flashrom, but over the last few months I've seen too many people who incorrectly believed that --force would solve anything.
One of the problems is that --force has multiple meanings: - Force chip read by faking probe success. - Force writing even if cbtable tells us that this is the wrong image for this board. - Force chip access even if the chip is bigger than max decode size for the flash bus. - Force erase even if erase is known bad. - Force write even if write is known bad. We should kill --force and replace it with explicit --force-erase or --force-cbtable-mismatch or similar stuff, maybe -p internal:ignore_cbtable.
First step: - Remove any suggestions to use --force for probe/read from flashrom output. - Don't talk about "success" or "Found chip" if the chip is forced.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-forced_stupid/cli_classic.c =================================================================== --- flashrom-forced_stupid/cli_classic.c (Revision 992) +++ flashrom-forced_stupid/cli_classic.c (Arbeitskopie) @@ -303,6 +303,18 @@ cli_classic_usage(argv[0]); }
+ if (chip_to_probe) { + for (flash = flashchips; flash && flash->name; flash++) + if (!strcmp(flash->name, chip_to_probe)) + break; + if (!flash || !flash->name) { + fprintf(stderr, "Error: Unknown chip specified.\n"); + exit(1); + } + /* Clean up after the check. */ + flash = NULL; + } + if (programmer_init()) { fprintf(stderr, "Error: Programmer initialization failed.\n"); exit(1); @@ -329,14 +341,10 @@ } else if (!flashes[0]) { printf("No EEPROM/flash device found.\n"); if (!force || !chip_to_probe) { - printf("If you know which flash chip you have, and if this version of flashrom\n"); - printf("supports a similar flash chip, you can try to force read your chip. Run:\n"); - printf("flashrom -f -r -c similar_supported_flash_chip filename\n"); - printf("\n"); - printf("Note: flashrom can never write when the flash chip isn't found automatically.\n"); + printf("Note: flashrom can never write if the flash chip isn't found automatically.\n"); } if (force && read_it && chip_to_probe) { - printf("Force read (-f -r -c) requested, forcing chip probe success:\n"); + printf("Force read (-f -r -c) requested, pretending the chip is there:\n"); flashes[0] = probe_flash(flashchips, 1); if (!flashes[0]) { printf("flashrom does not support a flash chip named '%s'.\n", chip_to_probe); Index: flashrom-forced_stupid/flashrom.c =================================================================== --- flashrom-forced_stupid/flashrom.c (Revision 992) +++ flashrom-forced_stupid/flashrom.c (Arbeitskopie) @@ -924,7 +924,8 @@ if (!flash || !flash->name) return NULL;
- printf("Found chip "%s %s" (%d KB, %s) at physical address 0x%lx.\n", + printf("%s chip "%s %s" (%d KB, %s) at physical address 0x%lx.\n", + force ? "Assuming" : "Found", flash->vendor, flash->name, flash->total_size, flashbuses_to_text(flash->bustype), base);