[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