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

From: Thierry Reding
Date: Thu Jul 31 2014 - 06:47:04 EST


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
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: pgpVVTsM6wvm0.pgp
Description: PGP signature