diff options
Diffstat (limited to 'drivers/mmc/core/mmc.c')
| -rw-r--r-- | drivers/mmc/core/mmc.c | 29 | 
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 8741271d3971..8674c3e0c02c 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1068,7 +1068,7 @@ static int mmc_select_hs(struct mmc_card *card)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			   EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,  			   card->ext_csd.generic_cmd6_time, MMC_TIMING_MMC_HS, -			   true, true); +			   true, true, MMC_CMD_RETRIES);  	if (err)  		pr_warn("%s: switch to high-speed failed, err:%d\n",  			mmc_hostname(card->host), err); @@ -1100,7 +1100,7 @@ static int mmc_select_hs_ddr(struct mmc_card *card)  			   ext_csd_bits,  			   card->ext_csd.generic_cmd6_time,  			   MMC_TIMING_MMC_DDR52, -			   true, true); +			   true, true, MMC_CMD_RETRIES);  	if (err) {  		pr_err("%s: switch to bus width %d ddr failed\n",  			mmc_hostname(host), 1 << bus_width); @@ -1168,7 +1168,7 @@ static int mmc_select_hs400(struct mmc_card *card)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			   EXT_CSD_HS_TIMING, val,  			   card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err) {  		pr_err("%s: switch to high-speed from hs200 failed, err:%d\n",  			mmc_hostname(host), err); @@ -1210,7 +1210,7 @@ static int mmc_select_hs400(struct mmc_card *card)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			   EXT_CSD_HS_TIMING, val,  			   card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err) {  		pr_err("%s: switch to hs400 failed, err:%d\n",  			 mmc_hostname(host), err); @@ -1256,7 +1256,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card)  	val = EXT_CSD_TIMING_HS;  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,  			   val, card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err)  		goto out_err; @@ -1272,7 +1272,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card)  	/* Switch HS DDR to HS */  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,  			   EXT_CSD_BUS_WIDTH_8, card->ext_csd.generic_cmd6_time, -			   0, false, true); +			   0, false, true, MMC_CMD_RETRIES);  	if (err)  		goto out_err; @@ -1287,7 +1287,7 @@ int mmc_hs400_to_hs200(struct mmc_card *card)  	      card->drive_strength << EXT_CSD_DRV_STR_SHIFT;  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,  			   val, card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err)  		goto out_err; @@ -1371,7 +1371,7 @@ static int mmc_select_hs400es(struct mmc_card *card)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			   EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,  			   card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err) {  		pr_err("%s: switch to hs for hs400es failed, err:%d\n",  			mmc_hostname(host), err); @@ -1405,7 +1405,7 @@ static int mmc_select_hs400es(struct mmc_card *card)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			   EXT_CSD_HS_TIMING, val,  			   card->ext_csd.generic_cmd6_time, 0, -			   false, true); +			   false, true, MMC_CMD_RETRIES);  	if (err) {  		pr_err("%s: switch to hs400es failed, err:%d\n",  			mmc_hostname(host), err); @@ -1470,7 +1470,7 @@ static int mmc_select_hs200(struct mmc_card *card)  		err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  				   EXT_CSD_HS_TIMING, val,  				   card->ext_csd.generic_cmd6_time, 0, -				   false, true); +				   false, true, MMC_CMD_RETRIES);  		if (err)  			goto err;  		old_timing = host->ios.timing; @@ -1975,7 +1975,7 @@ static int mmc_poweroff_notify(struct mmc_card *card, unsigned int notify_type)  	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,  			EXT_CSD_POWER_OFF_NOTIFICATION, -			notify_type, timeout, 0, false, false); +			notify_type, timeout, 0, false, false, MMC_CMD_RETRIES);  	if (err)  		pr_err("%s: Power Off Notification timed out, %u\n",  		       mmc_hostname(card->host), timeout); @@ -2029,6 +2029,12 @@ static void mmc_detect(struct mmc_host *host)  	}  } +static bool _mmc_cache_enabled(struct mmc_host *host) +{ +	return host->card->ext_csd.cache_size > 0 && +	       host->card->ext_csd.cache_ctrl & 1; +} +  static int _mmc_suspend(struct mmc_host *host, bool is_suspend)  {  	int err = 0; @@ -2208,6 +2214,7 @@ static const struct mmc_bus_ops mmc_ops = {  	.alive = mmc_alive,  	.shutdown = mmc_shutdown,  	.hw_reset = _mmc_hw_reset, +	.cache_enabled = _mmc_cache_enabled,  };  /*  |