static int mid_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer)
 {
-       u16 dma_ctrl = 0;
+       u16 imr = 0, dma_ctrl = 0;
 
        dw_writel(dws, DW_SPI_DMARDLR, 0xf);
        dw_writel(dws, DW_SPI_DMATDLR, 0x10);
 
-       if (xfer->tx_buf)
+       if (xfer->tx_buf) {
                dma_ctrl |= SPI_DMA_TDMAE;
-       if (xfer->rx_buf)
+               imr |= SPI_INT_TXOI;
+       }
+       if (xfer->rx_buf) {
                dma_ctrl |= SPI_DMA_RDMAE;
+               imr |= SPI_INT_RXUI | SPI_INT_RXOI;
+       }
        dw_writel(dws, DW_SPI_DMACR, dma_ctrl);
 
        /* Set the interrupt mask */
-       spi_umask_intr(dws, SPI_INT_TXOI | SPI_INT_RXUI | SPI_INT_RXOI);
+       spi_umask_intr(dws, imr);
 
        dws->transfer_handler = dma_transfer;