From: Suman Anna <s-a...@ti.com>

[ Upstream commit abaa7e5b054aae567861628b74dbc7fbf8ed79e8 ]

Move the registration of the OMAP IOMMU platform driver before
setting the IOMMU callbacks on the platform bus. This causes
the IOMMU devices to be probed first before the .add_device()
callback is invoked for all registered devices, and allows
the iommu_group support to be added to the OMAP IOMMU driver.

While at this, also check for the return status from bus_set_iommu.

Signed-off-by: Suman Anna <s-a...@ti.com>
Signed-off-by: Joerg Roedel <jroe...@suse.de>
Signed-off-by: Sasha Levin <alexander.le...@microsoft.com>
---
 drivers/iommu/omap-iommu.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index e2583cce2cc1..54556713c8d1 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -1299,6 +1299,7 @@ static int __init omap_iommu_init(void)
        const unsigned long flags = SLAB_HWCACHE_ALIGN;
        size_t align = 1 << 10; /* L2 pagetable alignement */
        struct device_node *np;
+       int ret;
 
        np = of_find_matching_node(NULL, omap_iommu_of_match);
        if (!np)
@@ -1312,11 +1313,25 @@ static int __init omap_iommu_init(void)
                return -ENOMEM;
        iopte_cachep = p;
 
-       bus_set_iommu(&platform_bus_type, &omap_iommu_ops);
-
        omap_iommu_debugfs_init();
 
-       return platform_driver_register(&omap_iommu_driver);
+       ret = platform_driver_register(&omap_iommu_driver);
+       if (ret) {
+               pr_err("%s: failed to register driver\n", __func__);
+               goto fail_driver;
+       }
+
+       ret = bus_set_iommu(&platform_bus_type, &omap_iommu_ops);
+       if (ret)
+               goto fail_bus;
+
+       return 0;
+
+fail_bus:
+       platform_driver_unregister(&omap_iommu_driver);
+fail_driver:
+       kmem_cache_destroy(iopte_cachep);
+       return ret;
 }
 subsys_initcall(omap_iommu_init);
 /* must be ready before omap3isp is probed */
-- 
2.14.1

Reply via email to