]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
MMC: Max blocks value adjustable
authorMatt Waddel <matt.waddel@linaro.org>
Thu, 24 Feb 2011 16:35:23 +0000 (16:35 +0000)
committerJohn Linn <john.linn@xilinx.com>
Fri, 1 Jun 2012 22:10:46 +0000 (15:10 -0700)
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>
Signed-off-by: Andy Fleming <afleming@freescale.com>
drivers/mmc/mmc.c

index 837552878bb2619d75c985ed828b7907d5d5d1bd..54d467968b0743599131625431f9f235ecb031c7 100644 (file)
 #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;