[flashrom] [commit] r1605 - trunk

repository service svn at flashrom.org
Mon Sep 24 23:29:30 CEST 2012


Author: stefanct
Date: Mon Sep 24 23:29:29 2012
New Revision: 1605
URL: http://flashrom.org/trac/flashrom/changeset/1605

Log:
Fix flashrom running on boards with coreboot.

In r1577 we removed the discrimination of coreboot IDs and user-specified
mainboards. The problem is that the board enable code required to find
a board enable if either of these model strings were set. Therefore boards
running coreboot that do not need a board enable failed to execute flashrom
since then. This patch fixes this by handling coreboot IDs and user-supplied
IDs differently again.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
Acked-by: Idwer Vollering <vidwer at gmail.com>

Modified:
   trunk/board_enable.c
   trunk/internal.c
   trunk/programmer.h

Modified: trunk/board_enable.c
==============================================================================
--- trunk/board_enable.c	Sun Sep 23 14:14:28 2012	(r1604)
+++ trunk/board_enable.c	Mon Sep 24 23:29:29 2012	(r1605)
@@ -2499,7 +2499,6 @@
 	if (partmatch)
 		return partmatch;
 
-	msg_perr("No suitable board enable found for vendor=\"%s\", model=\"%s\".\n", vendor, model);
 	return NULL;
 }
 
@@ -2609,16 +2608,27 @@
 	board_handle_phase(P2);
 }
 
-int board_flash_enable(const char *vendor, const char *model)
+int board_flash_enable(const char *vendor, const char *model, const char *cb_vendor, const char *cb_model)
 {
 	const struct board_match *board = NULL;
 	int ret = 0;
 
-	if (vendor && model) {
+	if (vendor != NULL  && model != NULL) {
 		board = board_match_name(vendor, model);
-		if (!board) /* if a board was given it has to match, else we abort here. */
+		if (!board) { /* If a board was given by the user it has to match, else we abort here. */
+			msg_perr("No suitable board enable found for vendor=\"%s\", model=\"%s\".\n",
+				 vendor, model);
 			return 1;
-	} else {
+		}
+	}
+	if (board == NULL && cb_vendor != NULL && cb_model != NULL) {
+		board = board_match_name(cb_vendor, cb_model);
+		if (!board) { /* Failure is an option here, because many cb boards don't require an enable. */
+			msg_pdbg2("No board enable found matching coreboot IDs vendor=\"%s\", model=\"%s\".\n",
+				  cb_vendor, cb_model);
+		}
+	}
+	if (board == NULL) {
 		board = board_match_pci_ids(P3);
 		if (!board) /* i.e. there is just no board enable available for this board */
 			return 0;

Modified: trunk/internal.c
==============================================================================
--- trunk/internal.c	Sun Sep 23 14:14:28 2012	(r1604)
+++ trunk/internal.c	Mon Sep 24 23:29:29 2012	(r1605)
@@ -257,12 +257,8 @@
 	}
 
 #if defined(__i386__) || defined(__x86_64__)
-	if (cb_parse_table(&cb_vendor, &cb_model) == 0) { /* coreboot IDs valid */
-		/* If no -p internal:mainboard was given but there are valid coreboot IDs then use those. */
-		if (board_vendor == NULL || board_model == NULL) {
-			board_vendor = cb_vendor;
-			board_model = cb_model;
-		} else if (strcasecmp(board_vendor, cb_vendor) || strcasecmp(board_model, cb_model)) {
+	if ((cb_parse_table(&cb_vendor, &cb_model) == 0) && (board_vendor != NULL) && (board_model != NULL)) {
+		if (strcasecmp(board_vendor, cb_vendor) || strcasecmp(board_model, cb_model)) {
 			msg_pinfo("WARNING: The mainboard IDs set by -p internal:mainboard (%s:%s) do not\n"
 				  "         match the current coreboot IDs of the mainboard (%s:%s).\n",
 				  board_vendor, board_model, cb_vendor, cb_model);
@@ -339,7 +335,7 @@
 	init_superio_ite();
 #endif
 
-	if (board_flash_enable(board_vendor, board_model)) {
+	if (board_flash_enable(board_vendor, board_model, cb_vendor, cb_model)) {
 		msg_perr("Aborting to be safe.\n");
 		return 1;
 	}

Modified: trunk/programmer.h
==============================================================================
--- trunk/programmer.h	Sun Sep 23 14:14:28 2012	(r1604)
+++ trunk/programmer.h	Mon Sep 24 23:29:29 2012	(r1605)
@@ -256,7 +256,7 @@
 void sio_mask(uint16_t port, uint8_t reg, uint8_t data, uint8_t mask);
 void board_handle_before_superio(void);
 void board_handle_before_laptop(void);
-int board_flash_enable(const char *vendor, const char *model);
+int board_flash_enable(const char *vendor, const char *model, const char *cb_vendor, const char *cb_model);
 
 /* chipset_enable.c */
 int chipset_flash_enable(void);




More information about the flashrom mailing list