mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 05:42:58 +00:00
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:
parent
b44c70837a
commit
ce0fbcd2e1
1 changed files with 9 additions and 10 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue