diff mbox series

firmware: arm_scmi: Remove clear channel call on the TX channel

Message ID 20220224152404.12877-1-cristian.marussi@arm.com (mailing list archive)
State New, archived
Headers show
Series firmware: arm_scmi: Remove clear channel call on the TX channel | expand

Commit Message

Cristian Marussi Feb. 24, 2022, 3:24 p.m. UTC
On SCMI transports whose channels are based on a shared resource the TX
channel area has to be acquired by the agent before placing the desired
command into the channel and it will be then relinquished by the platform
once the related reply has been made available into the channel.
On an RX channel the logic is reversed with the platform acquiring the
channel area and the agent reliquishing it once done by calling the
scmi_clear_channel() helper.

As a consequence, even in case of error, the agent must never try to clear
a TX channel from its side: restrict the existing clear channel call on the
the reply path only to delayed responses since they are indeed coming from
the RX channel.

Fixes: e9b21c96181c ("firmware: arm_scmi: Make .clear_channel optional")
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
---
Applies on sudeep/for-next/scmi/fixes on top of

commit 1ba603f56568 firmware: arm_scmi: Remove space in MODULE_ALIAS name
---
 drivers/firmware/arm_scmi/driver.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Sudeep Holla April 5, 2022, 2:32 p.m. UTC | #1
On Thu, 24 Feb 2022 15:24:04 +0000, Cristian Marussi wrote:
> On SCMI transports whose channels are based on a shared resource the TX
> channel area has to be acquired by the agent before placing the desired
> command into the channel and it will be then relinquished by the platform
> once the related reply has been made available into the channel.
> On an RX channel the logic is reversed with the platform acquiring the
> channel area and the agent reliquishing it once done by calling the
> scmi_clear_channel() helper.
> 
> [...]

Applied to sudeep.holla/linux (fixes/scmi), thanks!

[1/1] firmware: arm_scmi: Remove clear channel call on the TX channel
      https://git.kernel.org/sudeep.holla/c/98f0d68f94

--
Regards,
Sudeep
diff mbox series

Patch

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index d76bab3aaac4..e815b8f98739 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -652,7 +652,8 @@  static void scmi_handle_response(struct scmi_chan_info *cinfo,
 
 	xfer = scmi_xfer_command_acquire(cinfo, msg_hdr);
 	if (IS_ERR(xfer)) {
-		scmi_clear_channel(info, cinfo);
+		if (MSG_XTRACT_TYPE(msg_hdr) == MSG_TYPE_DELAYED_RESP)
+			scmi_clear_channel(info, cinfo);
 		return;
 	}