On Thu, Aug 14, 2025 at 10:17 AM Joel Stanley <[email protected]> wrote: > > The iommu Linux kernel support is now upstream. VFIO is still > downstream at this stage. > > Reviewed-by: Daniel Henrique Barboza <[email protected]> > Signed-off-by: Joel Stanley <[email protected]>
Thanks! Applied to riscv-to-apply.next Alistair > --- > v2: > - Fix VFIO link > - Fix qemu spelling > --- > docs/specs/riscv-iommu.rst | 35 +++++++++++++---------------------- > 1 file changed, 13 insertions(+), 22 deletions(-) > > diff --git a/docs/specs/riscv-iommu.rst b/docs/specs/riscv-iommu.rst > index 991d376fdc24..571a6a6cc963 100644 > --- a/docs/specs/riscv-iommu.rst > +++ b/docs/specs/riscv-iommu.rst > @@ -30,15 +30,15 @@ This will add a RISC-V IOMMU PCI device in the board > following any additional > PCI parameters (like PCI bus address). The behavior of the RISC-V IOMMU is > defined by the spec but its operation is OS dependent. > > -As of this writing the existing Linux kernel support `linux-v8`_, not yet > merged, > -does not have support for features like VFIO passthrough. The IOMMU > emulation > -was tested using a public Ventana Micro Systems kernel repository in > -`ventana-linux`_. This kernel is based on `linux-v8`_ with additional > patches that > -enable features like KVM VFIO passthrough with irqbypass. Until the kernel > support > -is feature complete feel free to use the kernel available in the Ventana > Micro Systems > -mirror. > - > -The current Linux kernel support will use the IOMMU device to create IOMMU > groups > +Linux kernel iommu support was merged in v6.13. QEMU IOMMU emulation can be > +used with mainline kernels for simple IOMMU PCIe support. > + > +As of v6.17, it does not have support for features like VFIO passthrough. > +There is a `VFIO`_ RFC series that is not yet merged. The public Ventana > Micro > +Systems kernel repository in `ventana-linux`_ can be used for testing the > VFIO > +functions. > + > +The v6.13+ Linux kernel support uses the IOMMU device to create IOMMU groups > with any eligible cards available in the system, regardless of factors such > as the > order in which the devices are added in the command line. > > @@ -49,7 +49,7 @@ IOMMU kernel driver behaves: > > $ qemu-system-riscv64 \ > -M virt,aia=aplic-imsic,aia-guests=5 \ > - -device riscv-iommu-pci,addr=1.0,vendor-id=0x1efd,device-id=0xedf1 \ > + -device riscv-iommu-pci,addr=1.0 \ > -device e1000e,netdev=net1 -netdev user,id=net1,net=192.168.0.0/24 \ > -device e1000e,netdev=net2 -netdev user,id=net2,net=192.168.200.0/24 > \ > (...) > @@ -58,21 +58,11 @@ IOMMU kernel driver behaves: > -M virt,aia=aplic-imsic,aia-guests=5 \ > -device e1000e,netdev=net1 -netdev user,id=net1,net=192.168.0.0/24 \ > -device e1000e,netdev=net2 -netdev user,id=net2,net=192.168.200.0/24 > \ > - -device riscv-iommu-pci,addr=1.0,vendor-id=0x1efd,device-id=0xedf1 \ > + -device riscv-iommu-pci,addr=3.0 \ > (...) > > Both will create iommu groups for the two e1000e cards. > > -Another thing to notice on `linux-v8`_ and `ventana-linux`_ is that the > kernel driver > -considers an IOMMU identified as a Rivos device, i.e. it uses Rivos vendor > ID. To > -use the riscv-iommu-pci device with the existing kernel support we need to > emulate > -a Rivos PCI IOMMU by setting 'vendor-id' and 'device-id': > - > -.. code-block:: bash > - > - $ qemu-system-riscv64 -M virt \ > - -device riscv-iommu-pci,vendor-id=0x1efd,device-id=0xedf1 (...) > - > Several options are available to control the capabilities of the device, > namely: > > - "bus": the bus that the IOMMU device uses > @@ -84,6 +74,7 @@ Several options are available to control the capabilities > of the device, namely: > - "g-stage": enable g-stage support > - "hpm-counters": number of hardware performance counters available. Maximum > value is 31. > Default value is 31. Use 0 (zero) to disable HPM support > +- "vendor-id"/"device-id": pci device ID. Defaults to 1b36:0014 (Redhat) > > riscv-iommu-sys device > ---------------------- > @@ -111,6 +102,6 @@ riscv-iommu options: > > .. _iommu1.0.0: > https://github.com/riscv-non-isa/riscv-iommu/releases/download/v1.0.0/riscv-iommu.pdf > > -.. _linux-v8: > https://lore.kernel.org/linux-riscv/[email protected]/ > +.. _VFIO: > https://lore.kernel.org/linux-riscv/[email protected]/ > > .. _ventana-linux: https://github.com/ventanamicro/linux/tree/dev-upstream > -- > 2.47.2 > >
