diff options
| author | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2012-09-24 21:29:29 +0000 | 
|---|---|---|
| committer | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2012-09-24 21:29:29 +0000 | 
| commit | fa9fa7131a4c5a0bc49c17a428bb0388f9bc88e7 (patch) | |
| tree | 183ed67b551d6e3c31010bed83cb7e6bc0db2af2 | |
| parent | 4e6d346c6ec0188aa309bfa2fe86ce52b9487ec6 (diff) | |
| download | flashrom-fa9fa7131a4c5a0bc49c17a428bb0388f9bc88e7.tar.gz flashrom-fa9fa7131a4c5a0bc49c17a428bb0388f9bc88e7.tar.bz2 flashrom-fa9fa7131a4c5a0bc49c17a428bb0388f9bc88e7.zip  | |
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.
Corresponding to flashrom svn r1605.
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Idwer Vollering <vidwer@gmail.com>
| -rw-r--r-- | board_enable.c | 20 | ||||
| -rw-r--r-- | internal.c | 10 | ||||
| -rw-r--r-- | programmer.h | 2 | 
3 files changed, 19 insertions, 13 deletions
diff --git a/board_enable.c b/board_enable.c index 7f301809..28a8fcd3 100644 --- a/board_enable.c +++ b/board_enable.c @@ -2499,7 +2499,6 @@ static const struct board_match *board_match_name(const char *vendor, const char  	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 @@ void board_handle_before_laptop(void)  	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; @@ -257,12 +257,8 @@ int internal_init(void)  	}  #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 @@ int internal_init(void)  	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;  	} diff --git a/programmer.h b/programmer.h index 51b9c402..dedec670 100644 --- a/programmer.h +++ b/programmer.h @@ -256,7 +256,7 @@ void sio_write(uint16_t port, uint8_t reg, uint8_t data);  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);  | 
