In the current implementation, EFI_SIMPLEFILE_SYSTEM_PROTOCOL is always
installed to all the partitions even if some of them may house no file
system.

With this patch, that protocol will be installed only if FAT file system
exists.

Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org>
---
 lib/efi_loader/efi_disk.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
index 7a6b06821a47..d72f455901f2 100644
--- a/lib/efi_loader/efi_disk.c
+++ b/lib/efi_loader/efi_disk.c
@@ -9,6 +9,7 @@
 #include <blk.h>
 #include <dm.h>
 #include <efi_loader.h>
+#include <fs.h>
 #include <part.h>
 #include <malloc.h>
 
@@ -217,6 +218,19 @@ efi_fs_from_path(struct efi_device_path *full_path)
        return handler->protocol_interface;
 }
 
+static int efi_fs_exists(struct blk_desc *desc, int part)
+{
+       if (fs_set_blk_dev_with_part(desc, part))
+               return 0;
+
+       if (strcmp(fs_get_type_name(), "fat"))
+               return 0;
+
+       fs_close();
+
+       return 1;
+}
+
 /*
  * Create a handle for a partition or disk
  *
@@ -270,7 +284,7 @@ static efi_status_t efi_disk_add_dev(
                               diskobj->dp);
        if (ret != EFI_SUCCESS)
                return ret;
-       if (part >= 1) {
+       if (part >= 1 && efi_fs_exists(desc, part)) {
                diskobj->volume = efi_simple_file_system(desc, part,
                                                         diskobj->dp);
                ret = efi_add_protocol(&diskobj->header,
-- 
2.21.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to