diff options
Diffstat (limited to 'drivers/mmc/core/mmc.c')
| -rw-r--r-- | drivers/mmc/core/mmc.c | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 0d80b72ddde8..8741271d3971 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -423,10 +423,6 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)  		/* EXT_CSD value is in units of 10ms, but we store in ms */  		card->ext_csd.part_time = 10 * ext_csd[EXT_CSD_PART_SWITCH_TIME]; -		/* Some eMMC set the value too low so set a minimum */ -		if (card->ext_csd.part_time && -		    card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME) -			card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME;  		/* Sleep / awake timeout in 100ns units */  		if (sa_shift > 0 && sa_shift <= 0x17) @@ -616,6 +612,17 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)  		card->ext_csd.data_sector_size = 512;  	} +	/* +	 * GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined +	 * when accessing a specific field", so use it here if there is no +	 * PARTITION_SWITCH_TIME. +	 */ +	if (!card->ext_csd.part_time) +		card->ext_csd.part_time = card->ext_csd.generic_cmd6_time; +	/* Some eMMC set the value too low so set a minimum */ +	if (card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME) +		card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME; +  	/* eMMC v5 or later */  	if (card->ext_csd.rev >= 7) {  		memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],  | 
