|
|
@@ -1823,7 +1823,6 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
|
|
|
struct sdhci_host *host = mmc_priv(mmc);
|
|
|
u16 ctrl;
|
|
|
int tuning_loop_counter = MAX_TUNING_LOOP;
|
|
|
- unsigned long timeout;
|
|
|
int err = 0;
|
|
|
unsigned long flags;
|
|
|
|
|
|
@@ -1882,14 +1881,10 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
|
|
|
* Issue CMD19 repeatedly till Execute Tuning is set to 0 or the number
|
|
|
* of loops reaches 40 times or a timeout of 150ms occurs.
|
|
|
*/
|
|
|
- timeout = 150;
|
|
|
do {
|
|
|
struct mmc_command cmd = {0};
|
|
|
struct mmc_request mrq = {NULL};
|
|
|
|
|
|
- if (!tuning_loop_counter && !timeout)
|
|
|
- break;
|
|
|
-
|
|
|
cmd.opcode = opcode;
|
|
|
cmd.arg = 0;
|
|
|
cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
|
|
|
@@ -1897,6 +1892,9 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
|
|
|
cmd.data = NULL;
|
|
|
cmd.error = 0;
|
|
|
|
|
|
+ if (tuning_loop_counter-- == 0)
|
|
|
+ break;
|
|
|
+
|
|
|
mrq.cmd = &cmd;
|
|
|
host->mrq = &mrq;
|
|
|
|
|
|
@@ -1954,8 +1952,6 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
|
|
|
host->tuning_done = 0;
|
|
|
|
|
|
ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
|
|
|
- tuning_loop_counter--;
|
|
|
- timeout--;
|
|
|
|
|
|
/* eMMC spec does not require a delay between tuning cycles */
|
|
|
if (opcode == MMC_SEND_TUNING_BLOCK)
|
|
|
@@ -1966,17 +1962,15 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
|
|
|
* The Host Driver has exhausted the maximum number of loops allowed,
|
|
|
* so use fixed sampling frequency.
|
|
|
*/
|
|
|
- if (!tuning_loop_counter || !timeout) {
|
|
|
+ if (tuning_loop_counter < 0) {
|
|
|
ctrl &= ~SDHCI_CTRL_TUNED_CLK;
|
|
|
sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
|
|
|
+ }
|
|
|
+ if (!(ctrl & SDHCI_CTRL_TUNED_CLK)) {
|
|
|
+ pr_info(DRIVER_NAME ": Tuning procedure"
|
|
|
+ " failed, falling back to fixed sampling"
|
|
|
+ " clock\n");
|
|
|
err = -EIO;
|
|
|
- } else {
|
|
|
- if (!(ctrl & SDHCI_CTRL_TUNED_CLK)) {
|
|
|
- pr_info(DRIVER_NAME ": Tuning procedure"
|
|
|
- " failed, falling back to fixed sampling"
|
|
|
- " clock\n");
|
|
|
- err = -EIO;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
out:
|