ti: k3: drivers: ti_sci: Clear receive queue before transmitting
authorAndrew F. Davis <afd@ti.com>
Fri, 4 Jan 2019 18:49:16 +0000 (12:49 -0600)
committerAndrew F. Davis <afd@ti.com>
Mon, 21 Jan 2019 19:33:36 +0000 (13:33 -0600)
Send and receive currently must be be serialized, any message already in
the receive queue when a new message is to be sent will cause a mismatch
with the expected response from this new message. Clear out all messages
from the response queue before sending a new request.

Signed-off-by: Andrew F. Davis <afd@ti.com>
Acked-by: Nishanth Menon <nm@ti.com>
plat/ti/k3/common/drivers/ti_sci/ti_sci.c

index b211bdf60bf7163f8718fb152f6ca98035b47010..b4b120e4d41b8411f383562c9ddafb4b7768185b 100644 (file)
@@ -158,6 +158,13 @@ static inline int ti_sci_do_xfer(struct ti_sci_xfer *xfer)
        struct k3_sec_proxy_msg *msg = &xfer->tx_message;
        int ret;
 
+       /* Clear any spurious messages in receive queue */
+       ret = k3_sec_proxy_clear_rx_thread(SP_RESPONSE);
+       if (ret) {
+               ERROR("Could not clear response queue (%d)\n", ret);
+               return ret;
+       }
+
        /* Send the message */
        ret = k3_sec_proxy_send(SP_HIGH_PRIORITY, msg);
        if (ret) {
@@ -165,6 +172,7 @@ static inline int ti_sci_do_xfer(struct ti_sci_xfer *xfer)
                return ret;
        }
 
+       /* Get the response */
        ret = ti_sci_get_response(xfer, SP_RESPONSE);
        if (ret) {
                ERROR("Failed to get response (%d)\n", ret);