@@ -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>;
};
};