summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Marussi <cristian.marussi@arm.com>2021-06-08 11:30:56 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-08-08 09:05:24 +0200
commit1b1a00b13c34b0dd1ef3de6eed25f7cb1c2dfd35 (patch)
tree63dd0b9df529968cab79fcd2c5640dfe3e8fc013
parent93ef561406a712b32e9a2203b406877081fa0df7 (diff)
downloadlinux-stable-1b1a00b13c34b0dd1ef3de6eed25f7cb1c2dfd35.tar.gz
linux-stable-1b1a00b13c34b0dd1ef3de6eed25f7cb1c2dfd35.tar.bz2
linux-stable-1b1a00b13c34b0dd1ef3de6eed25f7cb1c2dfd35.zip
firmware: arm_scmi: Add delayed response status check
commit f1748b1ee1fa0fd1a074504045b530b62f949188 upstream. A successfully received delayed response could anyway report a failure at the protocol layer in the message status field. Add a check also for this error condition. Link: https://lore.kernel.org/r/20210608103056.3388-1-cristian.marussi@arm.com Fixes: 58ecdf03dbb9 ("firmware: arm_scmi: Add support for asynchronous commands and delayed response") Signed-off-by: Cristian Marussi <cristian.marussi@arm.com> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/firmware/arm_scmi/driver.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 8c9663258d5d..763223248664 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -436,8 +436,12 @@ int scmi_do_xfer_with_response(const struct scmi_handle *handle,
xfer->async_done = &async_response;
ret = scmi_do_xfer(handle, xfer);
- if (!ret && !wait_for_completion_timeout(xfer->async_done, timeout))
- ret = -ETIMEDOUT;
+ if (!ret) {
+ if (!wait_for_completion_timeout(xfer->async_done, timeout))
+ ret = -ETIMEDOUT;
+ else if (xfer->hdr.status)
+ ret = scmi_to_linux_errno(xfer->hdr.status);
+ }
xfer->async_done = NULL;
return ret;