cmd: pxe_utils: sysboot: add label override support

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@baylibre.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Artem Lapkin <email2tema@gmail.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
This commit is contained in:
Amjad Ouled-Ameur 2021-11-13 14:09:20 +01:00 committed by Ramon Fried
parent 0dadad6d7c
commit c2969792c4
2 changed files with 21 additions and 0 deletions

View File

@ -1355,9 +1355,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.
@ -1367,6 +1369,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);
@ -1378,6 +1382,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);
}
/*

View File

@ -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