patch "serial: imx: Fix DMA handling for IDLE condition aborts" added to tty-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
serial: imx: Fix DMA handling for IDLE condition aborts
to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
392bceedb107a3dc1d4287e63d7670d08f702febMon Sep 17 00:00:00 2001
From: Philipp Zabel <[email protected]>
Date: Tue, 19 May 2015 10:54:09 +0200
Subject: serial: imx: Fix DMA handling for IDLE condition aborts
The driver configures the IDLE condition to interrupt the SDMA engine. Since the SDMA UART ROM script doesn't clear the IDLE bit itself, this caused repeated 1-byte DMA transfers, regardless of available data in the RX FIFO. Also, when returning due to the IDLE condition, the UART ROM script already increased its counter, causing residue to be off by one.
This patch clears the IDLE condition to avoid repeated 1-byte DMA transfers and decreases count by when the DMA transfer was aborted due to the IDLE condition, fixing serial transfers using DMA on i.MX6Q.
--- drivers/tty/serial/imx.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/tty/serial/imx.c +8 -0
@@ -911,6 +911,14 @@ static void dma_rx_callback(void *data) status =dmaengine_tx_status (chan, (dma_cookie_t )0 , &state); count =RX_BUF_SIZE - state.residue; + +if (readl (sport->port.membase +USR2 ) &USR2_IDLE ) { +/* In condition [3] the SDMA counted up too early */ + count--; + +writel (USR2_IDLE , sport->port.membase +USR2 ); + } +dev_dbg (sport->port.dev,"We get %d bytes.\n" , count);if (count) {
Signature · 1 line
2.4.1