| From 8e1a20f1635df5d5514d73d71ed76da5528e032c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 7 Sep 2020 12:00:04 +0100 |
| Subject: firmware: arm_scmi: Move scmi bus init and exit calls into the driver |
| |
| From: Sudeep Holla <sudeep.holla@arm.com> |
| |
| [ Upstream commit 5a2f0a0bdf201e2183904b6217f9c74774c961a8 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/firmware/arm_scmi/bus.c | 6 ++---- |
| drivers/firmware/arm_scmi/common.h | 3 +++ |
| drivers/firmware/arm_scmi/driver.c | 16 +++++++++++++++- |
| 3 files changed, 20 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c |
| index db55c43a2cbda..1377ec76a45db 100644 |
| --- a/drivers/firmware/arm_scmi/bus.c |
| +++ b/drivers/firmware/arm_scmi/bus.c |
| @@ -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); |
| diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h |
| index 6db59a7ac8531..124080955c4a0 100644 |
| --- a/drivers/firmware/arm_scmi/common.h |
| +++ b/drivers/firmware/arm_scmi/common.h |
| @@ -158,6 +158,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 |
| diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c |
| index 28a3e4902ea4e..5c2f4fab40994 100644 |
| --- a/drivers/firmware/arm_scmi/driver.c |
| +++ b/drivers/firmware/arm_scmi/driver.c |
| @@ -936,7 +936,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>"); |
| -- |
| 2.27.0 |
| |