iommu: arm-smmu: Ensure tbu driver is registered before arm-smmu
Since the arm-smmu driver may depend on the tbu driver, ensure the later
is available to prevent probe deferral.
Change-Id: I0fd38c945e8fc6b60a7529c776fbebf1e5ccb0d5
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 67defc8..5a10a02 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -3832,15 +3832,21 @@
.remove = arm_smmu_device_remove,
};
+static struct platform_driver qsmmuv500_tbu_driver;
static int __init arm_smmu_init(void)
{
static bool registered;
int ret = 0;
- if (!registered) {
- ret = platform_driver_register(&arm_smmu_driver);
- registered = !ret;
- }
+ if (registered)
+ return 0;
+
+ ret = platform_driver_register(&qsmmuv500_tbu_driver);
+ if (ret)
+ return ret;
+
+ ret = platform_driver_register(&arm_smmu_driver);
+ registered = !ret;
return ret;
}
@@ -4124,12 +4130,6 @@
.probe = qsmmuv500_tbu_probe,
};
-static int __init qsmmuv500_tbu_init(void)
-{
- return platform_driver_register(&qsmmuv500_tbu_driver);
-}
-subsys_initcall(qsmmuv500_tbu_init);
-
MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
MODULE_LICENSE("GPL v2");