#define UARTSFIFO_TXOF         0x02
 #define UARTSFIFO_RXUF         0x01
 
-#define DMA_MAXBURST           16
-#define DMA_MAXBURST_MASK      (DMA_MAXBURST - 1)
 #define FSL_UART_RX_DMA_BUFFER_SIZE    64
 
 #define DRIVER_NAME    "fsl-lpuart"
 
        dma_sync_single_for_device(sport->port.dev, sport->dma_tx_buf_bus,
                                UART_XMIT_SIZE, DMA_TO_DEVICE);
-       sport->dma_tx_bytes = count & ~(DMA_MAXBURST_MASK);
+       sport->dma_tx_bytes = count & ~(sport->txfifo_size - 1);
        tx_bus_addr = sport->dma_tx_buf_bus + xmit->tail;
        sport->dma_tx_desc = dmaengine_prep_slave_single(sport->dma_tx_chan,
                                        tx_bus_addr, sport->dma_tx_bytes,
        if (!count)
                return;
 
-       if (count < DMA_MAXBURST)
+       if (count < sport->txfifo_size)
                writeb(readb(sport->port.membase + UARTCR5) & ~UARTCR5_TDMAS,
                                sport->port.membase + UARTCR5);
        else {
                        UARTCR2_RIE | UARTCR2_RE);
        writeb(cr2, sport->port.membase + UARTCR2);
 
-       /* determine FIFO size and enable FIFO mode */
        val = readb(sport->port.membase + UARTPFIFO);
-
-       sport->txfifo_size = 0x1 << (((val >> UARTPFIFO_TXSIZE_OFF) &
-               UARTPFIFO_FIFOSIZE_MASK) + 1);
-
-       sport->rxfifo_size = 0x1 << (((val >> UARTPFIFO_RXSIZE_OFF) &
-               UARTPFIFO_FIFOSIZE_MASK) + 1);
-
        writeb(val | UARTPFIFO_TXFE | UARTPFIFO_RXFE,
                        sport->port.membase + UARTPFIFO);
 
        dma_buf = sport->port.state->xmit.buf;
        dma_tx_sconfig.dst_addr = sport->port.mapbase + UARTDR;
        dma_tx_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
-       dma_tx_sconfig.dst_maxburst = DMA_MAXBURST;
+       dma_tx_sconfig.dst_maxburst = sport->txfifo_size;
        dma_tx_sconfig.direction = DMA_MEM_TO_DEV;
        ret = dmaengine_slave_config(tx_chan, &dma_tx_sconfig);
 
        unsigned long flags;
        unsigned char temp;
 
-       /*whether use dma support by dma request results*/
+       /* determine FIFO size and enable FIFO mode */
+       temp = readb(sport->port.membase + UARTPFIFO);
+
+       sport->txfifo_size = 0x1 << (((temp >> UARTPFIFO_TXSIZE_OFF) &
+               UARTPFIFO_FIFOSIZE_MASK) + 1);
+
+       sport->rxfifo_size = 0x1 << (((temp >> UARTPFIFO_RXSIZE_OFF) &
+               UARTPFIFO_FIFOSIZE_MASK) + 1);
+
+       /* Whether use dma support by dma request results */
        if (lpuart_dma_tx_request(port) || lpuart_dma_rx_request(port)) {
                sport->lpuart_dma_use = false;
        } else {