mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 00:43:08 -04:00
firmware: arm_scmi: Split bus and driver into distinct modules
Make the SCMI bus on its own as a distinct module initialized at subsys_initcall level when builtin. Keep the SCMI driver core stack, together with any configured transport, in a different module initialized as module_init level. SCMI drivers initialization remain unchanged at module_init level. Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> Link: https://lore.kernel.org/r/20221222185049.737625-10-cristian.marussi@arm.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
This commit is contained in:
committed by
Sudeep Holla
parent
ee5dcedaf7
commit
37b5be8280
@@ -1,5 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
scmi-bus-y = bus.o
|
||||
scmi-core-objs := $(scmi-bus-y)
|
||||
|
||||
scmi-driver-y = driver.o notify.o
|
||||
scmi-transport-$(CONFIG_ARM_SCMI_HAVE_SHMEM) = shmem.o
|
||||
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_MAILBOX) += mailbox.o
|
||||
@@ -8,9 +10,11 @@ scmi-transport-$(CONFIG_ARM_SCMI_HAVE_MSG) += msg.o
|
||||
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_VIRTIO) += virtio.o
|
||||
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_OPTEE) += optee.o
|
||||
scmi-protocols-y = base.o clock.o perf.o power.o reset.o sensors.o system.o voltage.o powercap.o
|
||||
scmi-module-objs := $(scmi-bus-y) $(scmi-driver-y) $(scmi-protocols-y) \
|
||||
$(scmi-transport-y)
|
||||
scmi-module-objs := $(scmi-driver-y) $(scmi-protocols-y) $(scmi-transport-y)
|
||||
|
||||
obj-$(CONFIG_ARM_SCMI_PROTOCOL) += scmi-core.o
|
||||
obj-$(CONFIG_ARM_SCMI_PROTOCOL) += scmi-module.o
|
||||
|
||||
obj-$(CONFIG_ARM_SCMI_POWER_DOMAIN) += scmi_pm_domain.o
|
||||
obj-$(CONFIG_ARM_SCMI_POWER_CONTROL) += scmi_power_control.o
|
||||
|
||||
|
||||
@@ -476,18 +476,21 @@ static void scmi_devices_unregister(void)
|
||||
bus_for_each_dev(&scmi_bus_type, NULL, NULL, __scmi_devices_unregister);
|
||||
}
|
||||
|
||||
int __init scmi_bus_init(void)
|
||||
static int __init scmi_bus_init(void)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = bus_register(&scmi_bus_type);
|
||||
if (retval)
|
||||
pr_err("scmi protocol bus register failed (%d)\n", retval);
|
||||
pr_err("SCMI protocol bus register failed (%d)\n", retval);
|
||||
|
||||
pr_info("SCMI protocol bus registered\n");
|
||||
|
||||
return retval;
|
||||
}
|
||||
subsys_initcall(scmi_bus_init);
|
||||
|
||||
void __exit scmi_bus_exit(void)
|
||||
static void __exit scmi_bus_exit(void)
|
||||
{
|
||||
/*
|
||||
* Destroy all remaining devices: just in case the drivers were
|
||||
@@ -497,3 +500,9 @@ void __exit scmi_bus_exit(void)
|
||||
bus_unregister(&scmi_bus_type);
|
||||
ida_destroy(&scmi_bus_id);
|
||||
}
|
||||
module_exit(scmi_bus_exit);
|
||||
|
||||
MODULE_ALIAS("scmi-core");
|
||||
MODULE_AUTHOR("Sudeep Holla <sudeep.holla@arm.com>");
|
||||
MODULE_DESCRIPTION("ARM SCMI protocol bus");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
@@ -99,8 +99,6 @@ scmi_revision_area_get(const struct scmi_protocol_handle *ph);
|
||||
void scmi_setup_protocol_implemented(const struct scmi_protocol_handle *ph,
|
||||
u8 *prot_imp);
|
||||
|
||||
int __init scmi_bus_init(void);
|
||||
void __exit scmi_bus_exit(void);
|
||||
extern struct bus_type scmi_bus_type;
|
||||
|
||||
#define SCMI_BUS_NOTIFY_DEVICE_REQUEST 0
|
||||
|
||||
@@ -2638,8 +2638,6 @@ static int __init scmi_driver_init(void)
|
||||
if (WARN_ON(!IS_ENABLED(CONFIG_ARM_SCMI_HAVE_TRANSPORT)))
|
||||
return -EINVAL;
|
||||
|
||||
scmi_bus_init();
|
||||
|
||||
/* Initialize any compiled-in transport which provided an init/exit */
|
||||
ret = scmi_transports_init();
|
||||
if (ret)
|
||||
@@ -2658,7 +2656,7 @@ static int __init scmi_driver_init(void)
|
||||
|
||||
return platform_driver_register(&scmi_driver);
|
||||
}
|
||||
subsys_initcall(scmi_driver_init);
|
||||
module_init(scmi_driver_init);
|
||||
|
||||
static void __exit scmi_driver_exit(void)
|
||||
{
|
||||
@@ -2673,8 +2671,6 @@ static void __exit scmi_driver_exit(void)
|
||||
scmi_system_unregister();
|
||||
scmi_powercap_unregister();
|
||||
|
||||
scmi_bus_exit();
|
||||
|
||||
scmi_transports_exit();
|
||||
|
||||
platform_driver_unregister(&scmi_driver);
|
||||
|
||||
Reference in New Issue
Block a user