[flashrom] [PATCH] Fix flashrom running on boards with coreboot.

Idwer Vollering vidwer at gmail.com
Sun Sep 16 00:27:32 CEST 2012


2012/9/15 Stefan Tauner <stefan.tauner at student.tuwien.ac.at>:
> 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>

> ---
>  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
> flashrom at flashrom.org
> http://www.flashrom.org/mailman/listinfo/flashrom




More information about the flashrom mailing list