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@student.tuwien.ac.at Acked-by: Idwer Vollering vidwer@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);