aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plat/ti/k3/common/drivers/ti_sci/ti_sci.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/plat/ti/k3/common/drivers/ti_sci/ti_sci.c b/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
index a376e6ea5..ac33278a9 100644
--- a/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
+++ b/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
@@ -116,21 +116,28 @@ static inline int ti_sci_get_response(struct ti_sci_xfer *xfer,
{
struct k3_sec_proxy_msg *msg = &xfer->rx_message;
struct ti_sci_msg_hdr *hdr;
+ unsigned int retry = 5;
int ret;
- /* Receive the response */
- ret = k3_sec_proxy_recv(chan, msg);
- if (ret) {
- ERROR("Message receive failed (%d)\n", ret);
- return ret;
+ for (; retry > 0; retry--) {
+ /* Receive the response */
+ ret = k3_sec_proxy_recv(chan, msg);
+ if (ret) {
+ ERROR("Message receive failed (%d)\n", ret);
+ return ret;
+ }
+
+ /* msg is updated by Secure Proxy driver */
+ hdr = (struct ti_sci_msg_hdr *)msg->buf;
+
+ /* Sanity check for message response */
+ if (hdr->seq == info.seq)
+ break;
+ else
+ WARN("Message with sequence ID %u is not expected\n", hdr->seq);
}
-
- /* msg is updated by Secure Proxy driver */
- hdr = (struct ti_sci_msg_hdr *)msg->buf;
-
- /* Sanity check for message response */
- if (hdr->seq != info.seq) {
- ERROR("Message for %d is not expected\n", hdr->seq);
+ if (!retry) {
+ ERROR("Timed out waiting for message\n");
return -EINVAL;
}