diff options
| author | Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> | 2012-06-07 19:09:11 +0000 | 
|---|---|---|
| committer | Andy Fleming <afleming@freescale.com> | 2012-09-05 17:32:41 -0500 | 
| commit | cdfd1ac6df16f11fa00e30a76e3c37d61c24b7fa (patch) | |
| tree | 9d291d87791b8f52479b31f0afecf84503aff396 /drivers/mmc | |
| parent | 97a7b9928aceefb6e9024261b86e49e0e77d6bfd (diff) | |
| download | olio-uboot-2014.01-cdfd1ac6df16f11fa00e30a76e3c37d61c24b7fa.tar.xz olio-uboot-2014.01-cdfd1ac6df16f11fa00e30a76e3c37d61c24b7fa.zip | |
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 <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/mmc.c | 10 | 
1 files changed, 5 insertions, 5 deletions
| diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 89b674bb4..326274056 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -658,7 +658,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; @@ -669,7 +669,7 @@ int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)  	cmd.resp_type = MMC_RSP_R1;  	cmd.cmdarg = 0; -	data.dest = ext_csd; +	data.dest = (char *)ext_csd;  	data.blocks = 1;  	data.blocksize = 512;  	data.flags = MMC_DATA_READ; @@ -704,7 +704,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; @@ -963,8 +963,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 |