Signed-off-by: AKASHI Takahiro <[email protected]>
---
 lib/efi_driver/efi_block_device.c |  4 ----
 lib/efi_driver/efi_uclass.c       | 27 ++++++++++++++++++++++++++-
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/lib/efi_driver/efi_block_device.c 
b/lib/efi_driver/efi_block_device.c
index acef1b20867e..f3e7ebf6dc5e 100644
--- a/lib/efi_driver/efi_block_device.c
+++ b/lib/efi_driver/efi_block_device.c
@@ -118,16 +118,12 @@ static int efi_bl_bind(efi_handle_t handle, void 
*interface)
        struct udevice *bdev, *parent = dm_root();
        int ret, devnum;
        char *name;
-       struct efi_object *obj = efi_search_obj(handle);
        struct efi_block_io *io = interface;
        int disks;
        struct efi_blk_platdata *platdata;
 
        EFI_PRINT("%s: handle %p, interface %p\n", __func__, handle, io);
 
-       if (!obj)
-               return -ENOENT;
-
        devnum = blk_find_max_devnum(IF_TYPE_EFI);
        if (devnum == -ENODEV)
                devnum = 0;
diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c
index d42612a5ee03..bf6bc79837ba 100644
--- a/lib/efi_driver/efi_uclass.c
+++ b/lib/efi_driver/efi_uclass.c
@@ -18,6 +18,8 @@
  */
 
 #include <efi_driver.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
 
 /**
  * check_node_type() - check node type
@@ -272,8 +274,18 @@ static efi_status_t efi_add_driver(struct driver *drv)
        bp->bp.version = 0xffffffff;
        bp->ops = drv->ops;
 
-       ret = efi_create_handle(&bp->bp.driver_binding_handle);
+       ret = device_bind_driver(efi_root, drv->name, drv->name,
+                                &bp->bp.driver_binding_handle);
+       if (ret) {
+               free(bp);
+               goto out;
+       }
+
+       ret = efi_add_handle(bp->bp.driver_binding_handle);
        if (ret != EFI_SUCCESS) {
+#ifdef CONFIG_DM_DEVICE_REMOVE
+               device_unbind(bp->bp.driver_binding_handle);
+#endif
                free(bp);
                goto out;
        }
@@ -349,3 +361,16 @@ UCLASS_DRIVER(efi_driver) = {
        .init           = efi_uc_init,
        .destroy        = efi_uc_destroy,
 };
+
+static int efi_driver_binding_probe(struct udevice *dev)
+{
+       device_set_name(dev, "DRIVER_BINDING");
+
+       return 0;
+}
+
+U_BOOT_DRIVER(efi_driver_binding) = {
+       .name = "efi_driver_binding",
+       .id = UCLASS_EFI_PROTOCOL,
+       .probe = efi_driver_binding_probe,
+};
-- 
2.19.1

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to