summaryrefslogtreecommitdiffstats
path: root/flashrom.c
diff options
context:
space:
mode:
authorClaus Gindhart <claus.gindhart@kontron.com>2008-05-08 00:31:44 +0000
committerPeter Stuge <peter@stuge.se>2008-05-08 00:31:44 +0000
commit2fd11d6a9bcd0e56d2d6733472954f653fe051a6 (patch)
treed81673c0317627a776e74e13c9f3db199819dc49 /flashrom.c
parent1159d5864acbb4721ca5a0b77bb38284420e1194 (diff)
downloadast2050-flashrom-2fd11d6a9bcd0e56d2d6733472954f653fe051a6.zip
ast2050-flashrom-2fd11d6a9bcd0e56d2d6733472954f653fe051a6.tar.gz
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]# Corresponding to flashrom svn r222 and coreboot v2 svn r3291. 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>
Diffstat (limited to 'flashrom.c')
-rw-r--r--flashrom.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/flashrom.c b/flashrom.c
index 2f3d7c9..dce303e 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -246,11 +246,12 @@ int main(int argc, char *argv[])
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 @@ int main(int argc, char *argv[])
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");
// 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");
OpenPOWER on IntegriCloud