diff mbox

[U-Boot] mmc: Fix mmc bus width

Message ID 1412089482-27165-1-git-send-email-mario.schuknecht@dresearch-fe.de
State Accepted
Delegated to: Pantelis Antoniou
Headers show

Commit Message

Mario Schuknecht Sept. 30, 2014, 3:04 p.m. UTC
After setting the bus width, the extended CSD register is read. Some selected
fields are compared with previously read extended CSD register fields. In this
comparison the EXT_CSD_ERASE_GROUP_DEF field is compared. But this field is
previously written under certain circumstances. And then the comparison fails.

Only compare read-only fields. Therefore compare field EXT_CSD_HC_WP_GRP_SIZE
instead of field EXT_CSD_ERASE_GROUP_DEF.

Signed-off-by: Mario Schuknecht <mario.schuknecht@dresearch-fe.de>
---
 drivers/mmc/mmc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Pantelis Antoniou Oct. 2, 2014, 11:20 a.m. UTC | #1
Hi Mario,

On Sep 30, 2014, at 6:04 PM, Mario Schuknecht <mario.schuknecht@dresearch-fe.de> wrote:

> After setting the bus width, the extended CSD register is read. Some selected
> fields are compared with previously read extended CSD register fields. In this
> comparison the EXT_CSD_ERASE_GROUP_DEF field is compared. But this field is
> previously written under certain circumstances. And then the comparison fails.
> 
> Only compare read-only fields. Therefore compare field EXT_CSD_HC_WP_GRP_SIZE
> instead of field EXT_CSD_ERASE_GROUP_DEF.
> 
> Signed-off-by: Mario Schuknecht <mario.schuknecht@dresearch-fe.de>
> ---
> drivers/mmc/mmc.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index a26f3ce..d1faa9f 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -1127,10 +1127,11 @@ static int mmc_startup(struct mmc *mmc)
> 			mmc_set_bus_width(mmc, widths[idx]);
> 
> 			err = mmc_send_ext_csd(mmc, test_csd);
> +			/* Only compare read only fields */
> 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
> 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
> -				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
> -				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
> +				 && ext_csd[EXT_CSD_HC_WP_GRP_SIZE] \
> +				    == test_csd[EXT_CSD_HC_WP_GRP_SIZE] \
> 				 && ext_csd[EXT_CSD_REV] \
> 				    == test_csd[EXT_CSD_REV]
> 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
> -- 
> 1.8.4.5
> 

Applied, thanks.

Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
diff mbox

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index a26f3ce..d1faa9f 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1127,10 +1127,11 @@  static int mmc_startup(struct mmc *mmc)
 			mmc_set_bus_width(mmc, widths[idx]);
 
 			err = mmc_send_ext_csd(mmc, test_csd);
+			/* Only compare read only fields */
 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
-				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
-				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
+				 && ext_csd[EXT_CSD_HC_WP_GRP_SIZE] \
+				    == test_csd[EXT_CSD_HC_WP_GRP_SIZE] \
 				 && ext_csd[EXT_CSD_REV] \
 				    == test_csd[EXT_CSD_REV]
 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \