Message ID | 1409680587-29818-4-git-send-email-will.deacon@arm.com |
---|---|
State | New |
Headers | show |
Hello, On 2014-09-02 19:56, 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 fdddb14cd8f5..3e766b85daa3 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> > > @@ -136,6 +137,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); If I understand correctly how it is designed to work, then it should be: struct iommu_data *(*of_xlate)(struct device *dev, struct of_phandle_args *args); > +#endif > + > unsigned long pgsize_bitmap; > }; > Best regards
On Wed, Sep 10, 2014 at 12:16:06PM +0100, Marek Szyprowski wrote: > On 2014-09-02 19:56, 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 fdddb14cd8f5..3e766b85daa3 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> > > > > @@ -136,6 +137,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); > > If I understand correctly how it is designed to work, then it should be: > > struct iommu_data *(*of_xlate)(struct device *dev, struct > of_phandle_args *args); Yeah, that might be cleaner than the of_iommu_get_data call in of_dma_configure. I'm currently cooking a v3, so I'll include this change. Will
On Wed, Sep 10, 2014 at 12:22:13PM +0100, Will Deacon wrote: > On Wed, Sep 10, 2014 at 12:16:06PM +0100, Marek Szyprowski wrote: > > On 2014-09-02 19:56, Will Deacon wrote: > > > +#ifdef CONFIG_OF_IOMMU > > > + int (*of_xlate)(struct device *dev, struct of_phandle_args *args); > > > > If I understand correctly how it is designed to work, then it should be: > > > > struct iommu_data *(*of_xlate)(struct device *dev, struct > > of_phandle_args *args); > > Yeah, that might be cleaner than the of_iommu_get_data call in > of_dma_configure. I'm currently cooking a v3, so I'll include this change. Actually, I spoke too soon. If we make of_xlate return the iommu_data, then we have to continue getting the iommu_ops from the bus_type, otherwise we have no way to call the right of_xlate. So I'd rather leave of_dma_configure using of_iommu_get_data (I'm currently ripping out the bus code in there) so that we can embed the iommu_ops in iommu_data instead. Will
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index fdddb14cd8f5..3e766b85daa3 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> @@ -136,6 +137,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(+)