[PATCH 11/35] RFC: efi: Drop code that doesn't work with driver model
Heinrich Schuchardt
xypron.glpk at gmx.de
Wed Sep 8 19:44:02 CEST 2021
On 9/8/21 3:33 PM, Simon Glass wrote:
> This code should never have been added as it builds a new feature on top
> of legacy code. Drop it and add a dependency on BLK for this feature.
>
> Boards which want EFI_LOADER should migrate to driver model first.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
This patch is not related to the rest of the series and the code has a
different maintainer.
So, please, separate it from the series.
Best regards
Heinrich
> ---
>
> lib/efi_driver/Makefile | 2 +-
> lib/efi_loader/Kconfig | 2 +
> lib/efi_loader/efi_device_path.c | 96 +++++++-------------------------
> lib/efi_loader/efi_disk.c | 48 ----------------
> 4 files changed, 24 insertions(+), 124 deletions(-)
>
> diff --git a/lib/efi_driver/Makefile b/lib/efi_driver/Makefile
> index 83baa1c9a49..f2b6c05cc24 100644
> --- a/lib/efi_driver/Makefile
> +++ b/lib/efi_driver/Makefile
> @@ -6,6 +6,6 @@
> # object inclusion implicitly depends on it
>
> obj-y += efi_uclass.o
> -ifeq ($(CONFIG_BLK)$(CONFIG_PARTITIONS),yy)
> +ifeq ($(CONFIG_PARTITIONS),y)
> obj-y += efi_block_device.o
> endif
> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> index dacc3b58810..799aa1a7512 100644
> --- a/lib/efi_loader/Kconfig
> +++ b/lib/efi_loader/Kconfig
> @@ -10,6 +10,8 @@ config EFI_LOADER
> depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT
> # We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB
> depends on !EFI_STUB || !X86 || X86_64 || EFI_STUB_32BIT
> + depends on BLK
> + depends on DM_ETH || !NET
> default y if !ARM || SYS_CPU = armv7 || SYS_CPU = armv8
> select LIB_UUID
> select PARTITION_UUIDS
> diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
> index cbdb466da41..a09090a32e4 100644
> --- a/lib/efi_loader/efi_device_path.c
> +++ b/lib/efi_loader/efi_device_path.c
> @@ -46,7 +46,7 @@ static const struct efi_device_path_vendor ROOT = {
> .guid = U_BOOT_GUID,
> };
>
> -#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
> +#if defined(CONFIG_MMC)
> /*
> * Determine if an MMC device is an SD card.
> *
> @@ -486,7 +486,6 @@ bool efi_dp_is_multi_instance(const struct efi_device_path *dp)
> return p->sub_type == DEVICE_PATH_SUB_TYPE_INSTANCE_END;
> }
>
> -#ifdef CONFIG_DM
> /* size of device-path not including END node for device and all parents
> * up to the root device.
> */
> @@ -503,7 +502,6 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
> case UCLASS_ETH:
> return dp_size(dev->parent) +
> sizeof(struct efi_device_path_mac_addr);
> -#ifdef CONFIG_BLK
> case UCLASS_BLK:
> switch (dev->parent->uclass->uc_drv->id) {
> #ifdef CONFIG_IDE
> @@ -511,12 +509,12 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
> return dp_size(dev->parent) +
> sizeof(struct efi_device_path_atapi);
> #endif
> -#if defined(CONFIG_SCSI) && defined(CONFIG_DM_SCSI)
> +#if defined(CONFIG_SCSI)
> case UCLASS_SCSI:
> return dp_size(dev->parent) +
> sizeof(struct efi_device_path_scsi);
> #endif
> -#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
> +#if defined(CONFIG_MMC)
> case UCLASS_MMC:
> return dp_size(dev->parent) +
> sizeof(struct efi_device_path_sd_mmc_path);
> @@ -554,8 +552,7 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
> default:
> return dp_size(dev->parent);
> }
> -#endif
> -#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
> +#if defined(CONFIG_MMC)
> case UCLASS_MMC:
> return dp_size(dev->parent) +
> sizeof(struct efi_device_path_sd_mmc_path);
> @@ -590,7 +587,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> *vdp = ROOT;
> return &vdp[1];
> }
> -#ifdef CONFIG_DM_ETH
> +#ifdef CONFIG_NET
> case UCLASS_ETH: {
> struct efi_device_path_mac_addr *dp =
> dp_fill(buf, dev->parent);
> @@ -607,7 +604,6 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> return &dp[1];
> }
> #endif
> -#ifdef CONFIG_BLK
> case UCLASS_BLK:
> switch (dev->parent->uclass->uc_drv->id) {
> #ifdef CONFIG_SANDBOX
> @@ -662,7 +658,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> return &dp[1];
> }
> #endif
> -#if defined(CONFIG_SCSI) && defined(CONFIG_DM_SCSI)
> +#if defined(CONFIG_SCSI)
> case UCLASS_SCSI: {
> struct efi_device_path_scsi *dp =
> dp_fill(buf, dev->parent);
> @@ -676,7 +672,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> return &dp[1];
> }
> #endif
> -#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
> +#if defined(CONFIG_MMC)
> case UCLASS_MMC: {
> struct efi_device_path_sd_mmc_path *sddp =
> dp_fill(buf, dev->parent);
> @@ -727,8 +723,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> dev->name, dev->parent->uclass->uc_drv->id);
> return dp_fill(buf, dev->parent);
> }
> -#endif
> -#if defined(CONFIG_DM_MMC) && defined(CONFIG_MMC)
> +#if defined(CONFIG_MMC)
> case UCLASS_MMC: {
> struct efi_device_path_sd_mmc_path *sddp =
> dp_fill(buf, dev->parent);
> @@ -770,24 +765,18 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
> return dp_fill(buf, dev->parent);
> }
> }
> -#endif
>
> static unsigned dp_part_size(struct blk_desc *desc, int part)
> {
> unsigned dpsize;
> + struct udevice *dev;
> + int ret;
>
> -#ifdef CONFIG_BLK
> - {
> - struct udevice *dev;
> - int ret = blk_find_device(desc->if_type, desc->devnum, &dev);
> + ret = blk_find_device(desc->if_type, desc->devnum, &dev);
>
> - if (ret)
> - dev = desc->bdev->parent;
> - dpsize = dp_size(dev);
> - }
> -#else
> - dpsize = sizeof(ROOT) + sizeof(struct efi_device_path_usb);
> -#endif
> + if (ret)
> + dev = desc->bdev->parent;
> + dpsize = dp_size(dev);
>
> if (part == 0) /* the actual disk, not a partition */
> return dpsize;
> @@ -877,36 +866,14 @@ static void *dp_part_node(void *buf, struct blk_desc *desc, int part)
> */
> static void *dp_part_fill(void *buf, struct blk_desc *desc, int part)
> {
> -#ifdef CONFIG_BLK
> - {
> - struct udevice *dev;
> - int ret = blk_find_device(desc->if_type, desc->devnum, &dev);
> + struct udevice *dev;
> + int ret;
>
> - if (ret)
> - dev = desc->bdev->parent;
> - buf = dp_fill(buf, dev);
> - }
> -#else
> - /*
> - * We *could* make a more accurate path, by looking at if_type
> - * and handling all the different cases like we do for non-
> - * legacy (i.e. CONFIG_BLK=y) case. But most important thing
> - * is just to have a unique device-path for if_type+devnum.
> - * So map things to a fictitious USB device.
> - */
> - struct efi_device_path_usb *udp;
> -
> - memcpy(buf, &ROOT, sizeof(ROOT));
> - buf += sizeof(ROOT);
> -
> - udp = buf;
> - udp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
> - udp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_USB;
> - udp->dp.length = sizeof(*udp);
> - udp->parent_port_number = desc->if_type;
> - udp->usb_interface = desc->devnum;
> - buf = &udp[1];
> -#endif
> + ret = blk_find_device(desc->if_type, desc->devnum, &dev);
> +
> + if (ret)
> + dev = desc->bdev->parent;
> + buf = dp_fill(buf, dev);
>
> if (part == 0) /* the actual disk, not a partition */
> return buf;
> @@ -1051,39 +1018,18 @@ struct efi_device_path *efi_dp_from_uart(void)
> #ifdef CONFIG_NET
> struct efi_device_path *efi_dp_from_eth(void)
> {
> -#ifndef CONFIG_DM_ETH
> - struct efi_device_path_mac_addr *ndp;
> -#endif
> void *buf, *start;
> unsigned dpsize = 0;
>
> assert(eth_get_dev());
>
> -#ifdef CONFIG_DM_ETH
> dpsize += dp_size(eth_get_dev());
> -#else
> - dpsize += sizeof(ROOT);
> - dpsize += sizeof(*ndp);
> -#endif
>
> start = buf = dp_alloc(dpsize + sizeof(END));
> if (!buf)
> return NULL;
>
> -#ifdef CONFIG_DM_ETH
> buf = dp_fill(buf, eth_get_dev());
> -#else
> - memcpy(buf, &ROOT, sizeof(ROOT));
> - buf += sizeof(ROOT);
> -
> - ndp = buf;
> - ndp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
> - ndp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR;
> - ndp->dp.length = sizeof(*ndp);
> - ndp->if_type = 1; /* Ethernet */
> - memcpy(ndp->mac.addr, eth_get_ethaddr(), ARP_HLEN);
> - buf = &ndp[1];
> -#endif
>
> *((struct efi_device_path *)buf) = END;
>
> diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
> index 988907ecb91..ef8b5c88ff9 100644
> --- a/lib/efi_loader/efi_disk.c
> +++ b/lib/efi_loader/efi_disk.c
> @@ -555,7 +555,6 @@ efi_status_t efi_disk_register(void)
> struct efi_disk_obj *disk;
> int disks = 0;
> efi_status_t ret;
> -#ifdef CONFIG_BLK
> struct udevice *dev;
>
> for (uclass_first_device_check(UCLASS_BLK, &dev); dev;
> @@ -583,54 +582,7 @@ efi_status_t efi_disk_register(void)
> &disk->header, desc, if_typename,
> desc->devnum, dev->name);
> }
> -#else
> - int i, if_type;
>
> - /* Search for all available disk devices */
> - for (if_type = 0; if_type < IF_TYPE_COUNT; if_type++) {
> - const struct blk_driver *cur_drvr;
> - const char *if_typename;
> -
> - cur_drvr = blk_driver_lookup_type(if_type);
> - if (!cur_drvr)
> - continue;
> -
> - if_typename = cur_drvr->if_typename;
> - log_info("Scanning disks on %s...\n", if_typename);
> - for (i = 0; i < 4; i++) {
> - struct blk_desc *desc;
> - char devname[32] = { 0 }; /* dp->str is u16[32] long */
> -
> - desc = blk_get_devnum_by_type(if_type, i);
> - if (!desc)
> - continue;
> - if (desc->type == DEV_TYPE_UNKNOWN)
> - continue;
> -
> - snprintf(devname, sizeof(devname), "%s%d",
> - if_typename, i);
> -
> - /* Add block device for the full device */
> - ret = efi_disk_add_dev(NULL, NULL, if_typename, desc,
> - i, NULL, 0, &disk);
> - if (ret == EFI_NOT_READY) {
> - log_notice("Disk %s not ready\n", devname);
> - continue;
> - }
> - if (ret) {
> - log_err("ERROR: failure to add disk device %s, r = %lu\n",
> - devname, ret & ~EFI_ERROR_MASK);
> - return ret;
> - }
> - disks++;
> -
> - /* Partitions show up as block devices in EFI */
> - disks += efi_disk_create_partitions
> - (&disk->header, desc,
> - if_typename, i, devname);
> - }
> - }
> -#endif
> log_info("Found %d disks\n", disks);
>
> return EFI_SUCCESS;
>
More information about the U-Boot
mailing list