Re: [PATCHv3 2/4] ARM: tegra: Add SMMU enabler in AHB

From: Stephen Warren
Date: Fri Apr 27 2012 - 11:49:01 EST


On 04/27/2012 12:48 AM, Hiroshi Doyu wrote:
...
> Then, what about something like the following?
>
> static int tegra_ahb_match_by_smmu(struct device *dev, void *data)
> {
> struct tegra_ahb *ahb = dev_get_drvdata(dev);
> struct device_node *dn = data;
>
> return (ahb->dev->of_node == dn) ? 1 : 0
> }

I imagine that function and the driver_find_device() call that uses it
will be pretty common. It may make sense as a drivers/of utility
function, although perhaps we can wait until later to refactor it, once
we actually have multiple pieces of code that do this same thing.

> int tegra_ahb_enable_smmu(struct device_node *ahb)
> {
> struct device *dev;
> u32 val;
>
> dev = driver_find_device(&tegra_ahb_driver.driver, NULL, ahb,
> tegra_ahb_match_by_smmu);
> if (!dev)
> return -ENODEV;

Yes, -EPROBE_DEFER here as you mentioned in your followup email.

>
> 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;
> }
> EXPORT_SYMBOL(tegra_ahb_enable_smmu);
>
> Modified arch/arm/boot/dts/tegra30.dtsi
> diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi
> index 655bc47..28f9138 100644
> --- a/arch/arm/boot/dts/tegra30.dtsi
> +++ b/arch/arm/boot/dts/tegra30.dtsi
> @@ -242,5 +242,6 @@
> smmu {
> compatible = "nvidia,tegra30-smmu";
> mc = <&mc>;
> + ahb = <&ahb>;
> };
> };

Yes, that's probably the best (even only) way to connect the two drivers
precisely.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/