Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d3a7b20 authored by Pekka Pessi's avatar Pekka Pessi Committed by Greg Kroah-Hartman
Browse files

mailbox: tegra-hsp: Flush whole channel



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: default avatarPekka Pessi <ppessi@nvidia.com>
Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
Fixes: 91b1b1c3 ("mailbox: tegra-hsp: Add support for shared mailboxes")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Reviewed-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 28c8fd84
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -403,6 +403,11 @@ static int tegra_hsp_mailbox_flush(struct mbox_chan *chan,
		value = tegra_hsp_channel_readl(ch, HSP_SM_SHRD_MBOX);
		value = tegra_hsp_channel_readl(ch, HSP_SM_SHRD_MBOX);
		if ((value & HSP_SM_SHRD_MBOX_FULL) == 0) {
		if ((value & HSP_SM_SHRD_MBOX_FULL) == 0) {
			mbox_chan_txdone(chan, 0);
			mbox_chan_txdone(chan, 0);

			/* Wait until channel is empty */
			if (chan->active_req != NULL)
				continue;

			return 0;
			return 0;
		}
		}