diff options
author | Ruud Commandeur <RCommandeur@clb.nl> | 2013-05-22 13:19:43 +0200 |
---|---|---|
committer | Andy Fleming <afleming@freescale.com> | 2013-06-13 16:46:57 -0500 |
commit | a586c0aa211fb79ecaa06aee3299bfdd81329876 (patch) | |
tree | 1fea5eda5ed1823cc2ea43ddd671bbab55587cb1 /drivers | |
parent | 1695b29a5daa1f792e62f4c637284c8c05ea577b (diff) | |
download | u-boot-imx-a586c0aa211fb79ecaa06aee3299bfdd81329876.zip u-boot-imx-a586c0aa211fb79ecaa06aee3299bfdd81329876.tar.gz u-boot-imx-a586c0aa211fb79ecaa06aee3299bfdd81329876.tar.bz2 |
mmc write bug fix
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@clb.nl>
Cc: Tom Rini <trini@ti.com>
Cc: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Cc: Mats Karrman <Mats.Karrman@tritech.se>
Cc: Andy Fleming <afleming@gmail.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/mmc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 0a2f535..fe83934 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -301,10 +301,12 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src) 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; |