I believe I ran into this problem as well. Here's what fixed it for me:
diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
index 309b61f..93c0653 100644
--- a/drivers/spi/mxc_spi.c
+++ b/drivers/spi/mxc_spi.c
@@ -671,6 +671,7 @@ static int mxc_spi_probe(struct platform_device *pdev)
__raw_writel(MXC_CSPIRESET_START,
master_drv_data->base + MXC_CSPIRESET);
udelay(1);
+ __raw_writel(MXC_CSPICTRL_DISABLE, master_drv_data->base + MXC_CSPICTRL);
__raw_writel(MXC_CSPICTRL_ENABLE | MXC_CSPICTRL_MASTER,
master_drv_data->base + MXC_CSPICTRL);
__raw_writel(MXC_CSPIPERIOD_32KHZ,
The problem is the receive fifo still has some data in it and the spi controller is still enabled from LoLo. So the controller must be explicitly disabled then enabled to clear the fifo.
Colin