[U-Boot] [PATCH] mmc: fix ERASE_GRP_DEF handling

if we set manually this bit on the eMMC card using mmc_switch(...), we also have to set it within our (before read) internal structure 'ext_csd'.
Otherwise following checks on this will fail.
Signed-off-by: Hannes Petermaier oe5hpm@oevsv.at --- drivers/mmc/mmc.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index a26f3ce..52a8e36 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1010,6 +1010,8 @@ static int mmc_startup(struct mmc *mmc)
if (err) return err; + else + ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
/* Read out group size from ext_csd */ mmc->erase_grp_size =

Hi, Hannes.
On 08/08/2014 04:47 PM, Hannes Petermaier wrote:
if we set manually this bit on the eMMC card using mmc_switch(...), we also have to set it within our (before read) internal structure 'ext_csd'.
Otherwise following checks on this will fail.
Signed-off-by: Hannes Petermaier oe5hpm@oevsv.at
drivers/mmc/mmc.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index a26f3ce..52a8e36 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1010,6 +1010,8 @@ static int mmc_startup(struct mmc *mmc)
if (err) return err;
else
ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
When is this value read? If i'm right, you means that it has to set before comparing with test_csd, right? It's reasonable, but i'm not sure that hard-coding is right.
Best Regards, Jaehoon Chung
/* Read out group size from ext_csd */ mmc->erase_grp_size =

Hi, Hannes.
Hi Jaehoon,
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index a26f3ce..52a8e36 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1010,6 +1010,8 @@ static int mmc_startup(struct mmc *mmc)
if (err) return err;
else
ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
When is this value read?
a few lines above, have a look at line 967: /* check ext_csd version and capacity */ err = mmc_send_ext_csd(mmc, ext_csd);
If i'm right, you means that it has to set before comparing with
test_csd, right? yes, exactly thats what i mean.
It's reasonable, but i'm not sure that hard-coding is right.
why not ? we set the bit using mmc_switch, and only after success we alter our internal structure.
Best Regards, Jaehoon Chung
best regards, Hannes

Hi Hannes,
On Aug 12, 2014, at 8:47 AM, Hannes Petermaier Hannes.Petermaier@br-automation.com wrote:
Hi, Hannes.
Hi Jaehoon,
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index a26f3ce..52a8e36 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1010,6 +1010,8 @@ static int mmc_startup(struct mmc *mmc)
if (err) return err;
else
ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
When is this value read?
a few lines above, have a look at line 967: /* check ext_csd version and capacity */ err = mmc_send_ext_csd(mmc, ext_csd);
If i'm right, you means that it has to set before comparing with
test_csd, right? yes, exactly thats what i mean.
It's reasonable, but i'm not sure that hard-coding is right.
why not ? we set the bit using mmc_switch, and only after success we alter our internal structure.
It is reasonable in this context, but I’m wary of cases where a read would be required in case the write didn’t ‘take’.
I’ll apply this for now.
Best Regards, Jaehoon Chung
best regards, Hannes
Regards
— Pantelis
participants (3)
-
Hannes Petermaier
-
Jaehoon Chung
-
Pantelis Antoniou