Patchwork [U-Boot] SD/MMC: check the card status during erase operation

login
register
mail settings
Submitter Jerry Huang
Date May 18, 2012, 9 a.m.
Message ID <1337331651-24766-1-git-send-email-Chang-Ming.Huang@freescale.com>
Download mbox | patch
Permalink /patch/160051/
State Accepted
Commit d2d8afae338664958b0ab68741419c0f8be26e80
Delegated to: Andy Fleming
Headers show

Comments

Jerry Huang - May 18, 2012, 9 a.m.
From: Jerry Huang <Chang-Ming.Huang@freescale.com>

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>
---
 drivers/mmc/mmc.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
Changming Huang - July 11, 2012, 9:33 a.m.
Hi, Andy,
There is not any feedback for very long time.
Could it be applied to u-boot?

Best Regards
Jerry Huang


> -----Original Message-----
> From: Huang Changming-R66093
> Sent: Friday, May 18, 2012 5:01 PM
> To: u-boot@lists.denx.de
> Cc: Huang Changming-R66093; Andy Fleming; Marek Vasut
> Subject: [PATCH] SD/MMC: check the card status during erase operation
> 
> From: Jerry Huang <Chang-Ming.Huang@freescale.com>
> 
> 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>
> ---
>  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 596732e..f92b662 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;
> --
> 1.7.5.4

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 596732e..f92b662 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;