diff options
author | Sammy He <r62914@freescale.com> | 2009-12-21 17:09:24 +0800 |
---|---|---|
committer | Sammy He <r62914@freescale.com> | 2009-12-21 17:13:34 +0800 |
commit | 750f168825cb80df2c296d69ec671f117d345c02 (patch) | |
tree | bceb43c97c84946578912de11d62dfeb52749d74 /drivers | |
parent | e9ff0d26c61f8999a3f48b78538eae0b072ce4c6 (diff) | |
download | u-boot-imx-750f168825cb80df2c296d69ec671f117d345c02.zip u-boot-imx-750f168825cb80df2c296d69ec671f117d345c02.tar.gz u-boot-imx-750f168825cb80df2c296d69ec671f117d345c02.tar.bz2 |
ENGR00119526 MX25: Fix mmc read/write failure on mmc ubootrel_imx_2.6.31_09.12.00
Fix MMC read/write failure due to eSDHC register definition wrong
Signed-off-by: Sammy He <r62914@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/imx_esdhc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/mmc/imx_esdhc.c b/drivers/mmc/imx_esdhc.c index 5ee0efd..025be87 100644 --- a/drivers/mmc/imx_esdhc.c +++ b/drivers/mmc/imx_esdhc.c @@ -315,7 +315,11 @@ void set_sysctl(struct mmc *mmc, uint clock) clk = (pre_div << 8) | (div << 4); +#ifdef CONFIG_MX25 + tmp = readl(®s->sysctl) | (SYSCTL_HCKEN | SYSCTL_IPGEN); +#else tmp = readl(®s->sysctl) & (~SYSCTL_SDCLKEN); +#endif writel(tmp, ®s->sysctl); tmp = (readl(®s->sysctl) & (~SYSCTL_CLOCK_MASK)) | clk; @@ -323,10 +327,15 @@ void set_sysctl(struct mmc *mmc, uint clock) mdelay(100); +#ifdef CONFIG_MX25 + tmp = readl(®s->sysctl) | SYSCTL_PEREN; + writel(tmp, ®s->sysctl); +#else while (!(readl(®s->prsstat) & PRSSTAT_SDSTB)) ; tmp = readl(®s->sysctl) | (SYSCTL_SDCLKEN); writel(tmp, ®s->sysctl); +#endif } static void esdhc_set_ios(struct mmc *mmc) @@ -380,6 +389,7 @@ static int esdhc_init(struct mmc *mmc) } */ +#ifndef CONFIG_MX25 set_sysctl(mmc, 400000); tmp = readl(®s->sysctl) | SYSCTL_INITA; @@ -387,6 +397,7 @@ static int esdhc_init(struct mmc *mmc) while (readl(®s->sysctl) & SYSCTL_INITA) mdelay(1); +#endif return 0; } |