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.

Corresponding to flashrom svn r190 and coreboot v2 svn r3082.

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
diff --git a/board_enable.c b/board_enable.c
index 27f431f..e23b9ea 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -413,9 +413,10 @@
 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 @@
 		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 @@
 	struct board_pciid_enable *board = NULL;
 	int ret = 0;
 
-	if (vendor && part)
+	if (part)
 		board = board_match_coreboot_name(vendor, part);
 
 	if (!board)