On Wed, 25 Apr 2012 17:51:50 +0200 Stephen Warren <swarren@xxxxxxxxxxxxx> wrote: > On 04/25/2012 05:29 AM, Felipe Balbi wrote: > > Hi, > > > > On Wed, Apr 25, 2012 at 02:07:37PM +0300, Hiroshi DOYU wrote: > >> Add extern func, "tegra_ahb_enable_smmu()" to inform AHB that SMMU is > >> ready. > > >> +#ifdef CONFIG_ARCH_TEGRA_3x_SOC > >> +static int __tegra_ahb_enable_smmu(struct device *dev, void *data) > >> +{ > >> + u32 val; > >> + struct tegra_ahb *ahb = dev_get_drvdata(dev); > >> + > >> + val = gizmo_readl(ahb, AHB_ARBITRATION_XBAR_CTRL); > >> + val |= AHB_ARBITRATION_XBAR_CTRL_SMMU_INIT_DONE; > >> + gizmo_writel(ahb, val, AHB_ARBITRATION_XBAR_CTRL); > >> + return 0; > >> +} > >> + > >> +int tegra_ahb_enable_smmu(void) > >> +{ > >> + return driver_for_each_device(&tegra_ahb_driver.driver, NULL, NULL, > >> + __tegra_ahb_enable_smmu); > >> +} > >> +EXPORT_SYMBOL(tegra_ahb_enable_smmu); > >> +#endif > > > > this is still not correct. If you will always call this whenever you run > > on tegra 3, why do you even expose this function ? > > I think the issue is that this function should only be called after the > SMMU driver has initialized the SMMU, and it's ready to be activated. Right. "tegra_ahb_enable_smmu()" is not supposed to be called at tegra_ahb_probe(), but it is always expected to be called after SMMU is initialized/gets ready. The sequence is: 1, AHB is probed. ...<any other operations>... 2, SMMU is probed. ...<any other operations>... 3, SMMU is ready, then, 4, SMMU lets AHB know that SMMU is ready to be used by AHB clients. The above step 4 is "tegra_ahb_enable_smmu()". -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html