davinci, mmc: Added a delay reading ext CSD register
authorDavide Bonfanti <davide.bonfanti@bticino.it>
Thu, 29 Nov 2012 01:06:53 +0000 (01:06 +0000)
committerAndy Fleming <afleming@freescale.com>
Mon, 6 May 2013 21:26:24 +0000 (16:26 -0500)
Without this additional delay, some eMMC don't negotiate properly bus width
Tested on:
 - Toshiba THGBM2G8D8FBAIB
 - Toshiba THGBM4G4D1HBAR
 - Micron MTFC4GMVEA (the one giving the problem)
 - Hynix H26M64002BNR
 - SanDisk SDIN5E1-32G

Signed-off-by: Davide Bonfanti <davide.bonfanti@bticino.it>
Acked-by: Tom Rini <trini@ti.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
drivers/mmc/davinci_mmc.c

index e2379e326eeea7d367d08453d22d76c4627794fb..5aa218426f4948eb12f686b0b6099ce58ba9d376 100644 (file)
@@ -285,8 +285,11 @@ dmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
                         */
                        if (bytes_left > fifo_bytes)
                                dmmc_wait_fifo_status(regs, 0x4a);
-                       else if (bytes_left == fifo_bytes)
+                       else if (bytes_left == fifo_bytes) {
                                dmmc_wait_fifo_status(regs, 0x40);
+                               if (cmd->cmdidx == MMC_CMD_SEND_EXT_CSD)
+                                       udelay(600);
+                       }
 
                        for (i = 0; bytes_left && (i < fifo_words); i++) {
                                cmddata = get_val(&regs->mmcdrr);