Re: [PATCH v4] devicetree: Add generic IOMMU device tree bindings

Thierry Reding
2014-07-31T10:47:00Z

[-- Attachment #1.1: Type: text/plain, Size: 654 bytes --]

On Thu, Jul 31, 2014 at 12:23:51PM +0200, Joerg Roedel wrote:
> On Thu, Jul 31, 2014 at 12:18:08PM +0200, Thierry Reding wrote:
> > It looks like this hasn't been applied yet, so I can send out a v5
> > shortly with the requested changes addressed.
>
> Yes, please send a v5 with the requested changes and all Reviewed-bys
> and Acked-bys this got so far. I'll take it into my tree then if nobody
> else objects.

I just sent out v5, although I trimmed the Cc list a little since it was
growing somewhat long. But I've kept everyone that gave feedback on v4
as well as the lists.

For reference I've attached the diff since v4.

Thierry

[-- Attachment #1.2: v5.patch --]
[-- Type: text/x-diff, Size: 3033 bytes --]

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

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]