]> Git Repo - J-u-boot.git/blobdiff - cmd/booti.c
Merge patch series "Resolve issues with booting distros on x86"
[J-u-boot.git] / cmd / booti.c
index d3cceb7e0a39eb932888143ad213397a78d4dd91..898df0f8896bfb728422b372436eb7361a2c89bf 100644 (file)
@@ -20,9 +20,9 @@ DECLARE_GLOBAL_DATA_PTR;
 /*
  * Image booting support
  */
-static int booti_start(struct cmd_tbl *cmdtp, int flag, int argc,
-                      char *const argv[], struct bootm_headers *images)
+static int booti_start(struct bootm_info *bmi)
 {
+       struct bootm_headers *images = bmi->images;
        int ret;
        ulong ld;
        ulong relocated_addr;
@@ -34,16 +34,15 @@ static int booti_start(struct cmd_tbl *cmdtp, int flag, int argc,
        unsigned long decomp_len;
        int ctype;
 
-       ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START,
-                             images, 1);
+       ret = bootm_run_states(bmi, BOOTM_STATE_START);
 
        /* Setup Linux kernel Image entry point */
-       if (!argc) {
+       if (!bmi->addr_img) {
                ld = image_load_addr;
                debug("*  kernel: default image load address = 0x%08lx\n",
                                image_load_addr);
        } else {
-               ld = hextoul(argv[0], NULL);
+               ld = hextoul(bmi->addr_img, NULL);
                debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
        }
 
@@ -95,9 +94,8 @@ static int booti_start(struct cmd_tbl *cmdtp, int flag, int argc,
         * Handle the BOOTM_STATE_FINDOTHER state ourselves as we do not
         * have a header that provide this informaiton.
         */
-       if (bootm_find_images(image_load_addr, cmd_arg1(argc, argv),
-                             cmd_arg2(argc, argv), relocated_addr,
-                             image_size))
+       if (bootm_find_images(image_load_addr, bmi->conf_ramdisk, bmi->conf_fdt,
+                             relocated_addr, image_size))
                return 1;
 
        return 0;
@@ -105,13 +103,25 @@ static int booti_start(struct cmd_tbl *cmdtp, int flag, int argc,
 
 int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
+       struct bootm_info bmi;
        int states;
        int ret;
 
        /* Consume 'booti' */
        argc--; argv++;
 
-       if (booti_start(cmdtp, flag, argc, argv, &images))
+       bootm_init(&bmi);
+       if (argc)
+               bmi.addr_img = argv[0];
+       if (argc > 1)
+               bmi.conf_ramdisk = argv[1];
+       if (argc > 2)
+               bmi.conf_fdt = argv[2];
+       bmi.boot_progress = true;
+       bmi.cmd_name = "booti";
+       /* do not set up argc and argv[] since nothing uses them */
+
+       if (booti_start(&bmi))
                return 1;
 
        /*
@@ -130,7 +140,8 @@ int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
                BOOTM_STATE_OS_FAKE_GO | BOOTM_STATE_OS_GO;
        if (IS_ENABLED(CONFIG_SYS_BOOT_RAMDISK_HIGH))
                states |= BOOTM_STATE_RAMDISK;
-       ret = do_bootm_states(cmdtp, flag, argc, argv, states, &images, 1);
+
+       ret = bootm_run_states(&bmi, states);
 
        return ret;
 }
This page took 0.026381 seconds and 4 git commands to generate.