Message ID | 1410539695-29128-4-git-send-email-will.deacon@arm.com |
---|---|
State | New |
Headers | show |
Hello, On 2014-09-12 18:34, Will Deacon wrote: > This patch adds a new function to the iommu_ops structure to allow an > OF device to be added to a specific IOMMU instance using the recently > merged generic devicetree binding for IOMMUs. The callback (of_xlate) > takes a struct device representing the master and an of_phandle_args > representing the IOMMU and the correspondong IDs for the new master. > > Signed-off-by: Will Deacon <will.deacon@arm.com> > --- > include/linux/iommu.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > index 4256f3ce1673..821eb0bd9f6c 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -21,6 +21,7 @@ > > #include <linux/errno.h> > #include <linux/err.h> > +#include <linux/of.h> > #include <linux/types.h> > #include <trace/events/iommu.h> > > @@ -140,6 +141,10 @@ struct iommu_ops { > /* Get the numer of window per domain */ > u32 (*domain_get_windows)(struct iommu_domain *domain); > > +#ifdef CONFIG_OF_IOMMU > + int (*of_xlate)(struct device *dev, struct of_phandle_args *args); > +#endif If I understand correctly, this callback is intended to do per-master initialization of the iommu structures required by the given iommu driver (I stored them in dev->archdata.iommu). However I really don't get what is the meaning of the return value. Is it a boolean value? It is used only by of_iommu_configure to check if the parse loop should be terminated... > + > unsigned long pgsize_bitmap; > }; Best regards
On Mon, Sep 15, 2014 at 12:57:38PM +0100, Marek Szyprowski wrote: > Hello, Hi Marek, Thanks for looking again at this -- I'll take at look at your exynos series when I'm back in the UK next week. > On 2014-09-12 18:34, Will Deacon wrote: > > This patch adds a new function to the iommu_ops structure to allow an > > OF device to be added to a specific IOMMU instance using the recently > > merged generic devicetree binding for IOMMUs. The callback (of_xlate) > > takes a struct device representing the master and an of_phandle_args > > representing the IOMMU and the correspondong IDs for the new master. > > > > Signed-off-by: Will Deacon <will.deacon@arm.com> > > --- > > include/linux/iommu.h | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > > index 4256f3ce1673..821eb0bd9f6c 100644 > > --- a/include/linux/iommu.h > > +++ b/include/linux/iommu.h > > @@ -21,6 +21,7 @@ > > > > #include <linux/errno.h> > > #include <linux/err.h> > > +#include <linux/of.h> > > #include <linux/types.h> > > #include <trace/events/iommu.h> > > > > @@ -140,6 +141,10 @@ struct iommu_ops { > > /* Get the numer of window per domain */ > > u32 (*domain_get_windows)(struct iommu_domain *domain); > > > > +#ifdef CONFIG_OF_IOMMU > > + int (*of_xlate)(struct device *dev, struct of_phandle_args *args); > > +#endif > > > If I understand correctly, this callback is intended to do per-master > initialization > of the iommu structures required by the given iommu driver (I stored them in > dev->archdata.iommu). However I really don't get what is the meaning of > the return > value. Is it a boolean value? It is used only by of_iommu_configure to > check if > the parse loop should be terminated... It should probably return 0 on success, < 0 otherwise. I'll fix of_iommu_configure to check for < 0 and only exit the loop then. The idea is that we don't swizzle the DMA ops for a device to IOMMU ops if of_xlate failed for any of its IDs. Will
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 4256f3ce1673..821eb0bd9f6c 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -21,6 +21,7 @@ #include <linux/errno.h> #include <linux/err.h> +#include <linux/of.h> #include <linux/types.h> #include <trace/events/iommu.h> @@ -140,6 +141,10 @@ struct iommu_ops { /* Get the numer of window per domain */ u32 (*domain_get_windows)(struct iommu_domain *domain); +#ifdef CONFIG_OF_IOMMU + int (*of_xlate)(struct device *dev, struct of_phandle_args *args); +#endif + unsigned long pgsize_bitmap; };
This patch adds a new function to the iommu_ops structure to allow an OF device to be added to a specific IOMMU instance using the recently merged generic devicetree binding for IOMMUs. The callback (of_xlate) takes a struct device representing the master and an of_phandle_args representing the IOMMU and the correspondong IDs for the new master. Signed-off-by: Will Deacon <will.deacon@arm.com> --- include/linux/iommu.h | 5 +++++ 1 file changed, 5 insertions(+)