[U-Boot] [PATCH] mmc write bug fix

Ruud Commandeur RCommandeur at clb.nl
Wed May 22 13:19:43 CEST 2013


This patch fixes a bug related to mmc writes.

When doing fatwrites on an SD-Card, MMC bus problems can occur. Depending
on the size of the file, "MMC0: Bus busy timeout!" is reported, resulting
in an SD-Card that is no longer responding.
It appears to be, that set_cluster can be called with a size being zero.
That can be with a file that has a size being an exact multiple
(including 0) of the clustersize, but also for files that are smaller than
the size of one cluster.
The same problem occurs if the "mmc write" command is given with a block
count being 0.

By adding a check for the block count being zero in mmc_write_blocks
(drivers/mmc.c), this problem is solved.

Signed-off-by: Ruud Commandeur <rcommandeur at clb.nl>
Cc: Tom Rini <trini at ti.com>
Cc: Benoît Thébaudeau <benoit.thebaudeau at advansee.com>
Cc: Mats Karrman <Mats.Karrman at tritech.se>
Cc: Andy Fleming <afleming at gmail.com>

Index: drivers/mmc/mmc.c
===================================================================
--- drivers/mmc/mmc.c	(revision 9)
+++ drivers/mmc/mmc.c	(revision 35)
@@ -280,10 +280,12 @@
 		return 0;
 	}
 
-	if (blkcnt > 1)
-		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
-	else
+	if (blkcnt == 0)
+		return 0;
+	else if (blkcnt == 1)
 		cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
+	else
+		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
 
 	if (mmc->high_capacity)
 		cmd.cmdarg = start;


More information about the U-Boot mailing list