mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, len);
                mtk_spi_setup_packet(host);
 
-               cnt = mdata->xfer_len / 4;
-               iowrite32_rep(mdata->base + SPI_TX_DATA_REG,
-                               trans->tx_buf + mdata->num_xfered, cnt);
+               if (trans->tx_buf) {
+                       cnt = mdata->xfer_len / 4;
+                       iowrite32_rep(mdata->base + SPI_TX_DATA_REG,
+                                       trans->tx_buf + mdata->num_xfered, cnt);
 
-               remainder = mdata->xfer_len % 4;
-               if (remainder > 0) {
-                       reg_val = 0;
-                       memcpy(®_val,
-                               trans->tx_buf + (cnt * 4) + mdata->num_xfered,
-                               remainder);
-                       writel(reg_val, mdata->base + SPI_TX_DATA_REG);
+                       remainder = mdata->xfer_len % 4;
+                       if (remainder > 0) {
+                               reg_val = 0;
+                               memcpy(®_val,
+                                       trans->tx_buf + (cnt * 4) + mdata->num_xfered,
+                                       remainder);
+                               writel(reg_val, mdata->base + SPI_TX_DATA_REG);
+                       }
                }
 
                mtk_spi_enable_transfer(host);