aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/amba
diff options
context:
space:
mode:
authorHiroshi DOYU <hdoyu@nvidia.com>2012-05-07 02:43:46 -0400
committerStephen Warren <swarren@nvidia.com>2012-05-08 15:30:49 -0400
commit89c788bab1f0374ae05aef7560066442ceb55384 (patch)
tree330832a873d9184a6c9e56270eee7be4d88b299c /drivers/amba
parent87d0bab2cba3c31624b80cc68bcf5e29ef969458 (diff)
ARM: tegra: Add SMMU enabler in AHB
Add extern func, "tegra_ahb_enable_smmu()" to inform AHB that SMMU is ready. Signed-off-by: Hiroshi DOYU <hdoyu@nvidia.com> Cc: Felipe Balbi <balbi@ti.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'drivers/amba')
-rw-r--r--drivers/amba/tegra-ahb.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/amba/tegra-ahb.c b/drivers/amba/tegra-ahb.c
index 106a780d29a0..aa0b1f160528 100644
--- a/drivers/amba/tegra-ahb.c
+++ b/drivers/amba/tegra-ahb.c
@@ -76,6 +76,10 @@
76 76
77#define AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID 0xf8 77#define AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID 0xf8
78 78
79#define AHB_ARBITRATION_XBAR_CTRL_SMMU_INIT_DONE BIT(17)
80
81static struct platform_driver tegra_ahb_driver;
82
79static const u32 tegra_ahb_gizmo[] = { 83static const u32 tegra_ahb_gizmo[] = {
80 AHB_ARBITRATION_DISABLE, 84 AHB_ARBITRATION_DISABLE,
81 AHB_ARBITRATION_PRIORITY_CTRL, 85 AHB_ARBITRATION_PRIORITY_CTRL,
@@ -124,6 +128,34 @@ static inline void gizmo_writel(struct tegra_ahb *ahb, u32 value, u32 offset)
124 writel(value, ahb->regs + offset); 128 writel(value, ahb->regs + offset);
125} 129}
126 130
131#ifdef CONFIG_ARCH_TEGRA_3x_SOC
132static int tegra_ahb_match_by_smmu(struct device *dev, void *data)
133{
134 struct tegra_ahb *ahb = dev_get_drvdata(dev);
135 struct device_node *dn = data;
136
137 return (ahb->dev->of_node == dn) ? 1 : 0;
138}
139
140int tegra_ahb_enable_smmu(struct device_node *dn)
141{
142 struct device *dev;
143 u32 val;
144 struct tegra_ahb *ahb;
145
146 dev = driver_find_device(&tegra_ahb_driver.driver, NULL, dn,
147 tegra_ahb_match_by_smmu);
148 if (!dev)
149 return -EPROBE_DEFER;
150 ahb = dev_get_drvdata(dev);
151 val = gizmo_readl(ahb, AHB_ARBITRATION_XBAR_CTRL);
152 val |= AHB_ARBITRATION_XBAR_CTRL_SMMU_INIT_DONE;
153 gizmo_writel(ahb, val, AHB_ARBITRATION_XBAR_CTRL);
154 return 0;
155}
156EXPORT_SYMBOL(tegra_ahb_enable_smmu);
157#endif
158
127static int tegra_ahb_suspend(struct device *dev) 159static int tegra_ahb_suspend(struct device *dev)
128{ 160{
129 int i; 161 int i;