[PATCHv5 6/9] iommu/tegra: smmu: get swgroups from DT "iommus="
Stephen Warren
swarren at wwwdotorg.org
Tue Nov 19 16:52:01 EST 2013
On 11/19/2013 02:33 AM, Hiroshi Doyu wrote:
> This provides the info about which swgroups a device belongs to. This
> info is passed from DT. This is necessary for the unified SMMU driver
> among Tegra SoCs since each has different H/W accelerators.
> diff --git a/Documentation/devicetree/bindings/iommu/nvidia,tegra30-smmu.txt b/Documentation/devicetree/bindings/iommu/nvidia,tegra30-smmu.txt
> - nvidia,#asids : # of ASIDs
> - dma-window : IOVA start address and length.
> - nvidia,ahb : phandle to the ahb bus connected to SMMU.
> +- iommus: phandle to an iommu device which a device is
> + attached to and indicates which swgroups a device belongs to(SWGROUP ID).
> + SWGROUP ID is from 0 to 63, and a device can belong to multiple SWGROUPS.
I'm sure I've said this before:
#iommu-cells isn't documented.
The list of properties you added to is a list of properties that the
IOMMU node should contain. However, the iommus property is something
that *client* nodes should contain, not the IOMMU node itself.
Instead, I think you want something like:
-Required properties:
+Required properties in the IOMMU node:
... the current list of properties
+#iommu-cells. Should be 2. In client IOMMU specifiers, the two cells
+ represent a 64-bit bitmask of SWGROUP IDs under which the device
+ initiates transactions. The least significant word is first. See
+ <dt-bindings/memory/tegra-swgroup.h> for a list of valid values.
+
+Required properties in device nodes affected by the IOMMU:
+- iommus: A list of phandle plus specifier pairs for each IOMMU that
+ affects master transactions initiated by the device. The number of
+ cells in each specifier is defined by the #iommu-cells property in
+ the IOMMU node referred to by the phandle. The meaning of the
+ specifier cells is defined by the referenced IOMMU's binding.
Aside from those layout/wording issues, this is certainly the binding
that I think makes sense.
> + host1x {
> + compatible = "nvidia,tegra30-host1x", "simple-bus";
> + iommus = <&smmu TEGRA_SWGROUP_CELLS(HC)>;
> + ....
> + gr3d {
> + compatible = "nvidia,tegra30-gr3d";
> + nvidia,memory-clients = <&smmu TEGRA_SWGROUP_CELLS(NV)
> + TEGRA_SWGROUP_CELLS(NV2)>;
I think you forgot to update "nvidia,memory-clients" to "iommus" there.
> diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
> +static int smmu_of_get_swgroups(struct device *dev, unsigned long *swgroups)
This doesn't seem to be used by anything in this patch.
More information about the linux-arm-kernel
mailing list