aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/sirfsoc_uart.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/tty/serial/sirfsoc_uart.c b/drivers/tty/serial/sirfsoc_uart.c
index 61c1ad03db5b..f186a8fb8887 100644
--- a/drivers/tty/serial/sirfsoc_uart.c
+++ b/drivers/tty/serial/sirfsoc_uart.c
@@ -529,7 +529,7 @@ static void sirfsoc_rx_tmo_process_tl(unsigned long param)
529 while (sirfport->rx_completed != sirfport->rx_issued) { 529 while (sirfport->rx_completed != sirfport->rx_issued) {
530 sirfsoc_uart_insert_rx_buf_to_tty(sirfport, 530 sirfsoc_uart_insert_rx_buf_to_tty(sirfport,
531 SIRFSOC_RX_DMA_BUF_SIZE); 531 SIRFSOC_RX_DMA_BUF_SIZE);
532 sirfsoc_rx_submit_one_dma_desc(port, sirfport->rx_completed++); 532 sirfport->rx_completed++;
533 sirfport->rx_completed %= SIRFSOC_RX_LOOP_BUF_CNT; 533 sirfport->rx_completed %= SIRFSOC_RX_LOOP_BUF_CNT;
534 } 534 }
535 count = CIRC_CNT(sirfport->rx_dma_items[sirfport->rx_issued].xmit.head, 535 count = CIRC_CNT(sirfport->rx_dma_items[sirfport->rx_issued].xmit.head,
@@ -706,12 +706,19 @@ static void sirfsoc_uart_rx_dma_complete_tl(unsigned long param)
706{ 706{
707 struct sirfsoc_uart_port *sirfport = (struct sirfsoc_uart_port *)param; 707 struct sirfsoc_uart_port *sirfport = (struct sirfsoc_uart_port *)param;
708 struct uart_port *port = &sirfport->port; 708 struct uart_port *port = &sirfport->port;
709 struct sirfsoc_register *ureg = &sirfport->uart_reg->uart_reg;
710 struct sirfsoc_int_en *uint_en = &sirfport->uart_reg->uart_int_en;
709 unsigned long flags; 711 unsigned long flags;
710 spin_lock_irqsave(&sirfport->rx_lock, flags); 712 spin_lock_irqsave(&sirfport->rx_lock, flags);
711 while (sirfport->rx_completed != sirfport->rx_issued) { 713 while (sirfport->rx_completed != sirfport->rx_issued) {
712 sirfsoc_uart_insert_rx_buf_to_tty(sirfport, 714 sirfsoc_uart_insert_rx_buf_to_tty(sirfport,
713 SIRFSOC_RX_DMA_BUF_SIZE); 715 SIRFSOC_RX_DMA_BUF_SIZE);
714 sirfsoc_rx_submit_one_dma_desc(port, sirfport->rx_completed++); 716 if (rd_regl(port, ureg->sirfsoc_int_en_reg) &
717 uint_en->sirfsoc_rx_timeout_en)
718 sirfsoc_rx_submit_one_dma_desc(port,
719 sirfport->rx_completed++);
720 else
721 sirfport->rx_completed++;
715 sirfport->rx_completed %= SIRFSOC_RX_LOOP_BUF_CNT; 722 sirfport->rx_completed %= SIRFSOC_RX_LOOP_BUF_CNT;
716 } 723 }
717 spin_unlock_irqrestore(&sirfport->rx_lock, flags); 724 spin_unlock_irqrestore(&sirfport->rx_lock, flags);