Commit 9c6bb8c6 authored by Bean Huo's avatar Bean Huo Committed by Ulf Hansson
Browse files

mmc: sdhci: Return true only when timeout exceeds capacity of the HW timer



Clean up sdhci_calc_timeout() a bit,  and let it set too_big to be true only
when the timeout value required by the eMMC device exceeds the capability of
the host hardware timer.

Signed-off-by: default avatarBean Huo <beanhuo@micron.com>
Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20210917172727.26834-2-huobean@gmail.com


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 546b73ab
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
@@ -930,7 +930,7 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
	struct mmc_data *data;
	unsigned target_timeout, current_timeout;

	*too_big = true;
	*too_big = false;

	/*
	 * If the host controller provides us with an incorrect timeout
@@ -941,7 +941,7 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
	if (host->quirks & SDHCI_QUIRK_BROKEN_TIMEOUT_VAL)
		return host->max_timeout_count;

	/* Unspecified command, asume max */
	/* Unspecified command, assume max */
	if (cmd == NULL)
		return host->max_timeout_count;

@@ -968,17 +968,14 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
	while (current_timeout < target_timeout) {
		count++;
		current_timeout <<= 1;
		if (count > host->max_timeout_count)
			break;
	}

		if (count > host->max_timeout_count) {
			if (!(host->quirks2 & SDHCI_QUIRK2_DISABLE_HW_TIMEOUT))
				DBG("Too large timeout 0x%x requested for CMD%d!\n",
				    count, cmd->opcode);
			count = host->max_timeout_count;
	} else {
		*too_big = false;
			*too_big = true;
			break;
		}
	}

	return count;