iommu/tegra: smmu: Get swgroup ID from DT
PATCH 21/23 iommu/tegra: smmu: Get swgroup ID from DT
Get swgroup ID from DT. "nvidia,swgroups" indicates which swgroup IDs a device belongs to.
--- arch/arm/boot/dts/tegra30.dtsi | 1 - drivers/iommu/tegra-smmu.c | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-)
arch/arm/boot/dts/tegra30.dtsi +0 -1
@@ -1,6 +1,5 @@ #include <dt-bindings/clock/tegra30-car.h> #include <dt-bindings/gpio/tegra-gpio.h> -#include <dt-bindings/iommu/tegra-swgid.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include "skeleton.dtsi"
drivers/iommu/tegra-smmu.c +19 -1
@@ -314,6 +314,24 @@ static inline void smmu_write(struct smmu_device *smmu, u32 val, size_t offs)#define smmu_client_hwgrp (c) (c->as->smmu->swgroups) +static u64 tegra_smmu_of_get_swgids (struct device *dev) +{ +size_t bytes; +const char *propname ="nvidia,memory-clients" ; +const __be32 *prop; +int i; +u64 swgids =0 ; + + prop =of_get_property (dev->of_node, propname, &bytes); +if (!prop || !bytes) +return 0 ; + +for (i =0 ; i < bytes /sizeof (u32); i++, prop++) + swgids |=1ULL <<be32_to_cpup (prop); + +return swgids; +} +static int __smmu_client_set_hwgrp (struct smmu_client *c,u64 map,int on) {
@@ -725,7 +743,7 @@ static int smmu_iommu_attach_dev(struct iommu_domain *domain,return -ENOMEM ; client->dev = dev; client->as = as; - map = smmu->swgroups; + map =tegra_smmu_of_get_swgids (dev);if (!map)return -EINVAL ;
Signature · 1 line
1.8.1.5
PATCH 21/23 iommu/tegra: smmu: Get swgroup ID from DT
Quoted 50 lines · Hiroshi Doyu
Get swgroup ID from DT. "nvidia,swgroups" indicates which swgroup IDs a device belongs to.
Signed-off-by Hiroshi Doyu <[email protected]>--- arch/arm/boot/dts/tegra30.dtsi | 1 - drivers/iommu/tegra-smmu.c | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-)arch/arm/boot/dts/tegra30.dtsi +0
-1@@ -1,6 +1,5 @@ #include <dt-bindings/clock/tegra30-car.h> #include <dt-bindings/gpio/tegra-gpio.h> -#include <dt-bindings/iommu/tegra-swgid.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include "skeleton.dtsi"drivers/iommu/tegra-smmu.c +18
-0@@ -314,6 +314,24 @@ static inline void smmu_write(struct smmu_device *smmu, u32 val, size_t offs)#define smmu_client_hwgrp (c) (c->as->smmu->swgroups) +static u64 tegra_smmu_of_get_swgids (struct device *dev) +{ +size_t bytes; +const char *propname ="nvidia,memory-clients" ; +const __be32 *prop; +int i; +u64 swgids =0 ; + + prop =of_get_property (dev->of_node, propname, &bytes); +if (!prop || !bytes) +return 0 ; + +for (i =0 ; i < bytes /sizeof (u32); i++, prop++) + swgids |=1ULL <<be32_to_cpup (prop); + +return swgids; +} +static int __smmu_client_set_hwgrp (struct smmu_client *c,u64 map,int on) {
drivers/iommu/tegra-smmu.c static int smmu_iommu_attach_dev(struct iommu_domain *domain, · line 748
Quoted 7 lines
drivers/iommu/tegra-smmu.c +1
-1@@ -725,7 +743,7 @@ static int smmu_iommu_attach_dev(struct iommu_domain *domain,return -ENOMEM ; client->dev = dev; client->as = as; - map = smmu->swgroups; + map =tegra_smmu_of_get_swgids (dev);if (!map)return -EINVAL ;
Shouldn't this be part of an earlier patch ("[PATCH 17/23] iommu/tegra:
smmu: Use swgroups instead of pdata")? What's the reason for the split?
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130626/14bb2b2a/attachment-0001.sig>