]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mailbox: tegra-hsp: Flush whole channel
authorPekka Pessi <ppessi@nvidia.com>
Wed, 2 Mar 2022 15:04:24 +0000 (16:04 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:39:55 +0000 (14:39 +0200)
commit 60de2d2dc284e0dd1c2c897d08625bde24ef3454 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mailbox/tegra-hsp.c

index e07091d71986a5f1ca30dfdfd38c785356e6647b..4895d8074002220ef7baa5dc1c0e6bd628cdf6db 100644 (file)
@@ -410,6 +410,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;
                }