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:
		
							parent
							
								
									0dadad6d7c
								
							
						
					
					
						commit
						c2969792c4
					
				|  | @ -1355,9 +1355,11 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg) | ||||||
| 	struct pxe_label *label; | 	struct pxe_label *label; | ||||||
| 	struct list_head *pos; | 	struct list_head *pos; | ||||||
| 	struct menu *m; | 	struct menu *m; | ||||||
|  | 	char *label_override; | ||||||
| 	int err; | 	int err; | ||||||
| 	int i = 1; | 	int i = 1; | ||||||
| 	char *default_num = NULL; | 	char *default_num = NULL; | ||||||
|  | 	char *override_num = NULL; | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * Create a menu and add items for all the labels. | 	 * 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) | 	if (!m) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
|  | 	label_override = env_get("pxe_label_override"); | ||||||
|  | 
 | ||||||
| 	list_for_each(pos, &cfg->labels) { | 	list_for_each(pos, &cfg->labels) { | ||||||
| 		label = list_entry(pos, struct pxe_label, list); | 		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 && | 		if (cfg->default_label && | ||||||
| 		    (strcmp(label->name, cfg->default_label) == 0)) | 		    (strcmp(label->name, cfg->default_label) == 0)) | ||||||
| 			default_num = label->num; | 			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); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
|  |  | ||||||
|  | @ -92,6 +92,12 @@ pxe boot | ||||||
|      fdtoverlay_addr_r - location in RAM at which 'pxe boot' will temporarily store |      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'. |      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 | pxe file format | ||||||
| =============== | =============== | ||||||
| The pxe file format is nearly a subset of the PXELINUX file format; see | The pxe file format is nearly a subset of the PXELINUX file format; see | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue