2012/9/15 Stefan Tauner <[email protected]>: > 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 <[email protected]>
Acked-by: Idwer Vollering <[email protected]> > --- > board_enable.c | 20 +++++++++++++++----- > internal.c | 10 +++------- > programmer.h | 2 +- > 3 files changed, 19 insertions(+), 13 deletions(-) > > diff --git a/board_enable.c b/board_enable.c > index 2668f10..bdd5ebb 100644 > --- a/board_enable.c > +++ b/board_enable.c > @@ -2493,7 +2493,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; > } > > @@ -2603,16 +2602,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) Future plan: pass board_match{} to board_flash_enable() instead? > { > const struct board_match *board = NULL; > int ret = 0; > > - if (vendor && model) { > + if (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", > + vendor, model); > + } > + } > + if (board == NULL && 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; > - } else { > + } > + } > + 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; > diff --git a/internal.c b/internal.c > index 7b6cff2..b4414a5 100644 > --- a/internal.c > +++ b/internal.c > @@ -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 51b9c40..dedec67 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); See above. > > /* chipset_enable.c */ > int chipset_flash_enable(void); > -- > Kind regards, Stefan Tauner > > > _______________________________________________ > flashrom mailing list > [email protected] > http://www.flashrom.org/mailman/listinfo/flashrom _______________________________________________ flashrom mailing list [email protected] http://www.flashrom.org/mailman/listinfo/flashrom
