firmware: arm_scmi: Move scmi bus init and exit calls into the driver
authorSudeep Holla <sudeep.holla@arm.com>
Mon, 7 Sep 2020 11:00:04 +0000 (12:00 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Mon, 14 Sep 2020 06:30:48 +0000 (07:30 +0100)
In preparation to enable building scmi as a single module, let us move
the scmi bus {de-,}initialisation call into the driver.

The main reason for this is to keep it simple instead of maintaining
it as separate modules and dealing with all possible initcall races
and deferred probe handling. We can move it as separate modules if
needed in future.

Link: https://lore.kernel.org/r/20200907195046.56615-3-sudeep.holla@arm.com
Tested-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/bus.c
drivers/firmware/arm_scmi/common.h
drivers/firmware/arm_scmi/driver.c

index db55c43a2cbda6e3fc1f8d01e3a6ef4845490563..1377ec76a45dbb4ee0e54293c4308984c4f0ccb8 100644 (file)
@@ -230,7 +230,7 @@ static void scmi_devices_unregister(void)
        bus_for_each_dev(&scmi_bus_type, NULL, NULL, __scmi_devices_unregister);
 }
 
-static int __init scmi_bus_init(void)
+int __init scmi_bus_init(void)
 {
        int retval;
 
@@ -240,12 +240,10 @@ static int __init scmi_bus_init(void)
 
        return retval;
 }
-subsys_initcall(scmi_bus_init);
 
-static void __exit scmi_bus_exit(void)
+void __exit scmi_bus_exit(void)
 {
        scmi_devices_unregister();
        bus_unregister(&scmi_bus_type);
        ida_destroy(&scmi_bus_id);
 }
-module_exit(scmi_bus_exit);
index 233700a42bffbc522d6735ca4c59f7d197c85c5f..a940c6cf1e512ce9d0c6f005b923ada60029a0a5 100644 (file)
@@ -156,6 +156,9 @@ void scmi_setup_protocol_implemented(const struct scmi_handle *handle,
 
 int scmi_base_protocol_init(struct scmi_handle *h);
 
+int __init scmi_bus_init(void);
+void __exit scmi_bus_exit(void);
+
 /* SCMI Transport */
 /**
  * struct scmi_chan_info - Structure representing a SCMI channel information
index dbec34423f72e17f7ce4a7e9c96eb3556c1bd351..8f60c6a97cc3c4f1d409728182e0c1056a269c68 100644 (file)
@@ -929,7 +929,21 @@ static struct platform_driver scmi_driver = {
        .remove = scmi_remove,
 };
 
-module_platform_driver(scmi_driver);
+static int __init scmi_driver_init(void)
+{
+       scmi_bus_init();
+
+       return platform_driver_register(&scmi_driver);
+}
+module_init(scmi_driver_init);
+
+static void __exit scmi_driver_exit(void)
+{
+       scmi_bus_exit();
+
+       platform_driver_unregister(&scmi_driver);
+}
+module_exit(scmi_driver_exit);
 
 MODULE_ALIAS("platform: arm-scmi");
 MODULE_AUTHOR("Sudeep Holla <sudeep.holla@arm.com>");