diff options
| author | Stefano Babic <sbabic@denx.de> | 2012-11-10 08:05:54 +0100 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2012-11-10 08:05:54 +0100 | 
| commit | 3e4d27b06d7484040355e22eec2cbce7335d6dab (patch) | |
| tree | 9672a2bb2e4ce0edc0ab776ddf0e2ca8e39a5f62 /drivers/mmc/mmc.c | |
| parent | bad05afe083eec0467220de21683443292c5012e (diff) | |
| parent | 59852d03867108217fe88e3bfc3e1e9cedfe63c5 (diff) | |
| download | olio-uboot-2014.01-3e4d27b06d7484040355e22eec2cbce7335d6dab.tar.xz olio-uboot-2014.01-3e4d27b06d7484040355e22eec2cbce7335d6dab.zip | |
Merge git://git.denx.de/u-boot
Diffstat (limited to 'drivers/mmc/mmc.c')
| -rw-r--r-- | drivers/mmc/mmc.c | 129 | 
1 files changed, 19 insertions, 110 deletions
| diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index a60cfe1cb..5ffd8c59e 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -47,104 +47,14 @@ int __board_mmc_getcd(struct mmc *mmc) {  int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,  	alias("__board_mmc_getcd"))); -#ifdef CONFIG_MMC_BOUNCE_BUFFER -static int mmc_bounce_need_bounce(struct mmc_data *orig) -{ -	ulong addr, len; - -	if (orig->flags & MMC_DATA_READ) -		addr = (ulong)orig->dest; -	else -		addr = (ulong)orig->src; - -	if (addr % ARCH_DMA_MINALIGN) { -		debug("MMC: Unaligned data destination address %08lx!\n", addr); -		return 1; -	} - -	len = (ulong)(orig->blocksize * orig->blocks); -	if (len % ARCH_DMA_MINALIGN) { -		debug("MMC: Unaligned data destination length %08lx!\n", len); -		return 1; -	} - -	return 0; -} - -static int mmc_bounce_buffer_start(struct mmc_data *backup, -					struct mmc_data *orig) -{ -	ulong origlen, len; -	void *buffer; - -	if (!orig) -		return 0; - -	if (!mmc_bounce_need_bounce(orig)) -		return 0; - -	memcpy(backup, orig, sizeof(struct mmc_data)); - -	origlen = orig->blocksize * orig->blocks; -	len = roundup(origlen, ARCH_DMA_MINALIGN); -	buffer = memalign(ARCH_DMA_MINALIGN, len); -	if (!buffer) { -		puts("MMC: Error allocating MMC bounce buffer!\n"); -		return 1; -	} - -	if (orig->flags & MMC_DATA_READ) { -		orig->dest = buffer; -	} else { -		memcpy(buffer, orig->src, origlen); -		orig->src = buffer; -	} - -	return 0; -} - -static void mmc_bounce_buffer_stop(struct mmc_data *backup, -					struct mmc_data *orig) -{ -	ulong len; - -	if (!orig) -		return; - -	if (!mmc_bounce_need_bounce(backup)) -		return; - -	if (backup->flags & MMC_DATA_READ) { -		len = backup->blocksize * backup->blocks; -		memcpy(backup->dest, orig->dest, len); -		free(orig->dest); -		orig->dest = backup->dest; -	} else { -		free((void *)orig->src); -		orig->src = backup->src; -	} - -	return; - -} -#else -static inline int mmc_bounce_buffer_start(struct mmc_data *backup, -					struct mmc_data *orig) { return 0; } -static inline void mmc_bounce_buffer_stop(struct mmc_data *backup, -					struct mmc_data *orig) { } -#endif - -int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data) +static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, +			struct mmc_data *data)  {  	struct mmc_data backup;  	int ret;  	memset(&backup, 0, sizeof(backup)); -	ret = mmc_bounce_buffer_start(&backup, data); -	if (ret) -		return ret; -  #ifdef CONFIG_MMC_TRACE  	int i;  	u8 *ptr; @@ -196,11 +106,10 @@ int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)  #else  	ret = mmc->send_cmd(mmc, cmd, data);  #endif -	mmc_bounce_buffer_stop(&backup, data);  	return ret;  } -int mmc_send_status(struct mmc *mmc, int timeout) +static int mmc_send_status(struct mmc *mmc, int timeout)  {  	struct mmc_cmd cmd;  	int err, retries = 5; @@ -244,7 +153,7 @@ int mmc_send_status(struct mmc *mmc, int timeout)  	return 0;  } -int mmc_set_blocklen(struct mmc *mmc, int len) +static int mmc_set_blocklen(struct mmc *mmc, int len)  {  	struct mmc_cmd cmd; @@ -437,7 +346,8 @@ mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)  	return blkcnt;  } -int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt) +static int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, +			   lbaint_t blkcnt)  {  	struct mmc_cmd cmd;  	struct mmc_data data; @@ -507,7 +417,7 @@ static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)  	return blkcnt;  } -int mmc_go_idle(struct mmc* mmc) +static int mmc_go_idle(struct mmc *mmc)  {  	struct mmc_cmd cmd;  	int err; @@ -528,8 +438,7 @@ int mmc_go_idle(struct mmc* mmc)  	return 0;  } -int -sd_send_op_cond(struct mmc *mmc) +static int sd_send_op_cond(struct mmc *mmc)  {  	int timeout = 1000;  	int err; @@ -594,7 +503,7 @@ sd_send_op_cond(struct mmc *mmc)  	return 0;  } -int mmc_send_op_cond(struct mmc *mmc) +static int mmc_send_op_cond(struct mmc *mmc)  {  	int timeout = 10000;  	struct mmc_cmd cmd; @@ -658,7 +567,7 @@ int mmc_send_op_cond(struct mmc *mmc)  } -int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd) +static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)  {  	struct mmc_cmd cmd;  	struct mmc_data data; @@ -680,7 +589,7 @@ int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)  } -int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value) +static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)  {  	struct mmc_cmd cmd;  	int timeout = 1000; @@ -702,7 +611,7 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)  } -int mmc_change_freq(struct mmc *mmc) +static int mmc_change_freq(struct mmc *mmc)  {  	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512);  	char cardtype; @@ -772,7 +681,7 @@ int mmc_getcd(struct mmc *mmc)  	return cd;  } -int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp) +static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)  {  	struct mmc_cmd cmd;  	struct mmc_data data; @@ -793,7 +702,7 @@ int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)  } -int sd_change_freq(struct mmc *mmc) +static int sd_change_freq(struct mmc *mmc)  {  	int err;  	struct mmc_cmd cmd; @@ -932,7 +841,7 @@ static const int multipliers[] = {  	80,  }; -void mmc_set_ios(struct mmc *mmc) +static void mmc_set_ios(struct mmc *mmc)  {  	mmc->set_ios(mmc);  } @@ -950,14 +859,14 @@ void mmc_set_clock(struct mmc *mmc, uint clock)  	mmc_set_ios(mmc);  } -void mmc_set_bus_width(struct mmc *mmc, uint width) +static void mmc_set_bus_width(struct mmc *mmc, uint width)  {  	mmc->bus_width = width;  	mmc_set_ios(mmc);  } -int mmc_startup(struct mmc *mmc) +static int mmc_startup(struct mmc *mmc)  {  	int err, width;  	uint mult, freq; @@ -1105,7 +1014,7 @@ int mmc_startup(struct mmc *mmc)  	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {  		/* check  ext_csd version and capacity */  		err = mmc_send_ext_csd(mmc, ext_csd); -		if (!err & (ext_csd[EXT_CSD_REV] >= 2)) { +		if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {  			/*  			 * According to the JEDEC Standard, the value of  			 * ext_csd's capacity is valid if the value is more @@ -1240,7 +1149,7 @@ int mmc_startup(struct mmc *mmc)  	return 0;  } -int mmc_send_if_cond(struct mmc *mmc) +static int mmc_send_if_cond(struct mmc *mmc)  {  	struct mmc_cmd cmd;  	int err; |