mmc: fix capacity calculation when EXT_CSD_SEC_CNT is used
Shimoda
PATCH 1/1 mmc: fix capacity calculation when EXT_CSD_SEC_CNT is used
Since the type of "ext_csd" was array of char, the following calculation might fail when the value of ext_csd[EXT_CSD_SEC_CNT] was minus.
capacity = ext_csd[EXT_CSD_SEC_CNT] << 0 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
So, this patch changes the type of "ext_csd" to array of u8.
Signed-off-by Yoshihiro Shimoda <[email protected]>
--- drivers/mmc/mmc.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
drivers/mmc/mmc.c +5 -5
@@ -668,7 +668,7 @@ int mmc_send_op_cond(struct mmc *mmc) } -int mmc_send_ext_csd (struct mmc *mmc,char *ext_csd) +int mmc_send_ext_csd (struct mmc *mmc,u8 *ext_csd) {struct mmc_cmd cmd;struct mmc_data data;
@@ -680,7 +680,7 @@ int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd) cmd.cmdarg =0 ; cmd.flags =0 ; - data.dest = ext_csd; + data.dest = (char *)ext_csd; data.blocks =1 ; data.blocksize =512 ; data.flags =MMC_DATA_READ ;
@@ -716,7 +716,7 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)int mmc_change_freq (struct mmc *mmc) { -ALLOC_CACHE_ALIGN_BUFFER (char, ext_csd,512 ); +ALLOC_CACHE_ALIGN_BUFFER (u8, ext_csd,512 );char cardtype;int err;
@@ -978,8 +978,8 @@ int mmc_startup(struct mmc *mmc)uint mult, freq;u64 cmult, csize, capacity;struct mmc_cmd cmd; -ALLOC_CACHE_ALIGN_BUFFER (char, ext_csd,512 ); -ALLOC_CACHE_ALIGN_BUFFER (char, test_csd,512 ); +ALLOC_CACHE_ALIGN_BUFFER (u8, ext_csd,512 ); +ALLOC_CACHE_ALIGN_BUFFER (u8, test_csd,512 );int timeout =1000 ;#ifdef CONFIG_MMC_SPI_CRC_ON
Signature · 1 line
1.7.1