|
@@ -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 */
|