[PATCH v2] cmd: pxe_utils: sysboot: add label override support

Ramon Fried rfried.dev at gmail.com
Tue Dec 14 10:09:44 CET 2021


On Sat, Nov 13, 2021 at 3:09 PM Amjad Ouled-Ameur
<aouledameur at baylibre.com> wrote:
>
> This will allow consumers to choose a pxe label at runtime instead of
> having to prompt the user. One good use-case for this, is choosing
> whether or not to apply a dtbo depending on the hardware configuration.
> e.g: for TI's AM335x EVM, it would be convenient to apply a particular
> dtbo only when the J9 jumper is on PRUSS mode. To achieve this, the
> pxe menu should have 2 labels, one with the dtbo and the other without,
> then the "pxe_label_override" env variable should point to the label with
> the dtbo at runtime only when the jumper is on PRUSS mode.
>
> This change can be used for different use-cases and bring more
> flexibilty to consumers who use sysboot/pxe_utils.
>
> if "pxe_label_override" is set but does not exist in the pxe menu,
> the code should fallback to the default label if given, and no failure
> is returned but rather a warning message.
>
>
> Signed-off-by: Amjad Ouled-Ameur <aouledameur at baylibre.com>
> ---
>
> Changes in v2:
> - Use !strcmp() instead of strcmp()==0
> - Add "pxe_label_override" documentation
>
>  boot/pxe_utils.c | 15 +++++++++++++++
>  doc/README.pxe   |  6 ++++++
>  2 files changed, 21 insertions(+)
>
> diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
> index a7a84f26c1d5..defc806fdc4f 100644
> --- a/boot/pxe_utils.c
> +++ b/boot/pxe_utils.c
> @@ -1349,9 +1349,11 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
>         struct pxe_label *label;
>         struct list_head *pos;
>         struct menu *m;
> +       char *label_override;
>         int err;
>         int i = 1;
>         char *default_num = NULL;
> +       char *override_num = NULL;
>
>         /*
>          * Create a menu and add items for all the labels.
> @@ -1361,6 +1363,8 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
>         if (!m)
>                 return NULL;
>
> +       label_override = env_get("pxe_label_override");
> +
>         list_for_each(pos, &cfg->labels) {
>                 label = list_entry(pos, struct pxe_label, list);
>
> @@ -1372,6 +1376,17 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)
>                 if (cfg->default_label &&
>                     (strcmp(label->name, cfg->default_label) == 0))
>                         default_num = label->num;
> +               if (label_override && !strcmp(label->name, label_override))
> +                       override_num = label->num;
> +       }
> +
> +
> +       if (label_override) {
> +               if (override_num)
> +                       default_num = override_num;
> +               else
> +                       printf("Missing override pxe label: %s\n",
> +                             label_override);
>         }
>
>         /*
> diff --git a/doc/README.pxe b/doc/README.pxe
> index b67151ca510e..a1f0423adbec 100644
> --- a/doc/README.pxe
> +++ b/doc/README.pxe
> @@ -92,6 +92,12 @@ pxe boot
>       fdtoverlay_addr_r - location in RAM at which 'pxe boot' will temporarily store
>       fdt overlay(s) before applying them to the fdt blob stored at 'fdt_addr_r'.
>
> +     pxe_label_override - override label to be used, if exists, instead of the
> +     default label. This will allow consumers to choose a pxe label at
> +     runtime instead of having to prompt the user. If "pxe_label_override" is set
> +     but does not exist in the pxe menu, pxe would fallback to the default label if
> +     given, and no failure is returned but rather a warning message.
> +
>  pxe file format
>  ===============
>  The pxe file format is nearly a subset of the PXELINUX file format; see
> --
> 2.25.1
>
Reviewed-by: Ramon Fried <rfried.dev at gmail.com>


More information about the U-Boot mailing list