pinctrl: mvebu: Make drivers depend on the pinctrl framework
[oweals/u-boot.git] / cmd / bootefi.c
index b894403ff6777132327bcb3230cece53c0093fc8..78ff109835d4f9e8ffc9dfc4809cfece614ba5e5 100644 (file)
@@ -218,6 +218,8 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
                efi_install_configuration_table(&fdt_guid, NULL);
        }
 
+       /* Transfer environment variable bootargs as load options */
+       set_load_options(&loaded_image_info, "bootargs");
        /* Load the EFI payload */
        entry = efi_load_pe(efi, &loaded_image_info);
        if (!entry) {
@@ -252,7 +254,8 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
                dcache_disable();       /* flush cache before switch to EL2 */
 
                /* Move into EL2 and keep running there */
-               armv8_switch_to_el2((ulong)entry, (ulong)&loaded_image_info,
+               armv8_switch_to_el2((ulong)entry,
+                                   (ulong)&loaded_image_info_obj.handle,
                                    (ulong)&systab, 0, (ulong)efi_run_in_el2,
                                    ES_TO_AARCH64);
 
@@ -261,7 +264,7 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
        }
 #endif
 
-       ret = efi_do_enter(&loaded_image_info, &systab, entry);
+       ret = efi_do_enter(loaded_image_info_obj.handle, &systab, entry);
 
 exit:
        /* image has returned, loaded-image obj goes *poof*: */
@@ -348,9 +351,11 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                /* Transfer environment variable efi_selftest as load options */
                set_load_options(&loaded_image_info, "efi_selftest");
                /* Execute the test */
-               r = efi_selftest(&loaded_image_info, &systab);
+               r = efi_selftest(loaded_image_info_obj.handle, &systab);
+               efi_restore_gd();
                free(loaded_image_info.load_options);
-               return r;
+               list_del(&loaded_image_info_obj.link);
+               return r != EFI_SUCCESS;
        } else
 #endif
        if (!strcmp(argv[1], "bootmgr")) {
@@ -432,6 +437,8 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
                int part;
 
                desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
+               if (!desc)
+                       return;
                part = parse_partnum(devnr);
 
                bootefi_device_path = efi_dp_from_part(desc, part);