
On Mon, Aug 08, 2016 at 03:44:30PM -0600, Simon Glass wrote:
Hi Alexander,
On 5 August 2016 at 06:49, Alexander Graf agraf@suse.de wrote:
When using CONFIG_BLK, there were 2 issues:
The name we generate the device with has to match the name we set in efi_set_bootdev()
The device we pass into our block functions was wrong, we should not rediscover it but just use the already known pointer.
This patch fixes both issues.
Signed-off-by: Alexander Graf agraf@suse.de
cmd/bootefi.c | 23 ++++++++++++++++++----- lib/efi_loader/efi_disk.c | 18 +++++++++++------- 2 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/cmd/bootefi.c b/cmd/bootefi.c index b8ecf4c..53a6ee3 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -8,6 +8,7 @@
#include <common.h> #include <command.h> +#include <dm/device.h> #include <efi_loader.h> #include <errno.h> #include <libfdt.h> @@ -269,18 +270,30 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path) char devname[32] = { 0 }; /* dp->str is u16[32] long */ char *colon;
/* Assemble the condensed device name we use in efi_disk.c */
snprintf(devname, sizeof(devname), "%s%s", dev, devnr);
+#if defined(CONFIG_BLK) || defined(CONFIG_ISO_PARTITION)
desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
+#endif
+#ifdef CONFIG_BLK
if (desc) {
snprintf(devname, sizeof(devname), "%s", desc->bdev->name);
} else
+#endif
{
/* Assemble the condensed device name we use in efi_disk.c */
snprintf(devname, sizeof(devname), "%s%s", dev, devnr);
}
colon = strchr(devname, ':');
#ifdef CONFIG_ISO_PARTITION /* For ISOs we create partition block devices */
desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10)); if (desc && (desc->type != DEV_TYPE_UNKNOWN) && (desc->part_type == PART_TYPE_ISO)) { if (!colon)
snprintf(devname, sizeof(devname), "%s%s:1", dev,
devnr);
snprintf(devname, sizeof(devname), "%s:1", devname);
colon = NULL; }
#endif diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index c434c92..e00a747 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -31,6 +31,8 @@ struct efi_disk_obj { struct efi_device_path_file_path *dp; /* Offset into disk for simple partitions */ lbaint_t offset;
/* Internal block device */
const struct blk_desc *desc;
Rather than storing this, can you store the udevice?
Sorry, I had had this patch testing for a bit and missed this.