diff mbox

[U-Boot] i.MX28: Lower the amount of blocks transfered in one DMA cycle

Message ID 1333947018-28037-1-git-send-email-marex@denx.de
State Accepted
Commit e7205905e7b9a483c412eefd2aea290a7eee567b
Delegated to: Andy Fleming
Headers show

Commit Message

Marek Vasut April 9, 2012, 4:50 a.m. UTC
Some MMC cards, like my ancient 32.0MB SanDisk RS-MMC cards had issue if b_max
was set to 0x40 and DMA was enabled. Lower this value to 0x20, which allows
these cards to work too.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
Cc: Detlev Zundel <dzu@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
---
 drivers/mmc/mxsmmc.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

NOTE: I need to do more tests on other obscure cards tomorrow.

Comments

Fabio Estevam April 9, 2012, 1:06 p.m. UTC | #1
Hi Marek,

On 4/9/12, Marek Vasut <marex@denx.de> wrote:
> Some MMC cards, like my ancient 32.0MB SanDisk RS-MMC cards had issue if
> b_max
> was set to 0x40 and DMA was enabled. Lower this value to 0x20, which allows
> these cards to work too.

I know this is off topic here, but I am wondering whether the mxs mmc
driver in the kernel is able to handle this card correctly or not.

Regards,

Fabio Estevam
Marek Vasut April 9, 2012, 7:02 p.m. UTC | #2
Dear Fabio Estevam,

> Hi Marek,
> 
> On 4/9/12, Marek Vasut <marex@denx.de> wrote:
> > Some MMC cards, like my ancient 32.0MB SanDisk RS-MMC cards had issue if
> > b_max
> > was set to 0x40 and DMA was enabled. Lower this value to 0x20, which
> > allows these cards to work too.
> 
> I know this is off topic here, but I am wondering whether the mxs mmc
> driver in the kernel is able to handle this card correctly or not.

Linux does, but I think there must be some limit to multiblock transfers there, 
otherwise it'd fail too.

> Regards,
> 
> Fabio Estevam

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 35c6bda..6572e95 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -406,7 +406,7 @@  int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
 	 */
 	mmc->f_min = 400000;
 	mmc->f_max = mxc_get_clock(MXC_SSP0_CLK + id) * 1000 / 2;
-	mmc->b_max = 0x40;
+	mmc->b_max = 0x20;
 
 	mmc_register(mmc);
 	return 0;