diff --git a/Documentation/devicetree/bindings/iommu/iommu.txt b/Documentation/devicetree/bindings/iommu/iommu.txt index 464a81eaaf61..5a8b4624defc 100644 --- a/Documentation/devicetree/bindings/iommu/iommu.txt +++ b/Documentation/devicetree/bindings/iommu/iommu.txt @@ -82,7 +82,9 @@ device's parent node it will be ignored. An exception to this rule is if the referenced IOMMU is disabled, in which case the "dma-ranges" property of the parent shall take effect. Note that merely disabling a device tree node does not guarantee that the IOMMU is really disabled since the hardware may not -have a means to turn off translation. +have a means to turn off translation. But it is invalid in such cases to +disable the IOMMU's device tree node in the first place because it would +prevent any driver from properly setting up the translations. Notes: @@ -108,7 +110,7 @@ Single-master IOMMU: }; master { - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; Multiple-master IOMMU with fixed associations: @@ -117,8 +119,12 @@ Multiple-master IOMMU with fixed associations: /* multiple-master IOMMU */ iommu { /* - * Masters are statically associated with this IOMMU and - * address translation is always enabled. + * Masters are statically associated with this IOMMU and share + * the same address translations because the IOMMU does not + * have sufficient information to distinguish between masters. + * + * Consequently address translation is always on or off for + * all masters at any given point in time. */ #iommu-cells = <0>; }; @@ -126,13 +132,13 @@ Multiple-master IOMMU with fixed associations: /* static association with IOMMU */ master@1 { reg = <1>; - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; /* static association with IOMMU */ master@2 { reg = <2>; - iommus = <&/iommu>; + iommus = <&{/iommu}>; }; Multiple-master IOMMU: @@ -145,28 +151,32 @@ Multiple-master IOMMU: master@1 { /* device has master ID 42 in the IOMMU */ - iommus = <&/iommu 42>; + iommus = <&{/iommu} 42>; }; master@2 { /* device has master IDs 23 and 24 in the IOMMU */ - iommus = <&/iommu 23>, <&/iommu 24>; + iommus = <&{/iommu} 23>, <&{/iommu} 24>; }; Multiple-master IOMMU with configurable DMA window: --------------------------------------------------- / { - #address-cells = <1>; - #size-cells = <1>; - iommu { - /* master ID, address and length of DMA window */ + /* + * One cell for the master ID and one cell for the + * address of the DMA window. The length of the DMA + * window is encoded in two cells. + * + * The DMA window is the range addressable by the + * master (i.e. the I/O virtual address space). + */ #iommu-cells = <4>; }; master { /* master ID 42, 4 GiB DMA window starting at 0 */ - iommus = <&/iommu 42 0 0x1 0x0>; + iommus = <&{/iommu} 42 0 0x1 0x0>; }; };