On Wed, Feb 04, 2015 at 04:31:55PM +0200, Laurent Pinchart wrote: > Hi Thierry, > > Thank you for the patch. > > On Wednesday 04 February 2015 08:58:08 Thierry Reding wrote: > > From: Thierry Reding <tred...@nvidia.com> > > > > The OMAP IOMMU driver unconditionally executes code and registers a > > struct iommu_ops with the platform bus irrespective of whether it runs > > on an OMAP SoC or not. This causes problems in multi-platform kernels > > where drivers for other SoCs will no longer be able to register their > > own struct iommu_ops or even try to use a struct iommu_ops for an IOMMU > > that obviously isn't there. > > > > The smallest fix I could think of is to check for the existence of any > > OMAP IOMMU devices in the device tree and skip initialization otherwise. > > > > This fixes a problem on Tegra20 where the DRM driver will try to use the > > obviously non-existent OMAP IOMMU. > > > > Reported-by: Nicolas Chauvet <kwiz...@gmail.com> > > Cc: Tony Lindgren <t...@atomide.com> > > Cc: Suman Anna <s-a...@ti.com> > > Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com> > > Signed-off-by: Thierry Reding <tred...@nvidia.com> > > --- > > drivers/iommu/omap-iommu.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c > > index bbb7dcef02d3..e4d4f133a3b3 100644 > > --- a/drivers/iommu/omap-iommu.c > > +++ b/drivers/iommu/omap-iommu.c > > @@ -1377,6 +1377,9 @@ static int __init omap_iommu_init(void) > > const unsigned long flags = SLAB_HWCACHE_ALIGN; > > size_t align = 1 << 10; /* L2 pagetable alignement */ > > > > + if (!of_find_matching_node(NULL, omap_iommu_of_match)) > > + return 0; > > + > > We should convert the omap-iommu driver to proper DT instantiation, but this > should do for now. > > > p = kmem_cache_create("iopte_cache", IOPTE_TABLE_SIZE, align, flags, > > iopte_cachep_ctor); > > if (!p) > > @@ -1394,6 +1397,9 @@ subsys_initcall(omap_iommu_init); > > > > static void __exit omap_iommu_exit(void) > > { > > + if (!of_find_matching_node(NULL, omap_iommu_of_match)) > > + return; > > + > > kmem_cache_destroy(iopte_cachep); > > > > platform_driver_unregister(&omap_iommu_driver); > > The exit function will never be called as the omap-iommu driver is always > built-in. You could just remove the exit function.
I've omitted this hunk since this code will not run anyway. I agree that we should remove the code altogether if it's dead anyway, but that kind of cleanup isn't really suitable for patches this late in the release cycle. Thierry
pgpFdkkLRbqHi.pgp
Description: PGP signature
_______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu