Message ID | 1412089482-27165-1-git-send-email-mario.schuknecht@dresearch-fe.de |
---|---|
State | Accepted |
Delegated to: | Pantelis Antoniou |
Headers | show |
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 --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] \
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(-)