diff options
author | Hiroshi DOYU <hdoyu@nvidia.com> | 2012-05-07 02:43:46 -0400 |
---|---|---|
committer | Stephen Warren <swarren@nvidia.com> | 2012-05-08 15:30:49 -0400 |
commit | 89c788bab1f0374ae05aef7560066442ceb55384 (patch) | |
tree | 330832a873d9184a6c9e56270eee7be4d88b299c /drivers/amba/tegra-ahb.c | |
parent | 87d0bab2cba3c31624b80cc68bcf5e29ef969458 (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/tegra-ahb.c')
-rw-r--r-- | drivers/amba/tegra-ahb.c | 32 |
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 | |||
81 | static struct platform_driver tegra_ahb_driver; | ||
82 | |||
79 | static const u32 tegra_ahb_gizmo[] = { | 83 | static 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 | ||
132 | static 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 | |||
140 | int 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 | } | ||
156 | EXPORT_SYMBOL(tegra_ahb_enable_smmu); | ||
157 | #endif | ||
158 | |||
127 | static int tegra_ahb_suspend(struct device *dev) | 159 | static int tegra_ahb_suspend(struct device *dev) |
128 | { | 160 | { |
129 | int i; | 161 | int i; |