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: Robin Gong <b38343@freescale.com>
Signed-off-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Robin Gong 2014-12-09 18:11:33 +09:00 коммит произвёл Greg Kroah-Hartman
Родитель 068500e08d
Коммит ee5e7c1091
1 изменённых файлов: 14 добавлений и 1 удалений

Просмотреть файл

@ -946,9 +946,22 @@ 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)
{ {