Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dt-bindings: virtio-mmio: Add IOMMU description

The nature of a virtio-mmio node is discovered by the virtio driver at
probe time. However the DMA relation between devices must be described
statically. When a virtio-mmio node is a virtio-iommu device, it needs an
"#iommu-cells" property as specified by bindings/iommu/iommu.txt.

Otherwise, the virtio-mmio device may perform DMA through an IOMMU, which
requires an "iommus" property. Describe these requirements in the
device-tree bindings documentation.

Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

authored by

Jean-Philippe Brucker and committed by
Michael S. Tsirkin
8447d84e 0b4a7092

+30
+30
Documentation/devicetree/bindings/virtio/mmio.txt
··· 8 8 - reg: control registers base address and size including configuration space 9 9 - interrupts: interrupt generated by the device 10 10 11 + Required properties for virtio-iommu: 12 + 13 + - #iommu-cells: When the node corresponds to a virtio-iommu device, it is 14 + linked to DMA masters using the "iommus" or "iommu-map" 15 + properties [1][2]. #iommu-cells specifies the size of the 16 + "iommus" property. For virtio-iommu #iommu-cells must be 17 + 1, each cell describing a single endpoint ID. 18 + 19 + Optional properties: 20 + 21 + - iommus: If the device accesses memory through an IOMMU, it should 22 + have an "iommus" property [1]. Since virtio-iommu itself 23 + does not access memory through an IOMMU, the "virtio,mmio" 24 + node cannot have both an "#iommu-cells" and an "iommus" 25 + property. 26 + 11 27 Example: 12 28 13 29 virtio_block@3000 { 14 30 compatible = "virtio,mmio"; 15 31 reg = <0x3000 0x100>; 16 32 interrupts = <41>; 33 + 34 + /* Device has endpoint ID 23 */ 35 + iommus = <&viommu 23> 17 36 } 37 + 38 + viommu: iommu@3100 { 39 + compatible = "virtio,mmio"; 40 + reg = <0x3100 0x100>; 41 + interrupts = <42>; 42 + 43 + #iommu-cells = <1> 44 + } 45 + 46 + [1] Documentation/devicetree/bindings/iommu/iommu.txt 47 + [2] Documentation/devicetree/bindings/pci/pci-iommu.txt