fs: do_load: pass device path for efi payload
authorMian Yousaf Kaukab <ykaukab@suse.de>
Tue, 18 Jun 2019 13:03:44 +0000 (15:03 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 20 Jun 2019 22:26:20 +0000 (22:26 +0000)
fatload command can be used to load the EFI payload since EFI system
partition is always a FAT partition. Call into EFI code from do_load()
to set the device path from which the last binary was loaded. An EFI
application like grub2 can’t find its configuration file without the
device path set.

Since device path is now set in do_load() there is no need to set it
in do_load_wrapper() for the load command.

Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
cmd/fs.c
fs/fs.c

index aaafbf9b52b2e09dc8f2c857748470a09e5876ae..db74767b7b176ee6c6a6ae5e52daeb76f64729e3 100644 (file)
--- a/cmd/fs.c
+++ b/cmd/fs.c
@@ -8,7 +8,6 @@
 #include <common.h>
 #include <command.h>
 #include <fs.h>
-#include <efi_loader.h>
 
 static int do_size_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
@@ -26,10 +25,6 @@ U_BOOT_CMD(
 static int do_load_wrapper(cmd_tbl_t *cmdtp, int flag, int argc,
                                char * const argv[])
 {
-#ifdef CONFIG_CMD_BOOTEFI
-       efi_set_bootdev(argv[1], (argc > 2) ? argv[2] : "",
-                       (argc > 4) ? argv[4] : "");
-#endif
        return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY);
 }
 
diff --git a/fs/fs.c b/fs/fs.c
index 736ebef4a93917fc84590d2739a73cc9f2793138..48d8f1f6dab88ada6d4debf1cd51d299300c783d 100644 (file)
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -17,6 +17,7 @@
 #include <asm/io.h>
 #include <div64.h>
 #include <linux/math64.h>
+#include <efi_loader.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -700,6 +701,10 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
        else
                pos = 0;
 
+#ifdef CONFIG_CMD_BOOTEFI
+       efi_set_bootdev(argv[1], (argc > 2) ? argv[2] : "",
+                       (argc > 4) ? argv[4] : "");
+#endif
        time = get_timer(0);
        ret = _fs_read(filename, addr, pos, bytes, 1, &len_read);
        time = get_timer(time);