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);
|
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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче