summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2008-01-27 16:21:21 +0000
committerPeter Stuge <peter@stuge.se>2008-01-27 16:21:21 +0000
commite2bbcb10d1e477ce3965c5c4a0da902265239811 (patch)
treeb5c96f9cf96a20ea0b5a0a034860770b0ba574f4
parent3bbf2ff789791ca6fe3eb9fc7d3c92ce1fc86367 (diff)
Make the vendor name optional in the -m flashrom parameter when there's only
one board name that matches. The full syntax still works, and is required when two vendors have boards with the same names. Signed-off-by: Peter Stuge <peter@stuge.se> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3082 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--util/flashrom/README28
-rw-r--r--util/flashrom/board_enable.c22
-rw-r--r--util/flashrom/flashrom.84
-rw-r--r--util/flashrom/flashrom.c32
4 files changed, 51 insertions, 35 deletions
diff --git a/util/flashrom/README b/util/flashrom/README
index 312304b5b4..7f167153c2 100644
--- a/util/flashrom/README
+++ b/util/flashrom/README
@@ -23,20 +23,20 @@ Usage
-----
$ flashrom [-rwvEVfh] [-c chipname] [-s exclude_start] [-e exclude_end]
- [-m vendor:part] [-l file.layout] [-i imagename] [file]
- -r | --read: read flash and save into file
- -w | --write: write file into flash (default when
- file is specified)
- -v | --verify: verify flash against file
- -E | --erase: erase flash device
- -V | --verbose: more verbose output
- -c | --chip <chipname>: probe only for specified flash chip
- -s | --estart <addr>: exclude start position
- -e | --eend <addr>: exclude end postion
- -m | --mainboard <vendor:part>: override mainboard settings
- -f | --force: force write without checking image
- -l | --layout <file.layout>: read rom layout from file
- -i | --image <name>: only flash image name from flash layout
+ [-m [vendor:]part] [-l file.layout] [-i imagename] [file]
+ -r | --read: read flash and save into file
+ -w | --write: write file into flash (default when
+ file is specified)
+ -v | --verify: verify flash against file
+ -E | --erase: erase flash device
+ -V | --verbose: more verbose output
+ -c | --chip <chipname>: probe only for specified flash chip
+ -s | --estart <addr>: exclude start position
+ -e | --eend <addr>: exclude end postion
+ -m | --mainboard <[vendor:]part>: override mainboard settings
+ -f | --force: force write without checking image
+ -l | --layout <file.layout>: read rom layout from file
+ -i | --image <name>: only flash image name from flash layout
If no file is specified, then all that happens
is that flash info is dumped and the flash chip is set to writable.
diff --git a/util/flashrom/board_enable.c b/util/flashrom/board_enable.c
index 27f431f513..e23b9eadf4 100644
--- a/util/flashrom/board_enable.c
+++ b/util/flashrom/board_enable.c
@@ -413,9 +413,10 @@ struct board_pciid_enable board_pciid_enables[] = {
static struct board_pciid_enable *board_match_coreboot_name(const char *vendor, const char *part)
{
struct board_pciid_enable *board = board_pciid_enables;
+ struct board_pciid_enable *partmatch = NULL;
for (; board->name; board++) {
- if (!board->lb_vendor || strcmp(board->lb_vendor, vendor))
+ if (vendor && (!board->lb_vendor || strcmp(board->lb_vendor, vendor)))
continue;
if (!board->lb_part || strcmp(board->lb_part, part))
@@ -427,9 +428,24 @@ static struct board_pciid_enable *board_match_coreboot_name(const char *vendor,
if (board->second_vendor &&
!pci_dev_find(board->second_vendor, board->second_device))
continue;
- return board;
+
+ if (vendor)
+ return board;
+
+ if (partmatch) {
+ /* a second entry has a matching part name */
+ printf("AMBIGUOUS BOARD NAME: %s\n", part);
+ printf("At least vendors '%s' and '%s' match.\n",
+ partmatch->lb_vendor, board->lb_vendor);
+ printf("Please use the full -m vendor:part syntax.\n");
+ return NULL;
+ }
+ partmatch = board;
}
+ if (partmatch)
+ return partmatch;
+
printf("NOT FOUND %s:%s\n", vendor, part);
return NULL;
@@ -477,7 +493,7 @@ int board_flash_enable(const char *vendor, const char *part)
struct board_pciid_enable *board = NULL;
int ret = 0;
- if (vendor && part)
+ if (part)
board = board_match_coreboot_name(vendor, part);
if (!board)
diff --git a/util/flashrom/flashrom.8 b/util/flashrom/flashrom.8
index 3251738607..287b7f78fd 100644
--- a/util/flashrom/flashrom.8
+++ b/util/flashrom/flashrom.8
@@ -40,11 +40,11 @@ Exclude start position (obsolete).
.B "\-e, \-\-eend" <addr>
Exclude end postion (obsolete).
.TP
-.B "\-m, \-\-mainboard" <vendor:part>
+.B "\-m, \-\-mainboard" <[vendor:]part>
Override mainboard settings. This option is needed for some mainboards,
see the
.B flashrom
-README for a list.
+README for a list. The vendor is not required when the board name is unique.
.TP
.B "\-f, \-\-force"
Force write without checking whether the ROM image file is really meant
diff --git a/util/flashrom/flashrom.c b/util/flashrom/flashrom.c
index abcd3d2684..59196bc145 100644
--- a/util/flashrom/flashrom.c
+++ b/util/flashrom/flashrom.c
@@ -196,21 +196,21 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
void usage(const char *name)
{
printf("usage: %s [-rwvEVfhR] [-c chipname] [-s exclude_start]\n", name);
- printf(" [-e exclude_end] [-m vendor:part] [-l file.layout] [-i imagename] [file]\n");
+ printf(" [-e exclude_end] [-m [vendor:]part] [-l file.layout] [-i imagename] [file]\n");
printf
- (" -r | --read: read flash and save into file\n"
- " -w | --write: write file into flash\n"
- " -v | --verify: verify flash against file\n"
- " -E | --erase: erase flash device\n"
- " -V | --verbose: more verbose output\n"
- " -c | --chip <chipname>: probe only for specified flash chip\n"
- " -s | --estart <addr>: exclude start position\n"
- " -e | --eend <addr>: exclude end postion\n"
- " -m | --mainboard <vendor:part>: override mainboard settings\n"
- " -f | --force: force write without checking image\n"
- " -l | --layout <file.layout>: read rom layout from file\n"
- " -i | --image <name>: only flash image name from flash layout\n"
- " -R | --version: print the version (release)\n"
+ (" -r | --read: read flash and save into file\n"
+ " -w | --write: write file into flash\n"
+ " -v | --verify: verify flash against file\n"
+ " -E | --erase: erase flash device\n"
+ " -V | --verbose: more verbose output\n"
+ " -c | --chip <chipname>: probe only for specified flash chip\n"
+ " -s | --estart <addr>: exclude start position\n"
+ " -e | --eend <addr>: exclude end postion\n"
+ " -m | --mainboard <[vendor:]part>: override mainboard settings\n"
+ " -f | --force: force write without checking image\n"
+ " -l | --layout <file.layout>: read rom layout from file\n"
+ " -i | --image <name>: only flash image name from flash layout\n"
+ " -R | --version: print the version (release)\n"
"\n" " If no file is specified, then all that happens"
" is that flash info is dumped.\n\n");
exit(1);
@@ -301,8 +301,8 @@ int main(int argc, char *argv[])
lb_vendor = tempstr;
lb_part = tempstr2;
} else {
- printf("warning: ignored wrong format of"
- " mainboard: %s\n", tempstr);
+ lb_vendor = NULL;
+ lb_part = tempstr;
}
break;
case 'f':