From 7d299905717065f1d5167af8eb3b681a5400f3ee Mon Sep 17 00:00:00 2001 From: Ondrej Jirman Date: Sat, 2 Nov 2019 15:09:01 +0100 Subject: [PATCH 129/478] mailbox: Allow to run mailbox while timekeeping is suspended This makes it possible to send messages from CPU suspend finisher. We simply implement cl->tx_block using a busywait loop when timekeeping is suspended, instead of using hrtimer. Signed-off-by: Ondrej Jirman --- drivers/mailbox/mailbox.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index 3e7d4b20ab34..82ca7c317700 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c @@ -268,6 +268,24 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg) msg_submit(chan); + if (chan->cl->tx_block && timekeeping_suspended) { + int i = chan->cl->tx_tout * 10; + bool txdone; + + while (i--) { + txdone = chan->mbox->ops->last_tx_done(chan); + if (txdone) { + tx_tick(chan, 0); + return 0; + } + + udelay(100); + } + + tx_tick(chan, -ETIME); + return -ETIME; + } + if (chan->cl->tx_block) { unsigned long wait; int ret; -- 2.35.3