mmc: don't use malloc_cache_aligned()

Not using this function reduces the size of the binary. It's replaces by
a standard malloc() and the alignment requirement is handled by an
intermediate buffer on the stack.

Also make sure that the allocated buffer is freed in case of error.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
master
Jean-Jacques Hiblot 7 years ago committed by Jaehoon Chung
parent 1de06b9fa5
commit f7d5dffc65
  1. 26
      drivers/mmc/mmc.c

@ -1867,21 +1867,23 @@ static int mmc_startup_v4(struct mmc *mmc)
u64 capacity;
bool has_parts = false;
bool part_completed;
u8 *ext_csd;
ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4))
return 0;
ext_csd = malloc_cache_aligned(MMC_MAX_BLOCK_LEN);
if (!ext_csd)
return -ENOMEM;
mmc->ext_csd = ext_csd;
/* check ext_csd version and capacity */
err = mmc_send_ext_csd(mmc, ext_csd);
if (err)
return err;
goto error;
/* store the ext csd for future reference */
if (!mmc->ext_csd)
mmc->ext_csd = malloc(MMC_MAX_BLOCK_LEN);
if (!mmc->ext_csd)
return -ENOMEM;
memcpy(mmc->ext_csd, ext_csd, MMC_MAX_BLOCK_LEN);
if (ext_csd[EXT_CSD_REV] >= 2) {
/*
* According to the JEDEC Standard, the value of
@ -1990,7 +1992,7 @@ static int mmc_startup_v4(struct mmc *mmc)
EXT_CSD_ERASE_GROUP_DEF, 1);
if (err)
return err;
goto error;
ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
}
@ -2029,6 +2031,12 @@ static int mmc_startup_v4(struct mmc *mmc)
mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
return 0;
error:
if (mmc->ext_csd) {
free(mmc->ext_csd);
mmc->ext_csd = NULL;
}
return err;
}
static int mmc_startup(struct mmc *mmc)

Loading…
Cancel
Save