mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00
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>
This commit is contained in:
parent
4e6d346c6e
commit
fa9fa7131a
@ -2499,7 +2499,6 @@ static const struct board_match *board_match_name(const char *vendor, const char
|
|||||||
if (partmatch)
|
if (partmatch)
|
||||||
return partmatch;
|
return partmatch;
|
||||||
|
|
||||||
msg_perr("No suitable board enable found for vendor=\"%s\", model=\"%s\".\n", vendor, model);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2609,16 +2608,27 @@ void board_handle_before_laptop(void)
|
|||||||
board_handle_phase(P2);
|
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;
|
const struct board_match *board = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (vendor && model) {
|
if (vendor != NULL && model != NULL) {
|
||||||
board = board_match_name(vendor, model);
|
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;
|
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);
|
board = board_match_pci_ids(P3);
|
||||||
if (!board) /* i.e. there is just no board enable available for this board */
|
if (!board) /* i.e. there is just no board enable available for this board */
|
||||||
return 0;
|
return 0;
|
||||||
|
10
internal.c
10
internal.c
@ -257,12 +257,8 @@ int internal_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
if (cb_parse_table(&cb_vendor, &cb_model) == 0) { /* coreboot IDs valid */
|
if ((cb_parse_table(&cb_vendor, &cb_model) == 0) && (board_vendor != NULL) && (board_model != NULL)) {
|
||||||
/* If no -p internal:mainboard was given but there are valid coreboot IDs then use those. */
|
if (strcasecmp(board_vendor, cb_vendor) || strcasecmp(board_model, cb_model)) {
|
||||||
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)) {
|
|
||||||
msg_pinfo("WARNING: The mainboard IDs set by -p internal:mainboard (%s:%s) do not\n"
|
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",
|
" match the current coreboot IDs of the mainboard (%s:%s).\n",
|
||||||
board_vendor, board_model, cb_vendor, cb_model);
|
board_vendor, board_model, cb_vendor, cb_model);
|
||||||
@ -339,7 +335,7 @@ int internal_init(void)
|
|||||||
init_superio_ite();
|
init_superio_ite();
|
||||||
#endif
|
#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");
|
msg_perr("Aborting to be safe.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -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 sio_mask(uint16_t port, uint8_t reg, uint8_t data, uint8_t mask);
|
||||||
void board_handle_before_superio(void);
|
void board_handle_before_superio(void);
|
||||||
void board_handle_before_laptop(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 */
|
/* chipset_enable.c */
|
||||||
int chipset_flash_enable(void);
|
int chipset_flash_enable(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user