On 7 May 2015 at 12:10, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote: > Hi > > Here is V7 of some patches to move re-tuning support > out of sdhci and into the core, and add support for HS400 > re-tuning. > > Currently sdhci does re-tuning transparently by > calling sdhci_execute_tuning() from its ->request() > function. > > The problem with HS400 re-tuning is that it must be > done in HS200 mode. That means using switch commands > and making ios changes. That means it potentially > conflicts with other command sequences. The new > re-tuning support accomodates that. > > Changes in V7: > > mmc: host: Add facility to support re-tuning > Remove unused mmc_retune_not_needed() > > mmc: core: Enable / disable re-tuning > As already sent separately as V7: > Also flag re-tune needed in SDIO 'keep_power' > case, when a re-tuning timer is being used. > > mmc: core: Add support for re-tuning before each request > Fold in next patch > > mmc: core: Check re-tuning before retrying > Folded into previous patch > > mmc: mmc: Hold re-tuning if the card is put to sleep > Change title to: > mmc: mmc: Hold re-tuning in mmc_sleep() > Remove changes from V6 > Hold re-tuning while card is deselected > > mmc: core: Flag re-tuning is needed on CRC errors > Do it from core rather than the host > > Changes in V6: > > mmc: host: Add facility to support re-tuning > Don't export functions only used in core > > mmc: core: Enable / disable re-tuning > Ensure re-tuning timer is disabled in SDIO suspend > > mmc: core: Hold re-tuning while bkops ongoing > Hold re-tuning always and release only if > bkops is not ongoing. > > mmc: mmc: Hold re-tuning if the card is put to sleep > Hold re-tuning for mmc_sleep even if card is > immediately powered off, disabling re-tuning. > > Changes in V5: > > mmc: host: Add facility to support re-tuning > Make mmc_retune_enable() / mmc_retune_disable() > only called from core. > > mmc: core: Enable / disable re-tuning > Replaces mmc: core: Disable re-tuning when card is no longer initialized > Enables re-tuning when tuning is executed > > mmc: sdhci: Change to new way of doing re-tuning > Set host->retune_period instead of enabling re-tuning. > > Changes in V4: > > These patches now depend on Ulf's patch: > mmc: core: Enable runtime PM management of host devices > > mmc: host: Add facility to support re-tuning > > Assume mmc_claim_host() runtime resumes the host > controller so there are no races with runtime pm. > Consequently remove now un-needed re-tuning host > operations. > > mmc: core: Add support for re-tuning before each request > > Call mmc_retune() prior to ->request() > > mmc: sdhci: Change to new way of doing re-tuning > > Updated to reflect the changes above. > > Changes in V3: > > mmc: host: Add facility to support re-tuning > > Add host->retune_now flag so re-tuning can be > started in the host drivers ->request() > function to avoid racing with Runtime PM. > > Add host operations to let the host know when > re-tuning is held, for eaxmple, to enable > synchronization with runtime suspend / resume. > > Ensure functions are exported. > > mmc: core: Add support for re-tuning before each request > Updated to reflect the change above. > > mmc: core: Check re-tuning before retrying > Updated to reflect the change above. > > mmc: core: Hold re-tuning during switch commands > Updated to reflect the change above. > > mmc: core: Hold re-tuning during erase commands > Updated to reflect the change above. > > mmc: core: Hold re-tuning while bkops ongoing > Updated to reflect the change above. > > mmc: core: Add support for HS400 re-tuning > Updated and as already sent separately as V3: > Remember to mmc_set_bus_speed(card) in mmc_hs400_to_hs200() > > mmc: sdhci: Change to new way of doing re-tuning > Call mmc_retune() from ->request() function to > avoid racing with Runtime PM. And implement > hold_tuning / release_tuning operations to prevent > runtime suspend while re-tuning is held. > > mmc: block: Retry errored data requests when re-tuning is needed > Updated and as already sent separately as V3: > Only retry when there is an error > > Changes in V2: > > Added support to the block driver for re-tuning > and retrying after a CRC error. The host driver > is left to decide when an error indicates re-tuning > is needed. The block driver will retry a data request > once if re-tuning is flagged as needed. > > SDIO drivers need not be aware of re-tuning because > retrying will anyway cause re-tuning when re-tuning > is flagged as needed. Nevertheless SDIO drivers could > use the need_retune flag to instigate a retry when > otherwise they might not have. > > mmc: core: Simplify by adding mmc_execute_tuning() > Dropped because it has been applied > > mmc: host: Add facility to support re-tuning > Renamed mmc_retune_retry() to mmc_retune_recheck() > to better reflect what it does. > > mmc: core: Move mmc_card_removed() into mmc_start_request() > Dropped because it has been applied > > mmc: core: Add support for re-tuning before each request > Fixed un-balanced re-tune hold / release > > mmc: sdhci: Always init buf_ready_int > Dropped because it has been applied > > mmc: core: Separate out the mmc_switch status check so it can be re-used > New patch > > mmc: core: Add support for HS400 re-tuning > It was found that that the original code was not reliable > after a CRC error. The problem was that the CMD13 after a > switch was faiing. So the code was changed to check the > switch status *after* changing the I/O state to match the > switch i.e. the new I/O state is the correct one to use > after a switch. > > mmc: sdhci: Flag re-tuning is needed on CRC or End-Bit errors > New patch > > mmc: block: Check re-tuning in the recovery path > New patch > > mmc: block: Retry data requests when re-tuning is needed > New patch > > mmc: core: Don't print reset warning if reset is not supported > New patch > > > Adrian Hunter (14): > mmc: host: Add facility to support re-tuning > mmc: core: Enable / disable re-tuning > mmc: core: Add support for re-tuning before each request > mmc: core: Hold re-tuning during switch commands > mmc: core: Hold re-tuning during erase commands > mmc: core: Hold re-tuning while bkops ongoing > mmc: mmc: Hold re-tuning in mmc_sleep() > mmc: core: Separate out the mmc_switch status check so it can be re-used > mmc: core: Add support for HS400 re-tuning > mmc: sdhci: Change to new way of doing re-tuning > mmc: core: Flag re-tuning is needed on CRC errors > mmc: block: Check re-tuning in the recovery path > mmc: block: Retry errored data requests when re-tuning is needed > mmc: core: Don't print reset warning if reset is not supported > > drivers/mmc/card/block.c | 14 +++++- > drivers/mmc/card/queue.h | 1 + > drivers/mmc/core/core.c | 57 +++++++++++++++++++---- > drivers/mmc/core/core.h | 2 + > drivers/mmc/core/host.c | 85 ++++++++++++++++++++++++++++++++++ > drivers/mmc/core/host.h | 6 +++ > drivers/mmc/core/mmc.c | 98 ++++++++++++++++++++++++++++++++++++++- > drivers/mmc/core/mmc_ops.c | 44 +++++++++++------- > drivers/mmc/core/mmc_ops.h | 1 + > drivers/mmc/core/sdio.c | 6 ++- > drivers/mmc/host/sdhci.c | 112 ++++++--------------------------------------- > drivers/mmc/host/sdhci.h | 3 -- > include/linux/mmc/host.h | 23 ++++++++++ > 13 files changed, 322 insertions(+), 130 deletions(-) > > > Regards > Adrian > Adrian, thanks for all your efforts around this patchset. I have now applied for my next branch. Kind regards Uffe -- 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