summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYauhen Kharuzhy <jekhor@gmail.com>2009-05-07 00:43:30 +0300
committerAndy Fleming <afleming@freescale.com>2009-06-02 17:20:04 -0500
commit4e3d89ba948eef801ffd46ef862cdede5b3f8320 (patch)
tree7699f14686e9e934bb2b727213730d2c7e57835b
parentf33cb34b3971dabe3720d577b0e1b8601c09fe17 (diff)
downloadu-boot-imx-4e3d89ba948eef801ffd46ef862cdede5b3f8320.zip
u-boot-imx-4e3d89ba948eef801ffd46ef862cdede5b3f8320.tar.gz
u-boot-imx-4e3d89ba948eef801ffd46ef862cdede5b3f8320.tar.bz2
mmc: Fix decoding of SCR & function switch data on little-endian machines
SCR & switch data are read from card as big-endian words and should be converted to CPU byte order. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
-rw-r--r--drivers/mmc/mmc.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 64a311d..8c736ce 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -487,8 +487,8 @@ retry_scr:
return err;
}
- mmc->scr[0] = scr[0];
- mmc->scr[1] = scr[1];
+ mmc->scr[0] = __be32_to_cpu(scr[0]);
+ mmc->scr[1] = __be32_to_cpu(scr[1]);
switch ((mmc->scr[0] >> 24) & 0xf) {
case 0:
@@ -518,7 +518,7 @@ retry_scr:
return err;
/* The high-speed function is busy. Try again */
- if (!switch_status[7] & SD_HIGHSPEED_BUSY)
+ if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
break;
}
@@ -526,7 +526,7 @@ retry_scr:
mmc->card_caps |= MMC_MODE_4BIT;
/* If high-speed isn't supported, we return */
- if (!(switch_status[3] & SD_HIGHSPEED_SUPPORTED))
+ if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
return 0;
err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
@@ -534,7 +534,7 @@ retry_scr:
if (err)
return err;
- if ((switch_status[4] & 0x0f000000) == 0x01000000)
+ if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
mmc->card_caps |= MMC_MODE_HS;
return 0;