summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2010-11-17 18:04:40 +0530
committerVarun Colbert <vcolbert@nvidia.com>2010-11-22 15:00:26 -0800
commitdfb2da188766e0c3bc194020daadad98f10ca34b (patch)
tree2ddde407a9013d62fae53227f900439a696df364
parentff4d0279c458b724d273efd88ee87ff7caf48991 (diff)
[arm/tegra] serial: Getting dma transfer count with rts inactive.
Getting the transfer count by dma with rts disable. In this way we can avoid the race condition arise by hw with incoming data. Change-Id: Ieeeadfeea9293c70fd2eb96ff9d82888a58b2b3a Reviewed-on: http://git-master/r/11020 Tested-by: Rakesh Goyal <rgoyal@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Tested-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Udaykumar Rameshchan Raval <uraval@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com>
-rwxr-xr-xdrivers/serial/tegra_hsuart.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/serial/tegra_hsuart.c b/drivers/serial/tegra_hsuart.c
index 941593ef7318..2f55ade6995d 100755
--- a/drivers/serial/tegra_hsuart.c
+++ b/drivers/serial/tegra_hsuart.c
@@ -51,7 +51,7 @@
#define BYTES_TO_ALIGN(x) ((unsigned long)(ALIGN((x), sizeof(u32))) - \
(unsigned long)(x))
-#define UART_RX_DMA_BUFFER_SIZE (2048*4)
+#define UART_RX_DMA_BUFFER_SIZE (2048*16)
#define UART_LSR_FIFOE 0x80
#define UART_IER_EORD 0x20
@@ -411,11 +411,21 @@ static void do_handle_rx_dma(struct tegra_uart_port *t)
set_rts(t, true);
} else {
is_dma_stopped = false;
+ /* Want to get the transfer count by dma so dont want more
+ * data to be in at this time.*/
+ if (t->rts_active)
+ set_rts(t, false);
+ /* Wait for dma to update status on current burst */
+ udelay(WAITTIME_DMA_BURST_COMPLETE);
+
dma_trans_count = tegra_dma_get_transfer_count(t->rx_dma,
&t->rx_dma_req, false);
if (dma_trans_count < 0) {
return;
}
+ /* enable the rts now */
+ if (t->rts_active)
+ set_rts(t, true);
dma_read_count = copy_dma_buffer_to_tty_buffer(t, dma_trans_count);
}