bootstd: Correct virtio block-device handling
At present virtio tries to attach QEMU services to a bootdev device, which
cannot work. Add a check for this.
Also use bootdev_setup_sibling_blk() to create the bootdev device, since
it allows the correct name to be used and bootdev_get_sibling_blk() to
work as expected.
The bootdev is not created on sandbox since it does have a real virtio
device and it is not possible to read blocks.
Signed-off-by: Simon Glass <sjg@chromium.org>
Fixes: a60f7a3e35
("bootstd: Add a virtio bootdev")
Reported-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
965020c3f7
commit
a710f5b2eb
1 changed files with 6 additions and 2 deletions
|
@ -247,8 +247,8 @@ static int virtio_uclass_post_probe(struct udevice *udev)
|
|||
}
|
||||
device_set_name_alloced(vdev);
|
||||
|
||||
if (uc_priv->device == VIRTIO_ID_BLOCK) {
|
||||
ret = bootdev_setup_for_dev(udev, name);
|
||||
if (uc_priv->device == VIRTIO_ID_BLOCK && !IS_ENABLED(CONFIG_SANDBOX)) {
|
||||
ret = bootdev_setup_sibling_blk(vdev, "virtio_bootdev");
|
||||
if (ret)
|
||||
return log_msg_ret("bootdev", ret);
|
||||
}
|
||||
|
@ -275,6 +275,10 @@ static int virtio_uclass_child_pre_probe(struct udevice *vdev)
|
|||
int i;
|
||||
int ret;
|
||||
|
||||
/* bootdevs are not virtio devices */
|
||||
if (device_get_uclass_id(vdev) == UCLASS_BOOTDEV)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Save the real virtio device (eg: virtio-net, virtio-blk) to
|
||||
* the transport (parent) device's uclass priv for future use.
|
||||
|
|
Loading…
Reference in a new issue