diff options
author | Jerry Huang <Chang-Ming.Huang@freescale.com> | 2012-05-17 23:00:51 +0000 |
---|---|---|
committer | Andy Fleming <afleming@freescale.com> | 2012-07-13 17:04:50 -0500 |
commit | d2d8afae338664958b0ab68741419c0f8be26e80 (patch) | |
tree | 4e2c5ccc27e74a9fe982660c7557b46dbe7aa050 | |
parent | 40242bc394030871e6de13883fe1ace5c0b8e15b (diff) | |
download | u-boot-imx-d2d8afae338664958b0ab68741419c0f8be26e80.zip u-boot-imx-d2d8afae338664958b0ab68741419c0f8be26e80.tar.gz u-boot-imx-d2d8afae338664958b0ab68741419c0f8be26e80.tar.bz2 |
SD/MMC: check the card status during erase operation
Use the function 'mmc_send_status' to check the card status.
only when the card is ready, driver can send the next erase command
to the card, otherwise, the erase will failed:
=> mmc erase 0 1
MMC erase: dev # 0, block # 0, count 1 ... 1 blocks erase: OK
=> mmc erase 0 2
MMC erase: dev # 0, block # 0, count 2 ... mmc erase failed
1 blocks erase: ERROR
=> mmc erase 0 4
MMC erase: dev # 0, block # 0, count 4 ... mmc erase failed
1 blocks erase: ERROR
Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
CC: Andy Fleming <afleming@gmail.com>
CC: Marek Vasut <marex@denx.de>
Signed-off-by: Andy Fleming <afleming@freescale.com>
-rw-r--r-- | drivers/mmc/mmc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 98e5af3..c1c2862 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -333,6 +333,7 @@ mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt) int err = 0; struct mmc *mmc = find_mmc_device(dev_num); lbaint_t blk = 0, blk_r = 0; + int timeout = 1000; if (!mmc) return -1; @@ -352,6 +353,10 @@ mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt) break; blk += blk_r; + + /* Waiting for the ready status */ + if (mmc_send_status(mmc, timeout)) + return 0; } return blk; |