modification for commit 804c7f422169212e92530e1ddaf74bf1ca9ebfa1

The original patch contained a bug.
Using a char with sdhci_readl/sdhci_writel operation.
The adjacent bytes to SDHCI_HOST_CONTROL (specially SDHCI_POWER_CONTROL)
get mangled and can result in the controller entering an unstable state.

This patch also moves the process inside sdhci_init().

Signed-off-by: Rommel G Custodio <sessya...@gmail.com>
---
 drivers/mmc/sdhci.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 7845f87..fae2169 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -82,13 +82,6 @@ static int sdhci_transfer_data(struct sdhci_host *host, 
struct mmc_data *data,
                                unsigned int start_addr)
 {
        unsigned int stat, rdy, mask, timeout, block = 0;
-#ifdef CONFIG_MMC_SDMA
-       unsigned char ctrl;
-       ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
-       ctrl &= ~SDHCI_CTRL_DMA_MASK;
-       ctrl |= SDHCI_CTRL_SDMA;
-       sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
-#endif
 
        timeout = 1000000;
        rdy = SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_AVAIL;
@@ -386,6 +379,14 @@ int sdhci_init(struct mmc *mmc)
 {
        struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
 
+#ifdef CONFIG_MMC_SDMA
+       unsigned int ctrl;
+       ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL);
+       ctrl &= ~SDHCI_CTRL_DMA_MASK;
+       ctrl |= SDHCI_CTRL_SDMA;
+       sdhci_writel(host, ctrl, SDHCI_HOST_CONTROL);
+#endif
+
        if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) && !aligned_buffer) {
                aligned_buffer = memalign(8, 512*1024);
                if (!aligned_buffer) {
-- 
1.8.0

Attachment: pgpQ5myWfhh7F.pgp
Description: PGP signature

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to