From 965020c3f7e11a8ee4f53023822d30d43345abde Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sat, 28 Jan 2023 15:00:19 -0700 Subject: bootstd: Probe the block device before use In some cases the block device is obtained but is not probed, since it is a sibling of the bootdev. Make sure it is probed, so it can be used without any trouble. This fixes a bug with virtio, where the device is accessed before it has been set up by the virtio uclass. Signed-off-by: Simon Glass Fixes: 201417d700a ("bootstd: Add the bootdev uclass") Reported-by: Ilias Apalodimas --- boot/bootdev-uclass.c | 3 +++ boot/bootflow.c | 4 ++++ 2 files changed, 7 insertions(+) (limited to 'boot') diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c index 99ee08e335..8103a11d1b 100644 --- a/boot/bootdev-uclass.c +++ b/boot/bootdev-uclass.c @@ -309,6 +309,9 @@ int bootdev_get_sibling_blk(struct udevice *dev, struct udevice **blkp) if (ret) return log_msg_ret("find", ret); } + ret = device_probe(blk); + if (ret) + return log_msg_ret("act", ret); *blkp = blk; return 0; diff --git a/boot/bootflow.c b/boot/bootflow.c index dc3f1f0c73..b8fa37ee2a 100644 --- a/boot/bootflow.c +++ b/boot/bootflow.c @@ -270,6 +270,10 @@ static int iter_incr(struct bootflow_iter *iter) if (ret) { bootflow_iter_set_dev(iter, NULL, 0); } else { + /* + * Probe the bootdev. This does not probe any attached + * block device, since they are siblings + */ ret = device_probe(dev); log_debug("probe %s %d\n", dev->name, ret); if (!log_msg_ret("probe", ret)) -- cgit v1.2.3