diff options
| author | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-05-11 00:06:03 +0200 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-05-11 00:06:03 +0200 | 
| commit | e825b100d209a9d3c79b2998452cafa94eec986a (patch) | |
| tree | e1654c4d745839eba8d37f67d15acde79382e23e /drivers/mmc/mmc.c | |
| parent | b03b25caea1ff3a501161f5bc1ad5e5b5b124e0c (diff) | |
| parent | 66a62ce0dc48d2319938c72f34a562f519c5d5c2 (diff) | |
| download | olio-uboot-2014.01-e825b100d209a9d3c79b2998452cafa94eec986a.tar.xz olio-uboot-2014.01-e825b100d209a9d3c79b2998452cafa94eec986a.zip | |
Merge branch 'u-boot-pxa/master' into 'u-boot-arm/master'
Diffstat (limited to 'drivers/mmc/mmc.c')
| -rw-r--r-- | drivers/mmc/mmc.c | 26 | 
1 files changed, 14 insertions, 12 deletions
| diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index f65a7b005..2590f1bcc 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -601,7 +601,7 @@ static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)  	data.dest = (char *)ext_csd;  	data.blocks = 1; -	data.blocksize = 512; +	data.blocksize = MMC_MAX_BLOCK_LEN;  	data.flags = MMC_DATA_READ;  	err = mmc_send_cmd(mmc, &cmd, &data); @@ -634,7 +634,7 @@ static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)  static int mmc_change_freq(struct mmc *mmc)  { -	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512); +	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);  	char cardtype;  	int err; @@ -899,8 +899,8 @@ static int mmc_startup(struct mmc *mmc)  	uint mult, freq;  	u64 cmult, csize, capacity;  	struct mmc_cmd cmd; -	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512); -	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, 512); +	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); +	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);  	int timeout = 1000;  #ifdef CONFIG_MMC_SPI_CRC_ON @@ -1016,11 +1016,11 @@ static int mmc_startup(struct mmc *mmc)  	mmc->capacity = (csize + 1) << (cmult + 2);  	mmc->capacity *= mmc->read_bl_len; -	if (mmc->read_bl_len > 512) -		mmc->read_bl_len = 512; +	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN) +		mmc->read_bl_len = MMC_MAX_BLOCK_LEN; -	if (mmc->write_bl_len > 512) -		mmc->write_bl_len = 512; +	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN) +		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;  	/* Select the card, and put it into Transfer Mode */  	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */ @@ -1051,7 +1051,7 @@ static int mmc_startup(struct mmc *mmc)  					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8  					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16  					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24; -			capacity *= 512; +			capacity *= MMC_MAX_BLOCK_LEN;  			if ((capacity >> 20) > 2 * 1024)  				mmc->capacity = capacity;  		} @@ -1079,10 +1079,11 @@ static int mmc_startup(struct mmc *mmc)  		 * group size from ext_csd directly, or calculate  		 * the group size from the csd value.  		 */ -		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) +		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) {  			mmc->erase_grp_size = -			      ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024; -		else { +				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * +					MMC_MAX_BLOCK_LEN * 1024; +		} else {  			int erase_gsz, erase_gmul;  			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;  			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5; @@ -1202,6 +1203,7 @@ static int mmc_startup(struct mmc *mmc)  	mmc->block_dev.lun = 0;  	mmc->block_dev.type = 0;  	mmc->block_dev.blksz = mmc->read_bl_len; +	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);  	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);  	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",  		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), |