diff options
author | Tom Rini <trini@konsulko.com> | 2022-02-09 11:40:27 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-02-09 11:40:27 -0500 |
commit | 83d4b7b1e7d785574bba43a66a3b35bdeb080833 (patch) | |
tree | 6253613b1957198f91270a85d82a1a8fd55a590d /cmd/mmc.c | |
parent | 859703251251d9567f29ab10c0a29f98eb0aff5c (diff) | |
parent | 14448e9c97f06717cac95888329ab7cf31929050 (diff) |
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-mmc
- Fix an issue with fsl_esdhc_imx
- Consider GP partitions in "mmc hwpartition user enh start -"
Diffstat (limited to 'cmd/mmc.c')
-rw-r--r-- | cmd/mmc.c | 22 |
1 files 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); } |