]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
pxe: Allow booting without CMDLINE for the zboot method
authorSimon Glass <sjg@chromium.org>
Fri, 15 Dec 2023 04:19:13 +0000 (21:19 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 10 Apr 2024 23:04:25 +0000 (17:04 -0600)
Use zboot_run() to boot rather than the command line. This allows
extlinux to be used (on x86) without CMDLINE being enabled.

Collect any error but do not return it, to match the existing code.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/pxe_utils.c

index c9da82b8e45ff9e285736d15ec4b95242c9b9844..5ceabfd04ee6d18f5aa3020f2e9dee5a14eb2ac0 100644 (file)
@@ -568,10 +568,8 @@ static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
                          char *initrd_addr_str, char *initrd_filesize)
 {
        struct bootm_info bmi;
-       char *zboot_argv[] = { "zboot", NULL, "0", NULL, NULL };
        const char *fdt_addr;
        ulong kernel_addr_r;
-       int zboot_argc = 3;
        void *buf;
        int ret;
 
@@ -625,16 +623,10 @@ static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
        }
 
        bmi.addr_fit = kernel_addr;
-       zboot_argv[1] = kernel_addr;
 
-       if (initrd_addr_str) {
+       if (initrd_addr_str)
                bmi.conf_ramdisk = initrd_str;
 
-               zboot_argv[3] = initrd_addr_str;
-               zboot_argv[4] = initrd_filesize;
-               zboot_argc = 5;
-       }
-
        if (!fdt_addr)
                fdt_addr = env_get("fdt_addr");
 
@@ -657,8 +649,13 @@ static int label_run_boot(struct pxe_context *ctx, struct pxe_label *label,
        else if (IS_ENABLED(CONFIG_BOOTM))
                ret = bootz_run(&bmi);
        /* Try booting an x86_64 Linux kernel image */
-       else if (IS_ENABLED(CONFIG_CMD_ZBOOT))
-               do_zboot_parent(ctx->cmdtp, 0, zboot_argc, zboot_argv, NULL);
+       else if (IS_ENABLED(CONFIG_ZBOOT))
+               ret = zboot_run(hextoul(kernel_addr, NULL), 0,
+                               initrd_addr_str ?
+                                       hextoul(initrd_addr_str, NULL) : 0,
+                               initrd_addr_str ?
+                                       hextoul(initrd_filesize, NULL) : 0,
+                               0, NULL);
 
        unmap_sysmem(buf);