[PATCH v2 9/9] firmware: arm_scmi: Initialise all protocol devices and transport channels
Sudeep Holla <[email protected]>
| Newsgroups | org.kernel.vger.arm-scmi,org.infradead.lists.linux-arm-kernel |
|---|---|
| Message-ID | <[email protected]> |
Unlike Device Tree, the ACPI SCMI namespace device does not provide child fwnodes to represent each protocol. Initialise protocol channels and devices for the ACPI SCMI protocol entries known to the core, and let the transport channel-availability checks and SCMI protocol implementation checks decide which ones are usable on the platform. Signed-off-by: Sudeep Holla <[email protected]> --- drivers/firmware/arm_scmi/driver.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 47f13409dfeb..9e25346a7eae 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -2827,7 +2827,7 @@ scmi_txrx_setup(struct scmi_info *info, struct fwnode_handle *fwnode, */ static int scmi_channels_setup(struct scmi_info *info) { - int ret; + int ret, idx; struct fwnode_handle *fwnode = dev_fwnode(info->dev); /* Initialize a common generic channel at first */ @@ -2850,6 +2850,17 @@ static int scmi_channels_setup(struct scmi_info *info) return ret; } + if (acpi_disabled) + return 0; + + for (idx = 1; idx < ARRAY_SIZE(scmi_dsd_info_list); idx++) { + int prot_id = scmi_dsd_info_list[idx].protocol_id; + + ret = scmi_txrx_setup(info, fwnode, prot_id); + if (ret) + return ret; + } + return 0; } @@ -3215,7 +3226,7 @@ static void scmi_device_check_create(struct fwnode_handle *fwnode, int prot_id, static int scmi_probe(struct platform_device *pdev) { - int ret; + int ret, idx; char *err_str = "probe failure\n"; struct scmi_handle *handle; const struct scmi_desc *desc; @@ -3344,6 +3355,15 @@ static int scmi_probe(struct platform_device *pdev) scmi_device_check_create(child, prot_id, info); } + if (acpi_disabled) + return 0; + + for (idx = 1; idx < ARRAY_SIZE(scmi_dsd_info_list); idx++) { + int prot_id = scmi_dsd_info_list[idx].protocol_id; + + scmi_device_check_create(dev_fwnode(dev), prot_id, info); + } + return 0; notification_exit: -- 2.43.0