Patchwork [U-Boot,1/3] MMC: Max blocks value adjustable

login
register
mail settings
Submitter matt.waddel@linaro.org
Date Feb. 25, 2011, 2:35 a.m.
Message ID <1298601325-12112-2-git-send-email-matt.waddel@linaro.org>
Download mbox | patch
Permalink /patch/84501/
State Accepted
Commit ce0fbcd2e1bd8c7b0975589b9853f3e8914aa406
Delegated to: Andy Fleming
Headers show

Comments

matt.waddel@linaro.org - Feb. 25, 2011, 2:35 a.m.
From: Matt Waddel <matt.waddel@linaro.org>

The maximum blocks value was hardcoded to 65535 due to a 16 bit
register length.  The value can change for different platforms.
This patch makes the default the current value of 65535, but it
is configurable for other platforms.

Signed-off-by: Matt Waddel <matt.waddel@linaro.org>
---
 drivers/mmc/mmc.c |   19 +++++++++----------
 1 files changed, 9 insertions(+), 10 deletions(-)

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 6805b33..d69eaa1 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -33,6 +33,11 @@ 
 #include <mmc.h>
 #include <div64.h>
 
+/* Set block count limit because of 16 bit register limit on some hardware*/
+#ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
+#define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
+#endif
+
 static struct list_head mmc_devices;
 static int cur_dev_num = -1;
 
@@ -139,11 +144,8 @@  mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
 		return 0;
 
 	do {
-		/*
-		 * The 65535 constraint comes from some hardware has
-		 * only 16 bit width block number counter
-		 */
-		cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
+		cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
+		       CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
 		if(mmc_write_blocks(mmc, start, cur, src) != cur)
 			return 0;
 		blocks_todo -= cur;
@@ -215,11 +217,8 @@  static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
 		return 0;
 
 	do {
-		/*
-		 * The 65535 constraint comes from some hardware has
-		 * only 16 bit width block number counter
-		 */
-		cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
+		cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
+		       CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
 		if(mmc_read_blocks(mmc, dst, start, cur) != cur)
 			return 0;
 		blocks_todo -= cur;