diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c index 4ac519228a..9f5177505d 100644 --- a/lib/efi_loader/efi_bootmgr.c +++ b/lib/efi_loader/efi_bootmgr.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -306,6 +307,7 @@ err: static efi_status_t fill_default_file_path(struct udevice *blk, struct efi_device_path **dp) { + struct blk_desc *desc = dev_get_uclass_plat(blk); efi_status_t ret; struct udevice *partition; @@ -314,6 +316,26 @@ static efi_status_t fill_default_file_path(struct udevice *blk, if (ret == EFI_SUCCESS) return ret; + /* try EFI system partition */ + if (desc->uclass_id == efi_system_partition.uclass_id && + desc->devnum == efi_system_partition.devnum) { + device_foreach_child(partition, blk) { + struct disk_part *part; + enum uclass_id id; + + id = device_get_uclass_id(partition); + if (id != UCLASS_PARTITION) + continue; + + part = dev_get_uclass_plat(partition); + if (part->partnum == efi_system_partition.part) { + ret = search_default_file(partition, dp); + if (ret == EFI_SUCCESS) + return ret; + } + } + } + /* try the partitions */ device_foreach_child(partition, blk) { enum uclass_id id;