• Adrian Hunter's avatar
    mmc: core: Add support for re-tuning before each request · 90a81489
    Adrian Hunter authored
    At the start of each request, re-tune if needed and
    then hold off re-tuning again until the request is done.
    
    Note that though there is one function that starts
    requests (mmc_start_request) there are two that wait for
    the request to be done (mmc_wait_for_req_done and
    mmc_wait_for_data_req_done).  Also note that
    mmc_wait_for_data_req_done can return even when the
    request is not done (which allows the block driver
    to prepare a newly arrived request while still
    waiting for the previous request).
    
    This patch ensures re-tuning is held for the duration
    of a request.  Subsequent patches will also hold
    re-tuning at other times when it might cause a
    conflict.
    
    In addition, possibly a command is failing because
    re-tuning is needed. Use mmc_retune_recheck() to check
    re-tuning. At that point re-tuning is held, at least by
    the request, so mmc_retune_recheck() flags host->retune_now
    if the hold count is 1.
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    90a81489
core.c 66.4 KB