summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: be9728a)
raw | patch | inline | side by side (parent: be9728a)
author | Vignesh Raghavendra <vigneshr@ti.com> | |
Tue, 14 Jan 2020 14:53:03 +0000 (14:53 +0000) | ||
committer | Sekhar Nori <nsekhar@ti.com> | |
Wed, 15 Jan 2020 10:52:47 +0000 (16:22 +0530) |
When RX Timeout interrupt is raised without any data in RX FIFO (i.e
when UART_LSR_DR bit is not set) don't queue a new RX DMA request as
request will be immediately subjected to teardown as part of RX timeout
handling. This removes dependency on DMA driver to call completion
callback for descriptor terminated before completion.
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
when UART_LSR_DR bit is not set) don't queue a new RX DMA request as
request will be immediately subjected to teardown as part of RX timeout
handling. This removes dependency on DMA driver to call completion
callback for descriptor terminated before completion.
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
drivers/tty/serial/8250/8250_omap.c | patch | blob | history |
index 088232f6aa75a869de6884617080eaf265bf8891..979e4c861a6b7ecfee0a2bf4c5fe9cd546f0d41b 100644 (file)
omap_8250_rx_dma(up);
serial_out(up, UART_OMAP_EFR2, UART_OMAP_EFR2_TIMEOUT_BEHAVE);
} else if ((iir & 0x3f) == UART_IIR_RX_TIMEOUT) {
- if (!up->dma->rx_running) {
- omap_8250_rx_dma(up);
- } else {
- /*
- * Disable RX timeout, read IIR to clear
- * current timeout condition, clear EFR2 to
- * periodic timeouts, re-enable interrupts.
- */
- up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
- serial_out(up, UART_IER, up->ier);
- omap_8250_rx_dma_flush(up);
- serial_in(up, UART_IIR);
- serial_out(up, UART_OMAP_EFR2, 0x0);
- up->ier |= UART_IER_RLSI | UART_IER_RDI;
- serial_out(up, UART_IER, up->ier);
- }
+ /*
+ * Disable RX timeout, read IIR to clear
+ * current timeout condition, clear EFR2 to
+ * periodic timeouts, re-enable interrupts.
+ */
+ up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
+ serial_out(up, UART_IER, up->ier);
+ omap_8250_rx_dma_flush(up);
+ serial_in(up, UART_IIR);
+ serial_out(up, UART_OMAP_EFR2, 0x0);
+ up->ier |= UART_IER_RLSI | UART_IER_RDI;
+ serial_out(up, UART_IER, up->ier);
}
return status;