提交 ee5e7c10 编写于 作者: R Robin Gong 提交者: Greg Kroah-Hartman

serial: imx: start rx_dma once RXFIFO is not empty

Start rx_dma once RXFIFO is not empty that can avoid dma request lost
and causes data delay issue.
Signed-off-by: NRobin Gong <b38343@freescale.com>
Signed-off-by: NFugang Duan <B38611@freescale.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 068500e0
...@@ -946,8 +946,21 @@ static void dma_rx_callback(void *data) ...@@ -946,8 +946,21 @@ static void dma_rx_callback(void *data)
tty_flip_buffer_push(port); tty_flip_buffer_push(port);
start_rx_dma(sport); start_rx_dma(sport);
} else } else if (readl(sport->port.membase + USR2) & USR2_RDR) {
/*
* start rx_dma directly once data in RXFIFO, more efficient
* than before:
* 1. call imx_rx_dma_done to stop dma if no data received
* 2. wait next RDR interrupt to start dma transfer.
*/
start_rx_dma(sport);
} else {
/*
* stop dma to prevent too many IDLE event trigged if no data
* in RXFIFO
*/
imx_rx_dma_done(sport); imx_rx_dma_done(sport);
}
} }
static int start_rx_dma(struct imx_port *sport) static int start_rx_dma(struct imx_port *sport)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册