提交 f0ebcf8c 编写于 作者: D David Abdurachmanov 提交者: Tom Rini

distro_bootcmd: refactor virtio to support PCI block devices

Starting libvirt v5.3.0 with QEMU 4.0.0 use of PCI is automatic
and thus storage is connected via PCI, which is not visible to
U-Boot out-of-the-box.

Refactor to do "pci enum" followed by "virtio scan" to see PCI
connected storage, and allow bootloader to load kernel and
initramfs images.

Tested with Fedora/RISCV using releases: libvirt 5.4.0 & 5.5.0,
QEMU 4.0.0 and U-Boot 2019.07 RC4.
Signed-off-by: NDavid Abdurachmanov <david.abdurachmanov@sifive.com>
上级 26557d10
...@@ -254,11 +254,11 @@ ...@@ -254,11 +254,11 @@
#endif #endif
#if defined(CONFIG_DM_PCI) #if defined(CONFIG_DM_PCI)
#define BOOTENV_RUN_NET_PCI_ENUM "run boot_net_pci_enum; " #define BOOTENV_RUN_PCI_ENUM "run boot_pci_enum; "
#define BOOTENV_SHARED_PCI \ #define BOOTENV_SHARED_PCI \
"boot_net_pci_enum=pci enum\0" "boot_pci_enum=pci enum\0"
#else #else
#define BOOTENV_RUN_NET_PCI_ENUM #define BOOTENV_RUN_PCI_ENUM
#define BOOTENV_SHARED_PCI #define BOOTENV_SHARED_PCI
#endif #endif
...@@ -281,10 +281,24 @@ ...@@ -281,10 +281,24 @@
#endif #endif
#ifdef CONFIG_CMD_VIRTIO #ifdef CONFIG_CMD_VIRTIO
#define BOOTENV_SHARED_VIRTIO BOOTENV_SHARED_BLKDEV(virtio) #define BOOTENV_RUN_VIRTIO_INIT "run virtio_init; "
#define BOOTENV_SET_VIRTIO_NEED_INIT "virtio_need_init=; "
#define BOOTENV_SHARED_VIRTIO \
"virtio_init=" \
"if ${virtio_need_init}; then " \
"virtio_need_init=false; " \
"virtio scan; " \
"fi\0" \
\
"virtio_boot=" \
BOOTENV_RUN_PCI_ENUM \
BOOTENV_RUN_VIRTIO_INIT \
BOOTENV_SHARED_BLKDEV_BODY(virtio)
#define BOOTENV_DEV_VIRTIO BOOTENV_DEV_BLKDEV #define BOOTENV_DEV_VIRTIO BOOTENV_DEV_BLKDEV
#define BOOTENV_DEV_NAME_VIRTIO BOOTENV_DEV_NAME_BLKDEV #define BOOTENV_DEV_NAME_VIRTIO BOOTENV_DEV_NAME_BLKDEV
#else #else
#define BOOTENV_RUN_VIRTIO_INIT
#define BOOTENV_SET_VIRTIO_NEED_INIT
#define BOOTENV_SHARED_VIRTIO #define BOOTENV_SHARED_VIRTIO
#define BOOTENV_DEV_VIRTIO \ #define BOOTENV_DEV_VIRTIO \
BOOT_TARGET_DEVICES_references_VIRTIO_without_CONFIG_CMD_VIRTIO BOOT_TARGET_DEVICES_references_VIRTIO_without_CONFIG_CMD_VIRTIO
...@@ -350,7 +364,7 @@ ...@@ -350,7 +364,7 @@
#define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \ #define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \
"bootcmd_dhcp=" \ "bootcmd_dhcp=" \
BOOTENV_RUN_NET_USB_START \ BOOTENV_RUN_NET_USB_START \
BOOTENV_RUN_NET_PCI_ENUM \ BOOTENV_RUN_PCI_ENUM \
"if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \ "if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \
"source ${scriptaddr}; " \ "source ${scriptaddr}; " \
"fi;" \ "fi;" \
...@@ -369,7 +383,7 @@ ...@@ -369,7 +383,7 @@
#define BOOTENV_DEV_PXE(devtypeu, devtypel, instance) \ #define BOOTENV_DEV_PXE(devtypeu, devtypel, instance) \
"bootcmd_pxe=" \ "bootcmd_pxe=" \
BOOTENV_RUN_NET_USB_START \ BOOTENV_RUN_NET_USB_START \
BOOTENV_RUN_NET_PCI_ENUM \ BOOTENV_RUN_PCI_ENUM \
"dhcp; " \ "dhcp; " \
"if pxe get; then " \ "if pxe get; then " \
"pxe boot; " \ "pxe boot; " \
...@@ -465,6 +479,7 @@ ...@@ -465,6 +479,7 @@
"distro_bootcmd=" BOOTENV_SET_SCSI_NEED_INIT \ "distro_bootcmd=" BOOTENV_SET_SCSI_NEED_INIT \
BOOTENV_SET_NVME_NEED_INIT \ BOOTENV_SET_NVME_NEED_INIT \
BOOTENV_SET_IDE_NEED_INIT \ BOOTENV_SET_IDE_NEED_INIT \
BOOTENV_SET_VIRTIO_NEED_INIT \
"for target in ${boot_targets}; do " \ "for target in ${boot_targets}; do " \
"run bootcmd_${target}; " \ "run bootcmd_${target}; " \
"done\0" "done\0"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册