efi_loader: correctly determine the boot partition
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 3 Apr 2018 20:40:55 +0000 (22:40 +0200)
committerAlexander Graf <agraf@suse.de>
Wed, 4 Apr 2018 11:14:33 +0000 (13:14 +0200)
The device path of the loaded image should be set to the partition
from which the image was loaded. This requires using the same logic as
the load command.

Without the patch the device path pointed to the whole disk after executing

load mmc 0: 0x43000000 FILE

and not to the boot partition from which the file was actually loaded.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
cmd/bootefi.c

index 6afece10bc12e5679d7d4216722320a9d4398c1e..2a31a914cdb3be29e4d5b411cc5d178958c093f9 100644 (file)
@@ -468,16 +468,6 @@ U_BOOT_CMD(
        bootefi_help_text
 );
 
-static int parse_partnum(const char *devnr)
-{
-       const char *str = strchr(devnr, ':');
-       if (str) {
-               str++;
-               return simple_strtoul(str, NULL, 16);
-       }
-       return 0;
-}
-
 void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
 {
        char filename[32] = { 0 }; /* dp->str is u16[32] long */
@@ -485,12 +475,13 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
 
        if (strcmp(dev, "Net")) {
                struct blk_desc *desc;
+               disk_partition_t fs_partition;
                int part;
 
-               desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
-               if (!desc)
+               part = blk_get_device_part_str(dev, devnr, &desc, &fs_partition,
+                                              1);
+               if (part < 0)
                        return;
-               part = parse_partnum(devnr);
 
                bootefi_device_path = efi_dp_from_part(desc, part);
        } else {