>From dbf8c6d4752e076691cf75b39a242a64303a383d Mon Sep 17 00:00:00 2001
From: Philip Rakity <prak...@marvell.com>
Date: Sun, 19 Dec 2010 15:35:00 -0800
Subject: [PATCH] sdhci: add ops to force delay in operations due to silicon 
issues

PXA168 controller needs at least 8 clocks before it can start the
next transaction.  When the bus speed is slow the CPU can get back
to the controller before the 8 clocks causing SD CRC errors.

Add a new host->op to call into platform specific code to delay
the operation until the time has expired

Signed-off-by: Philip Rakity <prak...@marvell.com>
---
 drivers/mmc/host/sdhci.c |    8 ++++++++
 drivers/mmc/host/sdhci.h |    1 +
 2 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 6486009..ff9d5f0 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -922,6 +922,14 @@ static void sdhci_send_command(struct sdhci_host *host, 
struct mmc_command *cmd)
                mdelay(1);
        }
 
+       /*
+        * we cannot talk to controller for 8 bus cycles according to sdio spec
+        * at lowest speed this is 100,000 HZ per cycle or 800,000 cycles
+        * which is quite a LONG TIME on a fast cpu -- so delay if needed
+        */
+       if (host->ops->platform_specific_delay)
+               host->ops->platform_specific_delay(host);
+
        mod_timer(&host->timer, jiffies + 10 * HZ);
 
        host->cmd = cmd;
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index a8c43c9..91749dc 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -225,6 +225,7 @@ struct sdhci_ops {
        void    (*platform_reset_enter)(struct sdhci_host *host, u8 mask);
        void    (*platform_reset_exit)(struct sdhci_host *host, u8 mask);
        unsigned int    (*get_f_max_clock)(struct sdhci_host *host);
+       void    (*platform_specific_delay)(struct sdhci_host *host);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
-- 
1.6.0.4

Attachment: 0014-sdhci-add-ops-to-force-delay-in-operations-due-to-s.patch
Description: 0014-sdhci-add-ops-to-force-delay-in-operations-due-to-s.patch

Reply via email to