Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62ce5ed7 authored by Veerabhadrarao Badiganti's avatar Veerabhadrarao Badiganti Committed by Gerrit - the friendly Code Review server
Browse files

mmc: sdhci-msm: Set dll to good phase while sending cmd13 in tuning



Set the dll to last known good phase before sending status command
while executing tuning. This is to ensure that status command won't
fail due to bad phase. Thus we can avoid sending status command
multiple times and reduce tuning latency.

Change-Id: Ib7fa5a8acbbffd9662617a357d221b36494a98b9
Signed-off-by: default avatarVeerabhadrarao Badiganti <vbadigan@codeaurora.org>
parent 229a28ac
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -961,6 +961,7 @@ int sdhci_msm_execute_tuning(struct sdhci_host *host, u32 opcode)
	bool drv_type_changed = false;
	bool drv_type_changed = false;
	struct mmc_card *card = host->mmc->card;
	struct mmc_card *card = host->mmc->card;
	int sts_retry;
	int sts_retry;
	u8 last_good_phase = 0;


	/*
	/*
	 * Tuning is required for SDR104, HS200 and HS400 cards and
	 * Tuning is required for SDR104, HS200 and HS400 cards and
@@ -1046,6 +1047,22 @@ retry:
		mmc_wait_for_req(mmc, &mrq);
		mmc_wait_for_req(mmc, &mrq);


		if (card && (cmd.error || data.error)) {
		if (card && (cmd.error || data.error)) {
			/*
			 * Set the dll to last known good phase while sending
			 * status command to ensure that status command won't
			 * fail due to bad phase.
			 */
			if (tuned_phase_cnt)
				last_good_phase =
					tuned_phases[tuned_phase_cnt-1];
			else if (msm_host->saved_tuning_phase !=
					INVALID_TUNING_PHASE)
				last_good_phase = msm_host->saved_tuning_phase;

			rc = msm_config_cm_dll_phase(host, last_good_phase);
			if (rc)
				goto kfree;

			sts_cmd.opcode = MMC_SEND_STATUS;
			sts_cmd.opcode = MMC_SEND_STATUS;
			sts_cmd.arg = card->rca << 16;
			sts_cmd.arg = card->rca << 16;
			sts_cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
			sts_cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;