dt-bindings: virtio-mmio: Add IOMMU description
authorJean-Philippe Brucker <jean-philippe.brucker@arm.com>
Tue, 15 Jan 2019 12:19:53 +0000 (12:19 +0000)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 6 Jun 2019 21:32:13 +0000 (17:32 -0400)
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>
Documentation/devicetree/bindings/virtio/mmio.txt

index 5069c1b..21af30f 100644 (file)
@@ -8,10 +8,40 @@ Required properties:
 - reg:         control registers base address and size including configuration space
 - interrupts:  interrupt generated by the device
 
+Required properties for virtio-iommu:
+
+- #iommu-cells:        When the node corresponds to a virtio-iommu device, it is
+               linked to DMA masters using the "iommus" or "iommu-map"
+               properties [1][2]. #iommu-cells specifies the size of the
+               "iommus" property. For virtio-iommu #iommu-cells must be
+               1, each cell describing a single endpoint ID.
+
+Optional properties:
+
+- iommus:      If the device accesses memory through an IOMMU, it should
+               have an "iommus" property [1]. Since virtio-iommu itself
+               does not access memory through an IOMMU, the "virtio,mmio"
+               node cannot have both an "#iommu-cells" and an "iommus"
+               property.
+
 Example:
 
        virtio_block@3000 {
                compatible = "virtio,mmio";
                reg = <0x3000 0x100>;
                interrupts = <41>;
+
+               /* Device has endpoint ID 23 */
+               iommus = <&viommu 23>
        }
+
+       viommu: iommu@3100 {
+               compatible = "virtio,mmio";
+               reg = <0x3100 0x100>;
+               interrupts = <42>;
+
+               #iommu-cells = <1>
+       }
+
+[1] Documentation/devicetree/bindings/iommu/iommu.txt
+[2] Documentation/devicetree/bindings/pci/pci-iommu.txt