]> git.sur5r.net Git - u-boot/commitdiff
efi_loader: disk: iterate only over valid block devices
authorxypron.glpk@gmx.de <xypron.glpk@gmx.de>
Tue, 20 Jun 2017 19:10:27 +0000 (19:10 +0000)
committerAlexander Graf <agraf@suse.de>
Wed, 19 Jul 2017 12:14:41 +0000 (14:14 +0200)
The efi_loader currently stops iterating over the available
block devices stopping at the first device that fails.
This may imply that no block device is found.

With the patch efi_loader only iterates over valid devices.

It is based on patch
06d592bf52f6 (dm: core: Add uclass_first/next_device_check())
which is currently in u-boot-dm.git.

For testing I used an odroid-c2 with a dts including
&sd_emmc_a {
status = "okay";
};
This device does not exist on the board and cannot be initialized.

Without the patch:

=> bootefi hello
## Starting EFI application at 01000000 ...
WARNING: Invalid device tree, expect boot to fail
mmc_init: -95, time 1806
Found 0 disks
Hello, world!
## Application terminated, r = 0

With the patch:

=> bootefi hello
## Starting EFI application at 01000000 ...
WARNING: Invalid device tree, expect boot to fail
mmc_init: -95, time 1806
Scanning disk mmc@70000.blk...
Scanning disk mmc@72000.blk...
Card did not respond to voltage select!
mmc_init: -95, time 9
Scanning disk mmc@74000.blk...
Found 3 disks
Hello, world!
## Application terminated, r = 0

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
lib/efi_loader/efi_disk.c

index 3ad7706472cf1ba78c3fa98f3108ebee8a64f599..7f8970496f5b6414e93c30cee49fb3f71590cefd 100644 (file)
@@ -266,9 +266,9 @@ int efi_disk_register(void)
 #ifdef CONFIG_BLK
        struct udevice *dev;
 
-       for (uclass_first_device(UCLASS_BLK, &dev);
+       for (uclass_first_device_check(UCLASS_BLK, &dev);
             dev;
-            uclass_next_device(&dev)) {
+            uclass_next_device_check(&dev)) {
                struct blk_desc *desc = dev_get_uclass_platdata(dev);
                const char *if_typename = dev->driver->name;