- Fix an issue with fsl_esdhc_imx
- Consider GP partitions in "mmc hwpartition user enh start -"
This commit is contained in:
Tom Rini 2022-02-09 11:40:27 -05:00
commit 83d4b7b1e7
2 changed files with 22 additions and 5 deletions

View file

@ -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);
}

View file

@ -336,9 +336,8 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,
}
}
if (IS_ENABLED(CONFIG_SYS_FSL_ESDHC_USE_PIO))
esdhc_setup_watermark_level(priv, data);
else
esdhc_setup_watermark_level(priv, data);
if (!IS_ENABLED(CONFIG_SYS_FSL_ESDHC_USE_PIO))
esdhc_setup_dma(priv, data);
/* Calculate the timeout period for data transactions */