diff options
author | Amjad Ouled-Ameur <aouledameur@baylibre.com> | 2021-11-13 14:09:20 +0100 |
---|---|---|
committer | Ramon Fried <ramon@neureality.ai> | 2022-01-15 18:42:48 +0200 |
commit | c2969792c46ce42a4429e41b4b81f42a5873ef07 (patch) | |
tree | 492e2f9663fe43e01a6582dadf28cf3ed2726210 | |
parent | 0dadad6d7c5769d6258baeaf1b8db843b0dfa01f (diff) | |
download | u-boot-c2969792c46ce42a4429e41b4b81f42a5873ef07.tar.gz u-boot-c2969792c46ce42a4429e41b4b81f42a5873ef07.tar.bz2 u-boot-c2969792c46ce42a4429e41b4b81f42a5873ef07.zip |
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>
-rw-r--r-- | boot/pxe_utils.c | 15 | ||||
-rw-r--r-- | doc/README.pxe | 6 |
2 files changed, 21 insertions, 0 deletions
diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c index a32acca8ee..fcfee5e8b9 100644 --- a/boot/pxe_utils.c +++ b/boot/pxe_utils.c @@ -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); } /* diff --git a/doc/README.pxe b/doc/README.pxe index b67151ca51..a1f0423adb 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 |