mailbox: tegra-hsp: Flush whole channel
authorPekka Pessi <ppessi@nvidia.com>
Wed, 2 Mar 2022 15:04:24 +0000 (16:04 +0100)
committerJassi Brar <jaswinder.singh@linaro.org>
Sun, 13 Mar 2022 01:20:48 +0000 (19:20 -0600)
The txdone can re-fill the mailbox. Keep polling the mailbox during the
flush until all the messages have been delivered.

This fixes an issue with the Tegra Combined UART (TCU) where output can
get truncated under high traffic load.

Signed-off-by: Pekka Pessi <ppessi@nvidia.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Fixes: 91b1b1c3da8a ("mailbox: tegra-hsp: Add support for shared mailboxes")
Cc: stable@vger.kernel.org
Signed-off-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
drivers/mailbox/tegra-hsp.c

index acd0675da681e9d317a9bed42f887f6f36f695ea..78f7265039c66778ddfb34066454d79227d5eed7 100644 (file)
@@ -412,6 +412,11 @@ static int tegra_hsp_mailbox_flush(struct mbox_chan *chan,
                value = tegra_hsp_channel_readl(ch, HSP_SM_SHRD_MBOX);
                if ((value & HSP_SM_SHRD_MBOX_FULL) == 0) {
                        mbox_chan_txdone(chan, 0);
+
+                       /* Wait until channel is empty */
+                       if (chan->active_req != NULL)
+                               continue;
+
                        return 0;
                }