Troy found that mmc_davinci_start_command was previously enabling
interrupts too early. This was allowing a TX interrupt to be handled
while the FIFO was being stuffed, resulting in an overstuffed fifo.

Signed-off-by: Troy Kisky <[EMAIL PROTECTED]>
Signed-off-by: Bernard Blackham <[EMAIL PROTECTED]>

-- 
 davinci_mmc.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.c
===================================================================
--- linux-davinci-2.6.24.git.orig/drivers/mmc/host/davinci_mmc.c        
2008-03-25 22:00:13.000000000 +0900
+++ linux-davinci-2.6.24.git/drivers/mmc/host/davinci_mmc.c     2008-03-25 
22:01:11.000000000 +0900
@@ -188,7 +188,7 @@
        /* set Command timeout */
        writel(0xFFFF, host->base + DAVINCI_MMCTOR);
 
-       /* Enable interrupt */
+       /* Enable interrupt (calculate here, defer until FIFO is stuffed). */
        im_val =  MMCSD_EVENT_EOFCMD
                | MMCSD_EVENT_ERROR_CMDCRC
                | MMCSD_EVENT_ERROR_DATACRC
@@ -205,7 +205,6 @@
                if (!host->do_dma)
                        im_val |= MMCSD_EVENT_READ;
        }
-       writel(im_val, host->base + DAVINCI_MMCIM);
 
        /*
         * It is required by controoler b4 WRITE command that
@@ -236,6 +235,7 @@
        host->is_core_command = 1;
        writel(cmd->arg, host->base + DAVINCI_MMCARGHL);
        writel(cmd_reg,  host->base + DAVINCI_MMCCMD);
+       writel(im_val, host->base + DAVINCI_MMCIM);
 }
 
 static void mmc_davinci_dma_cb(int lch, u16 ch_status, void *data)
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to