|
@@ -539,15 +539,15 @@ static void imx_dma_tx(struct imx_port *sport)
|
|
|
|
|
|
sport->tx_bytes = uart_circ_chars_pending(xmit);
|
|
|
|
|
|
- if (xmit->tail > xmit->head && xmit->head > 0) {
|
|
|
+ if (xmit->tail < xmit->head) {
|
|
|
+ sport->dma_tx_nents = 1;
|
|
|
+ sg_init_one(sgl, xmit->buf + xmit->tail, sport->tx_bytes);
|
|
|
+ } else {
|
|
|
sport->dma_tx_nents = 2;
|
|
|
sg_init_table(sgl, 2);
|
|
|
sg_set_buf(sgl, xmit->buf + xmit->tail,
|
|
|
UART_XMIT_SIZE - xmit->tail);
|
|
|
sg_set_buf(sgl + 1, xmit->buf, xmit->head);
|
|
|
- } else {
|
|
|
- sport->dma_tx_nents = 1;
|
|
|
- sg_init_one(sgl, xmit->buf + xmit->tail, sport->tx_bytes);
|
|
|
}
|
|
|
|
|
|
ret = dma_map_sg(dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
|