]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi: Improve logging in efi_disk
authorSimon Glass <sjg@chromium.org>
Tue, 17 Jan 2023 17:47:32 +0000 (10:47 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 23 Jan 2023 23:11:39 +0000 (18:11 -0500)
When this fails it can be time-consuming to debug. Add some debugging
to help with this. Also try to return error codes instead of just using
-1.

Signed-off-by: Simon Glass <sjg@chromium.org>
lib/efi_loader/efi_disk.c

index d170a86460551a4cd654d7952941ed5242077190..d2256713a8e7ab0698710f782b2bf27933101920 100644 (file)
@@ -424,13 +424,16 @@ static efi_status_t efi_disk_add_dev(
 
                if (!node) {
                        ret = EFI_OUT_OF_RESOURCES;
+                       log_debug("no node\n");
                        goto error;
                }
 
                /* Parent must expose EFI_BLOCK_IO_PROTOCOL */
                ret = efi_search_protocol(parent, &efi_block_io_guid, &handler);
-               if (ret != EFI_SUCCESS)
+               if (ret != EFI_SUCCESS) {
+                       log_debug("search failed\n");
                        goto error;
+               }
 
                /*
                 * Link the partition (child controller) to the block device
@@ -439,8 +442,10 @@ static efi_status_t efi_disk_add_dev(
                ret = efi_protocol_open(handler, &protocol_interface, NULL,
                                        &diskobj->header,
                                        EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER);
-               if (ret != EFI_SUCCESS)
-                               goto error;
+               if (ret != EFI_SUCCESS) {
+                       log_debug("prot open failed\n");
+                       goto error;
+               }
 
                diskobj->dp = efi_dp_append_node(dp_parent, node);
                efi_free_pool(node);
@@ -471,8 +476,10 @@ static efi_status_t efi_disk_add_dev(
                                         */
                                        esp_guid, NULL,
                                        NULL);
-       if (ret != EFI_SUCCESS)
+       if (ret != EFI_SUCCESS) {
+               log_debug("install failed %lx\n", ret);
                goto error;
+       }
 
        /*
         * On partitions or whole disks without partitions install the
@@ -485,8 +492,10 @@ static efi_status_t efi_disk_add_dev(
                ret = efi_add_protocol(&diskobj->header,
                                       &efi_simple_file_system_protocol_guid,
                                       diskobj->volume);
-               if (ret != EFI_SUCCESS)
+               if (ret != EFI_SUCCESS) {
+                       log_debug("simple FS failed\n");
                        return ret;
+               }
        }
        diskobj->ops = block_io_disk_template;
        diskobj->dev_index = dev_index;
@@ -556,18 +565,21 @@ static int efi_disk_create_raw(struct udevice *dev, efi_handle_t agent_handle)
        ret = efi_disk_add_dev(NULL, NULL, desc,
                               diskid, NULL, 0, &disk, agent_handle);
        if (ret != EFI_SUCCESS) {
-               if (ret == EFI_NOT_READY)
+               if (ret == EFI_NOT_READY) {
                        log_notice("Disk %s not ready\n", dev->name);
-               else
+                       ret = -EBUSY;
+               } else {
                        log_err("Adding disk for %s failed (err=%ld/%#lx)\n", dev->name, ret, ret);
+                       ret = -ENOENT;
+               }
 
-               return -1;
+               return ret;
        }
        if (efi_link_dev(&disk->header, dev)) {
                efi_free_pool(disk->dp);
                efi_delete_handle(&disk->header);
 
-               return -1;
+               return -EINVAL;
        }
 
        return 0;