[PATCH v3 5/9] firmware: arm_scmi: Make use of FastChannels configurable

From: Cristian Marussi
Date: Mon Jun 27 2022 - 08:31:21 EST


Add a Kernel configuration entry used to optionally disable, globally, the
usage of SCMI FastChannels even on platforms where they are available.

Make such option default-no to preserve the original SCMI system behaviour
of using any available FC.

Signed-off-by: Cristian Marussi <cristian.marussi@xxxxxxx>
---
v2 --> v3
- fixed wording in Kconfig
- reverted Kconfig logic _USE_ -> _AVOID_
---
drivers/firmware/arm_scmi/Kconfig | 13 +++++++++++++
drivers/firmware/arm_scmi/driver.c | 6 ++++++
2 files changed, 19 insertions(+)

diff --git a/drivers/firmware/arm_scmi/Kconfig b/drivers/firmware/arm_scmi/Kconfig
index 1e7b7fec97d9..3fb34db01014 100644
--- a/drivers/firmware/arm_scmi/Kconfig
+++ b/drivers/firmware/arm_scmi/Kconfig
@@ -42,6 +42,19 @@ config ARM_SCMI_HAVE_MSG
This declares whether a message passing based transport for SCMI is
available.

+config ARM_SCMI_AVOID_FASTCHANNELS
+ bool "Avoid using SCMI FastChannels even when available"
+ help
+ Avoid using SCMI FastChannels even if advertised as available by
+ the platform.
+
+ On systems where the SCMI platform advertises the availability of
+ FastChannels, supported SCMI commands can be issued triggering a
+ one-way FastChannel request, much more quickly than using a
+ regular SCMI message transfer.
+ When set to Y forces the OSPM to use instead regular SCMI message
+ transfers even if FastChannels are available. If unsure say N.
+
config ARM_SCMI_TRANSPORT_MAILBOX
bool "SCMI transport based on Mailbox"
depends on MAILBOX
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 00b7f2aff4ec..76dc82ba04b3 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -1298,6 +1298,12 @@ scmi_common_fastchannel_init(const struct scmi_protocol_handle *ph,
struct scmi_msg_resp_desc_fc *resp;
const struct scmi_protocol_instance *pi = ph_to_pi(ph);

+ if (IS_ENABLED(CONFIG_ARM_SCMI_AVOID_FASTCHANNELS)) {
+ dev_warn_once(ph->dev,
+ "FastChannels usage disabled in Kconfig.\n");
+ return;
+ }
+
if (!p_addr) {
ret = -EINVAL;
goto err_out;
--
2.32.0