static void dw_writer(struct dw_spi *dws)
 {
-       u32 max;
+       u32 max = tx_max(dws);
        u16 txw = 0;
 
-       spin_lock(&dws->buf_lock);
-       max = tx_max(dws);
        while (max--) {
                /* Set the tx word if the transfer's original "tx" is not null */
                if (dws->tx_end - dws->len) {
                dw_write_io_reg(dws, DW_SPI_DR, txw);
                dws->tx += dws->n_bytes;
        }
-       spin_unlock(&dws->buf_lock);
 }
 
 static void dw_reader(struct dw_spi *dws)
 {
-       u32 max;
+       u32 max = rx_max(dws);
        u16 rxw;
 
-       spin_lock(&dws->buf_lock);
-       max = rx_max(dws);
        while (max--) {
                rxw = dw_read_io_reg(dws, DW_SPI_DR);
                /* Care rx only if the transfer's original "rx" is not null */
                }
                dws->rx += dws->n_bytes;
        }
-       spin_unlock(&dws->buf_lock);
 }
 
 static void int_error_stop(struct dw_spi *dws, const char *msg)
 {
        struct dw_spi *dws = spi_controller_get_devdata(master);
        struct chip_data *chip = spi_get_ctldata(spi);
-       unsigned long flags;
        u8 imask = 0;
        u16 txlevel = 0;
        u32 cr0;
        int ret;
 
        dws->dma_mapped = 0;
-       spin_lock_irqsave(&dws->buf_lock, flags);
        dws->n_bytes = DIV_ROUND_UP(transfer->bits_per_word, BITS_PER_BYTE);
        dws->tx = (void *)transfer->tx_buf;
        dws->tx_end = dws->tx + transfer->len;
        dws->rx = transfer->rx_buf;
        dws->rx_end = dws->rx + transfer->len;
        dws->len = transfer->len;
-       spin_unlock_irqrestore(&dws->buf_lock, flags);
 
        /* Ensure dw->rx and dw->rx_end are visible */
        smp_mb();
 
        dws->master = master;
        dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR);
-       spin_lock_init(&dws->buf_lock);
 
        spi_controller_set_devdata(master, dws);