On 06.08.24 14:58, Simon Glass wrote:
While sandbox supports virtio it cannot support actually using the block
devices to read files, since there is nothing on the other end of the
'virtqueue'.
A recent change makes EFI probe all block devices, whether used or not.
This is apparently required by EFI, although it violates U-Boot's
lazy-init principle.
We cannot just drop the virtio devices as they are used in sandbox tests.
So for now just add a special case to work around this.
Signed-off-by: Simon Glass <s...@chromium.org>
---
(no changes since v1)
lib/efi_loader/efi_disk.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
index 93a9a5ac025..2e1d37848fc 100644
--- a/lib/efi_loader/efi_disk.c
+++ b/lib/efi_loader/efi_disk.c
@@ -838,8 +838,20 @@ efi_status_t efi_disk_get_device_name(const efi_handle_t
handle, char *buf, int
efi_status_t efi_disks_register(void)
{
struct udevice *dev;
+ struct uclass *uc;
- uclass_foreach_dev_probe(UCLASS_BLK, dev) {
+ uclass_id_foreach_dev(UCLASS_BLK, dev, uc) {
+ /*
+ * The virtio block-device hangs on sandbox when accessed since
+ * there is nothing listening to the mailbox
+ */
+ if (IS_ENABLED(CONFIG_SANDBOX)) {
+ struct blk_desc *desc = dev_get_uclass_plat(dev);
+
+ if (desc->uclass_id == UCLASS_VIRTIO)
+ continue;
We should avoid depending on the sandbox everywhere.
Please, fix the problem in the sandbox driver.
If you cannot fix it, run the tests involving virtio on QEMU instead of
the sandbox.
Best regards
Heinrich
+ }
+ device_probe(dev);
}
return EFI_SUCCESS;