Patchwork [1/6] iommu/tegra124: smmu: optionaly AHB enables SMMU

login
register
mail settings
Submitter Hiroshi Doyu
Date Dec. 5, 2013, 12:25 p.m.
Message ID <1386246319-17851-2-git-send-email-hdoyu@nvidia.com>
Download mbox | patch
Permalink /patch/297110/
State Superseded, archived
Headers show

Comments

Hiroshi Doyu - Dec. 5, 2013, 12:25 p.m.
SMMU used to depend on AHB bus. AHB driver needs to be populated and
AHB_XBAR_CTRL_SMMU_INIT_DONE bit needs to be set earliear than SMMU
being populated. Later Tegra SoC (>= T124) doesn't need AHB to enable
SMMU on AHB_XBAR_CTRL for AHB_XBAR_CTRL_SMMU_INIT_DONE any more. This
setting bit is now optional, depending on DT passing ahb phandle or
not.

Signed-off-by: Hiroshi Doyu <hdoyu@nvidia.com>
---
 drivers/iommu/tegra-smmu.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
Stephen Warren - Dec. 16, 2013, 8:37 p.m.
On 12/05/2013 05:25 AM, Hiroshi Doyu wrote:
> SMMU used to depend on AHB bus. AHB driver needs to be populated and
> AHB_XBAR_CTRL_SMMU_INIT_DONE bit needs to be set earliear than SMMU
> being populated. Later Tegra SoC (>= T124) doesn't need AHB to enable
> SMMU on AHB_XBAR_CTRL for AHB_XBAR_CTRL_SMMU_INIT_DONE any more. This
> setting bit is now optional, depending on DT passing ahb phandle or
> not.

This patch should happen after 1/3, and the "platform data" should
indicate whether tegra_ahb_enable_smmu() needs to be called, so that on
Tegra30...

> diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c

> @@ -1284,9 +1287,6 @@ static int tegra_smmu_probe(struct platform_device *pdev)

>  	smmu->ahb = of_parse_phandle(dev->of_node, "nvidia,ahb", 0);
> -	if (!smmu->ahb)
> -		return -ENODEV;

... that error-checking is still in place, yet on Tegra124,
of_parse_phandle() isn't even called.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
index d0f0ba7..f63d54a 100644
--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -500,7 +500,10 @@  static int smmu_setup_regs(struct smmu_device *smmu)
 
 	smmu_flush_regs(smmu, 1);
 
-	return tegra_ahb_enable_smmu(smmu->ahb);
+	if (smmu->ahb)
+		return tegra_ahb_enable_smmu(smmu->ahb);
+
+	return 0;
 }
 
 static void flush_ptc_and_tlb(struct smmu_device *smmu,
@@ -1284,9 +1287,6 @@  static int tegra_smmu_probe(struct platform_device *pdev)
 		return -EINVAL;
 
 	smmu->ahb = of_parse_phandle(dev->of_node, "nvidia,ahb", 0);
-	if (!smmu->ahb)
-		return -ENODEV;
-
 	smmu->iommu.dev = dev;
 	smmu->num_as = asids;
 	smmu->iovmm_base = base;