[PATCH v2 37/39] efi: Avoid using sandbox virtio devices
Simon Glass
sjg at chromium.org
Tue Aug 6 14:58:48 CEST 2024
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 <sjg at 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;
+ }
+ device_probe(dev);
}
return EFI_SUCCESS;
--
2.34.1
More information about the U-Boot
mailing list