DEBUG_INTR("status = %x...", status);
if (status & (UART_LSR_DR | UART_LSR_BI)) {
- if (up->dma)
- dma_err = up->dma->rx_dma(up, iir);
+ if (up->dma) {
+ /*
+ * The RDI must be masked, or interrupt
+ * would occur all the time.
+ */
+ up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
+ up->port.read_status_mask &= ~UART_LSR_DR;
+ serial_port_out(port, UART_IER, up->ier);
+ dma_err = up->dma->rx_dma(up, iir);
+ }
if (!up->dma || dma_err)
status = serial8250_rx_chars(up, status);
}
serial8250_set_divisor(port, baud, quot, frac);
+ if (up->dma)
+ up->fcr = UART_FCR_ENABLE_FIFO | UART_FCR_T_TRIG_11;
+
/*
* LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
* is written without DLAB set, this mode will be disabled.