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:
Родитель
068500e08d
Коммит
ee5e7c1091
|
@ -946,8 +946,21 @@ static void dma_rx_callback(void *data)
|
|||
tty_flip_buffer_push(port);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
static int start_rx_dma(struct imx_port *sport)
|
||||
|
|
Загрузка…
Ссылка в новой задаче