mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 03:58:18 -04:00
mmc: fix card busy polling
A MMC/SD card may always go into the programming state (and hence be busy) after a block write. Therefore always check the card state, even after single block writes. On the other hand there is no need to check the card status after a read. Also make sure that errors during busy polling are propagated upwards. Signed-off-by: Jan Kloetzke <jan.kloetzke@dspg.com> Cc: Andy Fleming <afleming@gmail.com>
This commit is contained in:
parent
cf39cf5597
commit
93ad0d18c0
@ -305,11 +305,12 @@ mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
|
|||||||
printf("mmc fail to send stop cmd\n");
|
printf("mmc fail to send stop cmd\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Waiting for the ready status */
|
|
||||||
mmc_send_status(mmc, timeout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Waiting for the ready status */
|
||||||
|
if (mmc_send_status(mmc, timeout))
|
||||||
|
return 0;
|
||||||
|
|
||||||
return blkcnt;
|
return blkcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,7 +342,6 @@ int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
|
|||||||
{
|
{
|
||||||
struct mmc_cmd cmd;
|
struct mmc_cmd cmd;
|
||||||
struct mmc_data data;
|
struct mmc_data data;
|
||||||
int timeout = 1000;
|
|
||||||
|
|
||||||
if (blkcnt > 1)
|
if (blkcnt > 1)
|
||||||
cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
|
cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
|
||||||
@ -373,9 +373,6 @@ int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
|
|||||||
printf("mmc fail to send stop cmd\n");
|
printf("mmc fail to send stop cmd\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Waiting for the ready status */
|
|
||||||
mmc_send_status(mmc, timeout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return blkcnt;
|
return blkcnt;
|
||||||
@ -610,7 +607,8 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
|
|||||||
ret = mmc_send_cmd(mmc, &cmd, NULL);
|
ret = mmc_send_cmd(mmc, &cmd, NULL);
|
||||||
|
|
||||||
/* Waiting for the ready status */
|
/* Waiting for the ready status */
|
||||||
mmc_send_status(mmc, timeout);
|
if (!ret)
|
||||||
|
ret = mmc_send_status(mmc, timeout);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user