]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: Drop code that doesn't work with driver model
authorSimon Glass <sjg@chromium.org>
Sat, 25 Sep 2021 00:30:17 +0000 (18:30 -0600)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 21 Oct 2021 01:46:03 +0000 (03:46 +0200)
This code should never have been added as it builds a new feature on top
of legacy code. This has already been improved with the dependency on BLK.

Add a dependency on DM_ETH also, to avoid needing to deal with this old
code.

Boards which want EFI_LOADER should migrate to driver model first.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_driver/Makefile
lib/efi_loader/Kconfig
lib/efi_loader/efi_device_path.c
lib/efi_loader/efi_disk.c

index 83baa1c9a498c33e9313779e1e5860bad1285cfc..f2b6c05cc2404be5af1ca8244588a9257ed3e551 100644 (file)
@@ -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
index 83d584a60e527ce1573c2cc1e4e4f26491a7af32..06633e90a10cdd14ecf891932586f6528bb3e131 100644 (file)
@@ -11,6 +11,7 @@ config EFI_LOADER
        # 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
index cbdb466da41cdcb8dcc7245c386ddbff282d0e7d..a09090a32e4af6c9f3124311b908aace9c7d7483 100644 (file)
@@ -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;
 
index 988907ecb9100fea3364cab3cfa5bcee745db016..ef8b5c88ff9db1a17ec6cecfaa6d6dc1a49f6822 100644 (file)
@@ -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;