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

Amjad Ouled-Ameur aouledameur at baylibre.com
Sat Nov 13 14:09:20 CET 2021


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



More information about the U-Boot mailing list