[U-Boot] [PATCH 00/27] virtio: Introduce VirtIO driver support
Bin Meng
bmeng.cn at gmail.com
Sun Sep 23 13:41:58 UTC 2018
This series brings in VirtIO driver support in U-Boot. The work is based
on Tuomas's virtio support on QEMU ARM targets.
VirtIO is a virtualization standard for network and disk device drivers
where just the guest's device driver "knows" it is running in a virtual
environment, and cooperates with the hypervisor. This enables guests to
get high performance network and disk operations, and gives most of the
performance benefits of paravirtualization. In the U-Boot case, the
guest is U-Boot itself, while the virtual environment are normally QEMU
targets like ARM, RISC-V and x86.
Both VirtIO MMIO and PCI transport options are supported. Only VirtIO
network and block device drivers are supported for now.
The following QEMU targets are supported.
- qemu_arm_defconfig
- qemu_arm64_defconfig
- qemu-riscv32_defconfig
- qemu-riscv64_defconfig
- qemu-x86_defconfig
- qemu-x86_64_defconfig
A new child_post_probe() uclass driver method is introduced to better
support virtio device driver. This also changes BLK uclass driver to
supply a post_probe() method which calls part_init(), so that we can
avoid duplicating such call in every BLK driver.
Not every checkpatch warning reported was fixed, but I tried to fix as
many as possible which makes sense.
This series needs to be applied after the risc-v QEMU series is applied.
This series is available at u-boot-x86/virtio-working for testing.
Note the branch already contains the risc-v QEMU series plus one network
stack fix to make virtio-net driver happy.
Bin Meng (22):
dm: core: Allow uclass to set up a device's child after it is probed
dm: Add a new uclass driver for VirtIO transport devices
virtio: Add virtio over mmio transport driver
test: dm: blk: Correct blk_base test case
sandbox: blk: Switch to use platdata_auto_alloc_size for the driver
data
efi_driver: blk: Switch to use platdata_auto_alloc_size for the driver
data
blk: Call part_init() in the post_probe() method
blk: Drop blk_prepare_device()
blk: Make blk_next_free_devnum() public
arm: qemu: Add a Kconfig in the board directory
arm: qemu: Enumerate virtio bus during early boot
riscv: qemu: Enumerate virtio bus during early boot
riscv: qemu: Include some useful commands
kconfig: Introduce HAVE_ARCH_IOMAP
x86: Implement arch-specific io accessor routines
virtio: Add virtio over pci transport driver
x86: qemu: Imply virtio PCI transport and device drivers
dm: pci: Add APIs to find next capability and extended capability
test: dm: pci: Add cases for finding next PCI capability APIs
virtio: pci: Support non-legacy PCI transport device
virtio: net: Support non-legacy device
doc: Document virtio support
Tuomas Tynkkynen (5):
virtio: Add codes for virtual queue/ring management
virtio: Add net driver support
blk: Introduce IF_TYPE_VIRTIO
virtio: Add block driver support
virtio: cmd: Add virtio command for virtio block devices
arch/Kconfig | 1 +
arch/arm/Kconfig | 1 +
arch/x86/include/asm/io.h | 66 +++
board/emulation/qemu-arm/Kconfig | 12 +
board/emulation/qemu-arm/qemu-arm.c | 7 +
board/emulation/qemu-riscv/Kconfig | 11 +
board/emulation/qemu-riscv/qemu-riscv.c | 7 +
board/emulation/qemu-x86/Kconfig | 3 +
cmd/Kconfig | 7 +
cmd/Makefile | 1 +
cmd/sata.c | 9 -
cmd/virtio.c | 37 ++
common/usb_storage.c | 4 +-
configs/qemu_arm64_defconfig | 1 -
configs/qemu_arm_defconfig | 1 -
disk/part.c | 6 +
doc/README.virtio | 247 ++++++++++++
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/block/blk-uclass.c | 25 +-
drivers/block/ide.c | 2 -
drivers/block/sandbox.c | 17 +-
drivers/core/uclass.c | 13 +-
drivers/mmc/mmc.c | 3 -
drivers/nvme/nvme.c | 1 -
drivers/pci/pci-uclass.c | 48 ++-
drivers/scsi/scsi.c | 1 -
drivers/virtio/Kconfig | 43 ++
drivers/virtio/Makefile | 10 +
drivers/virtio/virtio-uclass.c | 333 +++++++++++++++
drivers/virtio/virtio_blk.c | 127 ++++++
drivers/virtio/virtio_blk.h | 129 ++++++
drivers/virtio/virtio_mmio.c | 413 +++++++++++++++++++
drivers/virtio/virtio_mmio.h | 129 ++++++
drivers/virtio/virtio_net.c | 236 +++++++++++
drivers/virtio/virtio_net.h | 268 ++++++++++++
drivers/virtio/virtio_pci.h | 173 ++++++++
drivers/virtio/virtio_pci_legacy.c | 420 +++++++++++++++++++
drivers/virtio/virtio_pci_modern.c | 612 ++++++++++++++++++++++++++++
drivers/virtio/virtio_ring.c | 356 ++++++++++++++++
include/blk.h | 22 +-
include/dm/uclass-id.h | 1 +
include/dm/uclass.h | 4 +-
include/linux/io.h | 4 +
include/pci.h | 48 +++
include/virtio.h | 694 ++++++++++++++++++++++++++++++++
include/virtio_ring.h | 320 +++++++++++++++
include/virtio_types.h | 24 ++
lib/Kconfig | 6 +
lib/efi_driver/efi_block_device.c | 26 +-
test/dm/blk.c | 27 +-
test/dm/pci.c | 20 +
52 files changed, 4882 insertions(+), 97 deletions(-)
create mode 100644 board/emulation/qemu-arm/Kconfig
create mode 100644 cmd/virtio.c
create mode 100644 doc/README.virtio
create mode 100644 drivers/virtio/Kconfig
create mode 100644 drivers/virtio/Makefile
create mode 100644 drivers/virtio/virtio-uclass.c
create mode 100644 drivers/virtio/virtio_blk.c
create mode 100644 drivers/virtio/virtio_blk.h
create mode 100644 drivers/virtio/virtio_mmio.c
create mode 100644 drivers/virtio/virtio_mmio.h
create mode 100644 drivers/virtio/virtio_net.c
create mode 100644 drivers/virtio/virtio_net.h
create mode 100644 drivers/virtio/virtio_pci.h
create mode 100644 drivers/virtio/virtio_pci_legacy.c
create mode 100644 drivers/virtio/virtio_pci_modern.c
create mode 100644 drivers/virtio/virtio_ring.c
create mode 100644 include/virtio.h
create mode 100644 include/virtio_ring.h
create mode 100644 include/virtio_types.h
--
2.7.4
More information about the U-Boot
mailing list