The proposed solution seems to not solve the problem.
The root of the problem is in mxc_spi_pio_transfer invoked by mxc_spi_transfer.
An SPI transfer consists in two steps: a write and a subsequent read, specified in two separated spi_transfer structs (see function spi_write_then_read in spi.c).
The problem is that in the first step only tx_buf in spi_transfer struct exists, and in the second step only rx_buf.
This is taken into account in function mxc_spi_dma_transfer but NOT in mxc_spi_pio_transfer.
So, to summarize, instead of the patch above, add in mxc_spi_pio_transfer function this row after "INIT_COMPLETION(master_drv_data->xfer_done);":
if (!t->tx_buf) master_drv_data->transfer.tx_buf = (void *)master_drv_data->tmp_buf;
Just another broken driver.