We save response in the cpu order so we need to parse it in the
cpu order too. Things fixed by this patch:
1. OCR_BUSY should be the highest bit in 32-bit response.
2. Proper "tran speed" calculation on LE systems (tran_exp and
   tran_mant should be in 96..98 and 99..102 bits of 128-bit
   response respectively).
3. Proper MMC version detection.

Signed-off-by: Ilya Yanok <ya...@emcraft.com>
---
 drivers/mmc/mmc.c |   10 +++++-----
 include/mmc.h     |    2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 77a9aea..f7a989b 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -284,7 +284,7 @@ sd_send_op_cond(struct mmc *mmc)
                        return err;
 
                udelay(1000);
-       } while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
+       } while ((!(((uint *)cmd.response)[0] & OCR_BUSY)) && timeout--);
 
        if (timeout <= 0)
                return UNUSABLE_ERR;
@@ -321,7 +321,7 @@ int mmc_send_op_cond(struct mmc *mmc)
                        return err;
 
                udelay(1000);
-       } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
+       } while (!(((uint *)cmd.response)[0] & OCR_BUSY) && timeout--);
 
        if (timeout <= 0)
                return UNUSABLE_ERR;
@@ -651,7 +651,7 @@ int mmc_startup(struct mmc *mmc)
        mmc->csd[3] = ((uint *)(cmd.response))[3];
 
        if (mmc->version == MMC_VERSION_UNKNOWN) {
-               int version = (cmd.response[0] >> 2) & 0xf;
+               int version = (mmc->csd[0] >> 26) & 0xf;
 
                switch (version) {
                        case 0:
@@ -676,8 +676,8 @@ int mmc_startup(struct mmc *mmc)
        }
 
        /* divide frequency by 10, since the mults are 10x bigger */
-       freq = fbase[(cmd.response[3] & 0x7)];
-       mult = multipliers[((cmd.response[3] >> 3) & 0xf)];
+       freq = fbase[(mmc->csd[0] & 0x7)];
+       mult = multipliers[((mmc->csd[0] >> 3) & 0xf)];
 
        mmc->tran_speed = freq * mult;
 
diff --git a/include/mmc.h b/include/mmc.h
index b9b27ba..64764cb 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -91,7 +91,7 @@
 #define MMC_HS_TIMING          0x00000100
 #define MMC_HS_52MHZ           0x2
 
-#define OCR_BUSY       0x80
+#define OCR_BUSY       0x80000000
 #define OCR_HCS                0x40000000
 
 #define MMC_VDD_165_195                0x00000080      /* VDD voltage 1.65 - 
1.95 */
-- 
1.6.0.6

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

Reply via email to