[PATCH] cmd: mmc: Support mmc hwpartition user enh start -

Marek Vasut marex at denx.de
Wed Sep 15 11:40:48 CEST 2021


On 9/15/21 4:30 AM, Peng Fan (OSS) wrote:
> 
> On 2021/9/12 5:14, Marek Vasut wrote:
>> Add option to extend the hardware partition to the maximum size by
>> using the '-' dash sign instead of $cnt parameter. This is useful
>> in case we want to switch the entire eMMC user area into pSLC mode,
>> especially in case the device may be populated with different size
>> eMMCs. With this change, we do not have to calculate the number of
>> blocks of the user area manually.
>>
>> To switch the pSLC mode for user area, use e.g. the following.
>> WARNING: This is a one-time irreversible change.
>> => mmc hwpartition user enh 0 - wrrel on complete
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> Cc: Fabio Estevam <festevam at gmail.com>
>> Cc: Jaehoon Chung <jh80.chung at samsung.com>
>> Cc: Peng Fan <peng.fan at nxp.com>
>> Cc: Stefano Babic <sbabic at denx.de>
>> ---
>>   cmd/mmc.c | 32 ++++++++++++++++++++++++++++----
>>   1 file changed, 28 insertions(+), 4 deletions(-)
>>
>> diff --git a/cmd/mmc.c b/cmd/mmc.c
>> index c67ad762422..b6bb951347d 100644
>> --- a/cmd/mmc.c
>> +++ b/cmd/mmc.c
>> @@ -560,7 +560,32 @@ static int do_mmc_list(struct cmd_tbl *cmdtp, int 
>> flag,
>>   }
>>   #if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
>> -static int parse_hwpart_user(struct mmc_hwpart_conf *pconf,
>> +static void parse_hwpart_user_enh_size(struct mmc *mmc,
>> +                       struct mmc_hwpart_conf *pconf,
>> +                       char *argv)
>> +{
>> +    int ret;
>> +
>> +    pconf->user.enh_size = 0;
>> +
>> +    if (!strcmp(argv, "-"))    { /* The rest of eMMC */
>> +        ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
>> +        ret = mmc_send_ext_csd(mmc, ext_csd);
>> +        if (ret)
>> +            return;
>> +        pconf->user.enh_size =
>> +            ((ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
> 
> space before/after "+"
> 
>> +            (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
> 
> Ditto
> 
>> +            ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT]) * 1024 *
> 
> Hardcode HC_WP_GRP_SIZE to 1024?
> Per spec:
> 
> (GP_SIZE_MULT_X_2 * 2^16 + GP_SIZE_MULT_X_1 * 2^8 + GP_SIZE_MULT_X_0 * 
> 2^0) * HC_WP_GRP_SIZE * HC_ERASE_GRP_SIZE * 512kBytes

That "1024" above is that "* 512kBytes" part, in 512 Byte block units.


More information about the U-Boot mailing list