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-tegra" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to