[U-Boot] [PATCH] mmc: fix capacity calculation with high capacity mmc

Lei Wen adrian.wenl at gmail.com
Mon Sep 6 16:11:23 CEST 2010


Hi Reinhard ,

On Mon, Sep 6, 2010 at 10:07 PM, Reinhard Meyer
<u-boot at emk-elektronik.de> wrote:
> Dear Lei Wen,
>> According spec, high capacity mmc should be calculated by sector
>> number multiply by sector size.
>>
>> Signed-off-by: Lei Wen <leiwen at marvell.com>
>> ---
>>  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 ea398a5..bb97171 100644
>> --- a/drivers/mmc/mmc.c
>> +++ b/drivers/mmc/mmc.c
>> @@ -441,6 +441,11 @@ int mmc_change_freq(struct mmc *mmc)
>>       if (!ext_csd[185])
>>               return 0;
>>
>> +     if (!IS_SD(mmc) && mmc->high_capacity) {
>> +             mmc->capacity = ext_csd[212] | (ext_csd[213] << 8)
>> +                     | (ext_csd[214] << 16) | (ext_csd[215] << 24);
>> +             mmc->capacity *= mmc->read_bl_len;
>> +     }
>>       /* High Speed is set, there are two types: 52MHz and 26MHz */
>>       if (cardtype & MMC_HS_52MHZ)
>>               mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
>
> Sorry to kick in again...
>
> a) this calculation is already done in line 717, and certainly does not belong
> in a function called "mmc_change_freq".
>
> b) the current Top-Of-Tree code already calculates the capacity correctly:
>
> 32GB SDHC Card:
>
> Device: mci
> Manufacturer ID: 3
> OEM: 5344
> Name: SD32G
> Tran Speed: 25000000
> Rd Block Len: 512
> SD version 2.0
> High Capacity: Yes
> Capacity: 31914983424
> Bus Width: 4-bit

Yes, for sd card, the calculation method is right.
But for mmc with high capacity, the calculation is wrong. You could
try a mmc card with high capacity, like emmc card.
>
> c) is that now an incremental patch to the one you sent previously?
It is a separate one. :-)

Best regards,
Lei


More information about the U-Boot mailing list