Skip to content

drivers: virtio: add VIRTIO MMIO transport driver #89460

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions boards/qemu/cortex_a53/board.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,14 @@ else()
set(QEMU_MACH virt,secure=on,gic-version=3)
endif()

if(CONFIG_ENTROPY_VIRTIO)
set(QEMU_VIRTIO_ENTROPY_FLAGS -device virtio-rng-device,bus=virtio-mmio-bus.0)
endif()

set(QEMU_FLAGS_${ARCH}
-global virtio-mmio.force-legacy=false
-cpu ${QEMU_CPU_TYPE_${ARCH}}
${QEMU_VIRTIO_ENTROPY_FLAGS}
-nographic
-machine ${QEMU_MACH}
)
Expand Down
223 changes: 223 additions & 0 deletions boards/qemu/cortex_a53/qemu_cortex_a53.dts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,229 @@
reg = <0x0 0x40000000 0x0 DT_SIZE_M(128)>;
};

virtio_mmio0: virtio_mmio@a000000 {
compatible = "virtio,mmio";
reg = <0x0 0xa000000 0x0 0x200>;
interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio1: virtio_mmio@a000200 {
compatible = "virtio,mmio";
reg = <0x0 0xa000200 0x0 0x200>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio2: virtio_mmio@a000400 {
compatible = "virtio,mmio";
reg = <0x0 0xa000400 0x0 0x200>;
interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio3: virtio_mmio@a000600 {
compatible = "virtio,mmio";
reg = <0x0 0xa000600 0x0 0x200>;
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio4: virtio_mmio@a000800 {
compatible = "virtio,mmio";
reg = <0x0 0xa000800 0x0 0x200>;
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio5: virtio_mmio@a000a00 {
compatible = "virtio,mmio";
reg = <0x0 0xa000a00 0x0 0x200>;
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio6: virtio_mmio@a000c00 {
compatible = "virtio,mmio";
reg = <0x0 0xa000c00 0x0 0x200>;
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio7: virtio_mmio@a000e00 {
compatible = "virtio,mmio";
reg = <0x0 0xa000e00 0x0 0x200>;
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio8: virtio_mmio@a001000 {
compatible = "virtio,mmio";
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
reg = <0x0 0xa001000 0x0 0x200>;
status = "disabled";
};

virtio_mmio9: virtio_mmio@a001200 {
compatible = "virtio,mmio";
reg = <0x0 0xa001200 0x0 0x200>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio10: virtio_mmio@a001400 {
compatible = "virtio,mmio";
reg = <0x0 0xa001400 0x0 0x200>;
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio11: virtio_mmio@a001600 {
compatible = "virtio,mmio";
reg = <0x0 0xa001600 0x0 0x200>;
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio12: virtio_mmio@a001800 {
compatible = "virtio,mmio";
reg = <0x0 0xa001800 0x0 0x200>;
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio13: virtio_mmio@a001a00 {
compatible = "virtio,mmio";
reg = <0x0 0xa001a00 0x0 0x200>;
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio14: virtio_mmio@a001c00 {
compatible = "virtio,mmio";
reg = <0x0 0xa001c00 0x0 0x200>;
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio15: virtio_mmio@a001e00 {
compatible = "virtio,mmio";
reg = <0x0 0xa001e00 0x0 0x200>;
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio16: virtio_mmio@a002000 {
compatible = "virtio,mmio";
reg = <0x0 0xa002000 0x0 0x200>;
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio17: virtio_mmio@a002200 {
compatible = "virtio,mmio";
reg = <0x0 0xa002200 0x0 0x200>;
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio18: virtio_mmio@a002400 {
compatible = "virtio,mmio";
reg = <0x0 0xa002400 0x0 0x200>;
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio19: virtio_mmio@a002600 {
compatible = "virtio,mmio";
reg = <0x0 0xa002600 0x0 0x200>;
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio20: virtio_mmio@a002800 {
compatible = "virtio,mmio";
reg = <0x0 0xa002800 0x0 0x200>;
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio21: virtio_mmio@a002a00 {
compatible = "virtio,mmio";
reg = <0x0 0xa002a00 0x0 0x200>;
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio22: virtio_mmio@a002c00 {
compatible = "virtio,mmio";
reg = <0x0 0xa002c00 0x0 0x200>;
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio23: virtio_mmio@a002e00 {
compatible = "virtio,mmio";
reg = <0x0 0xa002e00 0x0 0x200>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio24: virtio_mmio@a003000 {
compatible = "virtio,mmio";
reg = <0x0 0xa003000 0x0 0x200>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio25: virtio_mmio@a003200 {
compatible = "virtio,mmio";
reg = <0x0 0xa003200 0x0 0x200>;
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio26: virtio_mmio@a003400 {
compatible = "virtio,mmio";
reg = <0x0 0xa003400 0x0 0x200>;
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio27: virtio_mmio@a003600 {
compatible = "virtio,mmio";
reg = <0x0 0xa003600 0x0 0x200>;
interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio28: virtio_mmio@a003800 {
compatible = "virtio,mmio";
reg = <0x0 0xa003800 0x0 0x200>;
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio29: virtio_mmio@a003a00 {
compatible = "virtio,mmio";
reg = <0x0 0xa003a00 0x0 0x200>;
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio30: virtio_mmio@a003c00 {
compatible = "virtio,mmio";
reg = <0x0 0xa003c00 0x0 0x200>;
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};

virtio_mmio31: virtio_mmio@a003e00 {
compatible = "virtio,mmio";
reg = <0x0 0xa003e00 0x0 0x200>;
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
status = "disabled";
};
};
};

Expand Down
4 changes: 2 additions & 2 deletions drivers/entropy/Kconfig.virtio
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
# SPDX-License-Identifier: Apache-2.0

config ENTROPY_VIRTIO
bool "Driver for VirtIO Entropy device"
bool "Driver for VIRTIO Entropy device"
depends on DT_HAS_VIRTIO_DEVICE4_ENABLED
depends on VIRTIO
select ENTROPY_HAS_DRIVER
default y
help
Enable driver for the VirtIO Entropy device.
Enable driver for the VIRTIO Entropy device.
2 changes: 1 addition & 1 deletion drivers/entropy/entropy_virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ static int entropy_virtio_init(const struct device *dev)

k_sem_init(&data->sem, 0, 1);

LOG_DBG("VirtIO entropy driver initialized");
LOG_DBG("virtio entropy driver initialized");
return 0;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/virtio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ zephyr_library()

zephyr_library_sources_ifdef(CONFIG_VIRTIO virtqueue.c virtio_common.c)
zephyr_library_sources_ifdef(CONFIG_VIRTIO_PCI virtio_pci.c)
zephyr_library_sources_ifdef(CONFIG_VIRTIO_MMIO virtio_mmio.c)
7 changes: 7 additions & 0 deletions drivers/virtio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ config VIRTIO_PCI
help
Enable options for VIRTIO over PCI

config VIRTIO_MMIO
bool "support for VIRTIO over MMIO"
default y
depends on DT_HAS_VIRTIO_MMIO_ENABLED
help
Enable options for VIRTIO over MMIO

endif # VIRTIO

module = VIRTIO
Expand Down
Loading
Loading