On 6 March 2014 10:29, Arend van Spriel <arend@xxxxxxxxxxxx> wrote: > On 02/21/2014 08:59 PM, Arend van Spriel wrote: >> When the host->tuning_count is zero it means that the >> retuning is disabled. This is checked on the first >> run of sdhci_execute_tuning() by the if statement below: >> >> if (!(host->flags & SDHCI_NEEDS_RETUNING) && host->tuning_count && >> (host->tuning_mode == SDHCI_TUNING_MODE_1)) { >> >> So only when tuning_count is non-zero it will set the host >> flag SDHCI_USING_RETUNING_TIMER. The else statement is only >> for re-programming the timer, which means that flag must be >> set. Because that is not checked the else statement is executed >> in the first run when tuning_count is zero. >> >> This was seen on a host controller which indicated >> SDHCI_TUNING_MODE_1 (0) and tuning_count being zero. Suspect >> that (one of) these registers is not properly set. >> >> Cc: Dong Aisheng <dongas86@xxxxxxxxx> >> Cc: Aaron Lu <aaron.lwe@xxxxxxxxx> >> Signed-off-by: Arend van Spriel <arend@xxxxxxxxxxxx> >> --- >> Noticed this patch was still not applied so please reconsider >> taking it in and let me know. The patch has been rebased and >> applies to the mmc-next branch. > > ping? Am I on some spam filter? What is needed to get this change applied? > > Regards, > Arend > >> Regards, >> Arend >> >> V3: >> - remote tuning mode check for retuning timer reload >> >> V2: >> - add more explanation to the commit message >> - check host flag SDHCI_USING_RETUNING_TIMER >> --- >> drivers/mmc/host/sdhci.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c >> index 9ddef47..d5b421d 100644 >> --- a/drivers/mmc/host/sdhci.c >> +++ b/drivers/mmc/host/sdhci.c >> @@ -2026,12 +2026,11 @@ out: >> host->tuning_count * HZ); >> /* Tuning mode 1 limits the maximum data length to 4MB */ >> mmc->max_blk_count = (4 * 1024 * 1024) / mmc->max_blk_size; >> - } else { >> + } else if (host->flags & SDHCI_USING_RETUNING_TIMER) { >> host->flags &= ~SDHCI_NEEDS_RETUNING; >> /* Reload the new initial value for timer */ >> - if (host->tuning_mode == SDHCI_TUNING_MODE_1) >> - mod_timer(&host->tuning_timer, jiffies + >> - host->tuning_count * HZ); >> + mod_timer(&host->tuning_timer, jiffies + >> + host->tuning_count * HZ); >> } >> >> /* >> > I don't have any deeper insight about the retuning mechanism for sdhci, still this seems reasonable. Acked-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html