On 1/27/22 08:16, Jaehoon Chung wrote:
> On 1/18/22 06:54, Marek Vasut wrote:
>> In case the eMMC contains any GP partitions or user sets up new GP
>> partitions, the size of these GP partitions reduce the size of the
>> USER partition. Subtract the size of those GP partitions from the
>> calculated size of USER partition when using `user enh start -`.
>>
>> The following test used to fail before:
>> ```
>> u-boot=> mmc hwpartition gp1 524288 enh user enh 0 - wrrel on check
>> Partition configuration:
>>         User Enhanced Start: 0 Bytes
>>         User Enhanced Size: 1.8 GiB
>>         User partition write reliability: on
>>         GP1 Capacity: 256 MiB ENH
>>         No GP2 partition
>>         No GP3 partition
>>         No GP4 partition
>> Total enhanced size exceeds maximum (261 > 229)
>> Failed!
>> ```
>> The test now passes:
>> ```
>> u-boot=> mmc hwpartition gp1 524288 enh user enh 0 - wrrel on check
>> Partition configuration:
>>         User Enhanced Start: 0 Bytes
>>         User Enhanced Size: 1.5 GiB
>>         User partition write reliability: on
>>         GP1 Capacity: 256 MiB ENH
>>         No GP2 partition
>>         No GP3 partition
>>         No GP4 partition
>> ```
>>
>> Signed-off-by: Marek Vasut <ma...@denx.de>
>> Cc: Fabio Estevam <feste...@gmail.com>
>> Cc: Jaehoon Chung <jh80.ch...@samsung.com>
>> Cc: Peng Fan <peng....@nxp.com>
>> Cc: Stefano Babic <sba...@denx.de>
> 
> Reviewed-by: Jaehoon Chung <jh80.ch...@samsung.com>

Applied on u-boot-mmc/master.

Thanks!

Best Regards,
Jaehoon Chung

> 
> Best Regards,
> Jaehoon Chung
> 
>> ---
>>  cmd/mmc.c | 22 ++++++++++++++++++++--
>>  1 file changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/cmd/mmc.c b/cmd/mmc.c
>> index 96d81ffdf36..503dbb6199c 100644
>> --- a/cmd/mmc.c
>> +++ b/cmd/mmc.c
>> @@ -597,7 +597,7 @@ static void parse_hwpart_user_enh_size(struct mmc *mmc,
>>                                     struct mmc_hwpart_conf *pconf,
>>                                     char *argv)
>>  {
>> -    int ret;
>> +    int i, ret;
>>  
>>      pconf->user.enh_size = 0;
>>  
>> @@ -606,7 +606,7 @@ static void parse_hwpart_user_enh_size(struct mmc *mmc,
>>              ret = mmc_send_ext_csd(mmc, ext_csd);
>>              if (ret)
>>                      return;
>> -            /* This value is in 512B block units */
>> +            /* The enh_size value is in 512B block units */
>>              pconf->user.enh_size =
>>                      ((ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT + 2] << 16) +
>>                      (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT + 1] << 8) +
>> @@ -614,6 +614,24 @@ static void parse_hwpart_user_enh_size(struct mmc *mmc,
>>                      ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
>>                      ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
>>              pconf->user.enh_size -= pconf->user.enh_start;
>> +            for (i = 0; i < ARRAY_SIZE(mmc->capacity_gp); i++) {
>> +                    /*
>> +                     * If the eMMC already has GP partitions set,
>> +                     * subtract their size from the maximum USER
>> +                     * partition size.
>> +                     *
>> +                     * Else, if the command was used to configure new
>> +                     * GP partitions, subtract their size from maximum
>> +                     * USER partition size.
>> +                     */
>> +                    if (mmc->capacity_gp[i]) {
>> +                            /* The capacity_gp is in 1B units */
>> +                            pconf->user.enh_size -= mmc->capacity_gp[i] >> 
>> 9;
>> +                    } else if (pconf->gp_part[i].size) {
>> +                            /* The gp_part[].size is in 512B units */
>> +                            pconf->user.enh_size -= pconf->gp_part[i].size;
>> +                    }
>> +            }
>>      } else {
>>              pconf->user.enh_size = dectoul(argv, NULL);
>>      }
> 
> 

Reply via email to