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 <chipname> option.
[root@localhost src]# 

Signed-off-by: Claus Gindhart <claus.gindhart@kontron.com>
Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Claus Gindhart <claus.gindhart@kontron.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3291 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Claus Gindhart 2008-05-08 00:31:44 +00:00 committed by Peter Stuge
parent 83a965d2ef
commit 15da8ed98b
1 changed files with 19 additions and 3 deletions

View File

@ -246,11 +246,12 @@ int main(int argc, char *argv[])
uint8_t *buf; uint8_t *buf;
unsigned long size; unsigned long size;
FILE *image; FILE *image;
struct flashchip *flash; /* Probe for up to three flash chips. */
struct flashchip *flash, *flashes[3];
int opt; int opt;
int option_index = 0; int option_index = 0;
int read_it = 0, write_it = 0, erase_it = 0, verify_it = 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[] = { static struct option long_options[] = {
{"read", 0, 0, 'r'}, {"read", 0, 0, 'r'},
@ -405,12 +406,27 @@ int main(int argc, char *argv[])
board_flash_enable(lb_vendor, lb_part); 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 <chipname> option.\n");
exit(1);
} else if (!flashes[0]) {
printf("No EEPROM/flash device found.\n"); printf("No EEPROM/flash device found.\n");
// FIXME: flash writes stay enabled! // FIXME: flash writes stay enabled!
exit(1); exit(1);
} }
flash = flashes[0];
printf("Flash part is %s (%d KB).\n", flash->name, flash->total_size); printf("Flash part is %s (%d KB).\n", flash->name, flash->total_size);
if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) { if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) {
printf("===\n"); printf("===\n");