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 <r...@kernel.org>
Reviewed-by: Eric Auger <eric.au...@redhat.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe.bruc...@arm.com>
---
 .../devicetree/bindings/virtio/mmio.txt       | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/Documentation/devicetree/bindings/virtio/mmio.txt 
b/Documentation/devicetree/bindings/virtio/mmio.txt
index 5069c1b8e193..21af30fbb81f 100644
--- a/Documentation/devicetree/bindings/virtio/mmio.txt
+++ b/Documentation/devicetree/bindings/virtio/mmio.txt
@@ -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
-- 
2.21.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to