diff options
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/serial/sirfsoc_uart.c | 11 |
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); |