On Mon, Aug 08, 2016 at 03:44:30PM -0600, Simon Glass wrote: > Hi Alexander, > > On 5 August 2016 at 06:49, Alexander Graf <ag...@suse.de> wrote: > > When using CONFIG_BLK, there were 2 issues: > > > > 1) The name we generate the device with has to match the > > name we set in efi_set_bootdev() > > > > 2) 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 <ag...@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. -- Tom
signature.asc
Description: Digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot