* Suman Anna <s-anna@xxxxxx> [140213 10:19]: > From: Florian Vaussard <florian.vaussard@xxxxxxx> > > As OMAP2+ is moving to a full DT boot for all SoC families, commit > 7ce93f3 "ARM: OMAP2+: Fix more missing data for omap3.dtsi file" > adds basic DT bits for OMAP3. But the driver is not yet converted, > so this will not work and driver will not be probed. Convert it! > > Signed-off-by: Florian Vaussard <florian.vaussard@xxxxxxx> > [s-anna@xxxxxx: dev_name adaptation and improved error checking] > Signed-off-by: Suman Anna <s-anna@xxxxxx> Best that this gets merged along with the other iommu patches, so for the arch/arm/*omap* parts: Acked-by: Tony Lindgren <tony@xxxxxxxxxxx> > --- > arch/arm/mach-omap2/omap-iommu.c | 5 +++++ > drivers/iommu/omap-iommu.c | 41 ++++++++++++++++++++++++++++++++++++---- > 2 files changed, 42 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c > index f6daae8..f1fab56 100644 > --- a/arch/arm/mach-omap2/omap-iommu.c > +++ b/arch/arm/mach-omap2/omap-iommu.c > @@ -10,6 +10,7 @@ > * published by the Free Software Foundation. > */ > > +#include <linux/of.h> > #include <linux/module.h> > #include <linux/platform_device.h> > #include <linux/err.h> > @@ -58,6 +59,10 @@ static int __init omap_iommu_dev_init(struct omap_hwmod *oh, void *unused) > > static int __init omap_iommu_init(void) > { > + /* If dtb is there, the devices will be created dynamically */ > + if (of_have_populated_dt()) > + return -ENODEV; > + > return omap_hwmod_for_each_by_class("mmu", omap_iommu_dev_init, NULL); > } > /* must be ready before omap3isp is probed */ > diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c > index 6272c36..4329ab1 100644 > --- a/drivers/iommu/omap-iommu.c > +++ b/drivers/iommu/omap-iommu.c > @@ -23,6 +23,9 @@ > #include <linux/spinlock.h> > #include <linux/io.h> > #include <linux/pm_runtime.h> > +#include <linux/of.h> > +#include <linux/of_iommu.h> > +#include <linux/of_irq.h> > > #include <asm/cacheflush.h> > > @@ -937,20 +940,41 @@ static int omap_iommu_probe(struct platform_device *pdev) > { > int err = -ENODEV; > int irq; > + size_t len; > struct omap_iommu *obj; > struct resource *res; > struct iommu_platform_data *pdata = pdev->dev.platform_data; > + struct device_node *of = pdev->dev.of_node; > > obj = devm_kzalloc(&pdev->dev, sizeof(*obj) + MMU_REG_SIZE, GFP_KERNEL); > if (!obj) > return -ENOMEM; > > - obj->nr_tlb_entries = pdata->nr_tlb_entries; > - obj->name = pdata->name; > + if (of) { > + obj->name = dev_name(&pdev->dev); > + obj->nr_tlb_entries = 32; > + err = of_property_read_u32(of, "ti,#tlb-entries", > + &obj->nr_tlb_entries); > + if (err && err != -EINVAL) > + return err; > + if (obj->nr_tlb_entries != 32 && obj->nr_tlb_entries != 8) > + return -EINVAL; > + err = of_get_dma_window(of, NULL, 0, NULL, &obj->da_start, > + &len); > + if (err != 0) > + return err; > + obj->da_end = obj->da_start + len; > + } else { > + obj->nr_tlb_entries = pdata->nr_tlb_entries; > + obj->name = pdata->name; > + obj->da_start = pdata->da_start; > + obj->da_end = pdata->da_end; > + } > + if (obj->da_end <= obj->da_start) > + return -EINVAL; > + > obj->dev = &pdev->dev; > obj->ctx = (void *)obj + sizeof(*obj); > - obj->da_start = pdata->da_start; > - obj->da_end = pdata->da_end; > > spin_lock_init(&obj->iommu_lock); > mutex_init(&obj->mmap_lock); > @@ -991,11 +1015,20 @@ static int omap_iommu_remove(struct platform_device *pdev) > return 0; > } > > +static struct of_device_id omap_iommu_of_match[] = { > + { .compatible = "ti,omap2-iommu" }, > + { .compatible = "ti,omap4-iommu" }, > + { .compatible = "ti,dra7-iommu" }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, omap_iommu_of_match); > + > static struct platform_driver omap_iommu_driver = { > .probe = omap_iommu_probe, > .remove = omap_iommu_remove, > .driver = { > .name = "omap-iommu", > + .of_match_table = of_match_ptr(omap_iommu_of_match), > }, > }; > > -- > 1.8.5.3 > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html