|
@@ -82,12 +82,9 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
|
|
{
|
|
{
|
|
struct mmc_cmd cmd;
|
|
struct mmc_cmd cmd;
|
|
struct mmc_data data;
|
|
struct mmc_data data;
|
|
- int blklen, err;
|
|
|
|
-
|
|
|
|
- blklen = mmc->write_bl_len;
|
|
|
|
|
|
|
|
if ((start + blkcnt) > mmc->block_dev.lba) {
|
|
if ((start + blkcnt) > mmc->block_dev.lba) {
|
|
- printf("MMC: block number 0x%lx exceeds max(0x%lx)",
|
|
|
|
|
|
+ printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
|
|
start + blkcnt, mmc->block_dev.lba);
|
|
start + blkcnt, mmc->block_dev.lba);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -100,21 +97,19 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
|
|
if (mmc->high_capacity)
|
|
if (mmc->high_capacity)
|
|
cmd.cmdarg = start;
|
|
cmd.cmdarg = start;
|
|
else
|
|
else
|
|
- cmd.cmdarg = start * blklen;
|
|
|
|
|
|
+ cmd.cmdarg = start * mmc->write_bl_len;
|
|
|
|
|
|
cmd.resp_type = MMC_RSP_R1;
|
|
cmd.resp_type = MMC_RSP_R1;
|
|
cmd.flags = 0;
|
|
cmd.flags = 0;
|
|
|
|
|
|
data.src = src;
|
|
data.src = src;
|
|
data.blocks = blkcnt;
|
|
data.blocks = blkcnt;
|
|
- data.blocksize = blklen;
|
|
|
|
|
|
+ data.blocksize = mmc->write_bl_len;
|
|
data.flags = MMC_DATA_WRITE;
|
|
data.flags = MMC_DATA_WRITE;
|
|
|
|
|
|
- err = mmc_send_cmd(mmc, &cmd, &data);
|
|
|
|
-
|
|
|
|
- if (err) {
|
|
|
|
- printf("mmc write failed\n\r");
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (mmc_send_cmd(mmc, &cmd, &data)) {
|
|
|
|
+ printf("mmc write failed\n");
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
if (blkcnt > 1) {
|
|
if (blkcnt > 1) {
|
|
@@ -122,10 +117,9 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
|
|
cmd.cmdarg = 0;
|
|
cmd.cmdarg = 0;
|
|
cmd.resp_type = MMC_RSP_R1b;
|
|
cmd.resp_type = MMC_RSP_R1b;
|
|
cmd.flags = 0;
|
|
cmd.flags = 0;
|
|
- err = mmc_send_cmd(mmc, &cmd, NULL);
|
|
|
|
- if (err) {
|
|
|
|
- printf("mmc fail to send stop cmd\n\r");
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (mmc_send_cmd(mmc, &cmd, NULL)) {
|
|
|
|
+ printf("mmc fail to send stop cmd\n");
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -135,18 +129,14 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
|
|
static ulong
|
|
static ulong
|
|
mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
|
|
mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
|
|
{
|
|
{
|
|
- int err;
|
|
|
|
- struct mmc *mmc = find_mmc_device(dev_num);
|
|
|
|
lbaint_t cur, blocks_todo = blkcnt;
|
|
lbaint_t cur, blocks_todo = blkcnt;
|
|
|
|
|
|
|
|
+ struct mmc *mmc = find_mmc_device(dev_num);
|
|
if (!mmc)
|
|
if (!mmc)
|
|
- return -1;
|
|
|
|
|
|
+ return 0;
|
|
|
|
|
|
- err = mmc_set_blocklen(mmc, mmc->write_bl_len);
|
|
|
|
- if (err) {
|
|
|
|
- printf("set write bl len failed\n\r");
|
|
|
|
- return err;
|
|
|
|
- }
|
|
|
|
|
|
+ if (mmc_set_blocklen(mmc, mmc->write_bl_len))
|
|
|
|
+ return 0;
|
|
|
|
|
|
do {
|
|
do {
|
|
/*
|
|
/*
|
|
@@ -155,7 +145,7 @@ mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
|
|
*/
|
|
*/
|
|
cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
|
|
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 -1;
|
|
|
|
|
|
+ return 0;
|
|
blocks_todo -= cur;
|
|
blocks_todo -= cur;
|
|
start += cur;
|
|
start += cur;
|
|
src += cur * mmc->write_bl_len;
|
|
src += cur * mmc->write_bl_len;
|