flashrom: Probe for up to 3 flash chips. Currently there is an ongoing technology migration from LPC/FWH to SPI chips. For this reason some boards have multiple chips of different technologies onboard. This patch makes flashrom probe for up to 3 chips and if more than one chip is found, flashrom exits, asking the user to specify -c. [root@localhost src]# ./flashrom ... Multiple flash chips were detected: SST49LF008A M25P16@ICH9 Please specify which chip to use with the -c option. Signed-off-by: Claus Gindhart Signed-off-by: Peter Stuge Index: flashrom.multichip/flashrom.c =================================================================== --- flashrom.multichip/flashrom.c (revision 3277) +++ flashrom.multichip/flashrom.c (working copy) @@ -246,11 +246,12 @@ uint8_t *buf; unsigned long size; FILE *image; - struct flashchip *flash; + /* Probe for up to three flash chips. */ + struct flashchip *flash, *flashes[3]; int opt; int option_index = 0; int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0; - int ret = 0; + int ret = 0, i; static struct option long_options[] = { {"read", 0, 0, 'r'}, @@ -405,12 +406,27 @@ board_flash_enable(lb_vendor, lb_part); - if ((flash = probe_flash(flashchips)) == NULL) { + for (i = 0; i < ARRAY_SIZE(flashes); i++) { + flashes[i] = probe_flash(i ? flashes[i - 1] + 1 : flashchips); + if (!flashes[i]) + for (i++; i < ARRAY_SIZE(flashes); i++) + flashes[i] = NULL; + } + + if (flashes[1]) { + printf("Multiple flash chips were detected:"); + for (i = 0; i < ARRAY_SIZE(flashes) && flashes[i]; i++) + printf(" %s", flashes[i]->name); + printf("\nPlease specify which chip to use with the -c option.\n"); + exit(1); + } else if (!flashes[0]) { printf("No EEPROM/flash device found.\n"); // FIXME: flash writes stay enabled! exit(1); } + flash = flashes[0]; + printf("Flash part is %s (%d KB).\n", flash->name, flash->total_size); if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) { printf("===\n");