[PATCH v3 44/46] boot: Detect booti format properly in pxe_utils

Simon Glass sjg at chromium.org
Fri Dec 6 03:36:23 CET 2024


Rather than assuming that a file can be booted with bootm, check that
the format is correct first. Do the same for booti.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v3:
- Add new patch to detect booti format properly in pxe_utils

 boot/pxe_utils.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
index 1468a8e8498..71347b19119 100644
--- a/boot/pxe_utils.c
+++ b/boot/pxe_utils.c
@@ -591,6 +591,7 @@ static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
 	ulong kernel_addr_r;
 	int ret = 0;
 	void *buf;
+	enum image_fmt_t  fmt;
 
 	bootm_init(&bmi);
 
@@ -608,13 +609,18 @@ static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
 	kernel_addr_r = genimg_get_kernel_addr(kernel_addr);
 	buf = map_sysmem(kernel_addr_r, 0);
 
-	/* Try bootm for legacy and FIT format image */
-	if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID &&
-	    IS_ENABLED(CONFIG_CMD_BOOTM)) {
+	/*
+	 * Try bootm for legacy and FIT format image, assume booti if
+	 * compressed
+	 */
+	fmt = genimg_get_format_comp(buf);
+
+	if (IS_ENABLED(CONFIG_CMD_BOOTM) && (fmt == IMAGE_FORMAT_FIT ||
+	    fmt == IMAGE_FORMAT_LEGACY)) {
 		log_debug("using bootm\n");
 		ret = bootm_run(&bmi);
 	/* Try booting an AArch64 Linux kernel image */
-	} else if (IS_ENABLED(CONFIG_CMD_BOOTI)) {
+	} else if (IS_ENABLED(CONFIG_CMD_BOOTI) && fmt == IMAGE_FORMAT_BOOTI) {
 		log_debug("using booti\n");
 		ret = booti_run(&bmi);
 	/* Try booting a Image */
-- 
2.34.1



More information about the U-Boot mailing list