MMC: Max blocks value adjustable

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>
This commit is contained in:
Matt Waddel 2011-02-24 16:35:23 +00:00 committed by Andy Fleming
parent b44c70837a
commit ce0fbcd2e1

View file

@ -33,6 +33,11 @@
#include <mmc.h> #include <mmc.h>
#include <div64.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 struct list_head mmc_devices;
static int cur_dev_num = -1; 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; return 0;
do { do {
/* cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
* The 65535 constraint comes from some hardware has CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
* only 16 bit width block number counter
*/
cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
if(mmc_write_blocks(mmc, start, cur, src) != cur) if(mmc_write_blocks(mmc, start, cur, src) != cur)
return 0; return 0;
blocks_todo -= cur; blocks_todo -= cur;
@ -215,11 +217,8 @@ static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
return 0; return 0;
do { do {
/* cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
* The 65535 constraint comes from some hardware has CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
* only 16 bit width block number counter
*/
cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
if(mmc_read_blocks(mmc, dst, start, cur) != cur) if(mmc_read_blocks(mmc, dst, start, cur) != cur)
return 0; return 0;
blocks_todo -= cur; blocks_todo -= cur;