• Sowjanya Komatineni's avatar
    mmc: tegra: update hw tuning process · ea8fc595
    Sowjanya Komatineni authored
    This patch includes below HW tuning related fixes.
        configures tuning parameters as per Tegra TRM
        WAR fix for manual tap change
        HW auto-tuning post process
    
    As per Tegra TRM, SDR50 mode tuning execution takes upto maximum
    of 256 tuning iterations and SDR104/HS200/HS400 modes tuning
    execution takes upto maximum of 128 tuning iterations.
    
    This patch programs tuning control register with maximum tuning
    iterations needed based on the timing along with the start tap,
    multiplier, and step size used by the HW tuning.
    
    Tegra210 has a known issue of glitch on trimmer output when the
    tap value is changed with the trimmer input clock running and the
    WAR is to disable card clock before sending tuning command and
    after sending tuning command wait for 1usec and issue SW reset
    followed by enabling card clock.
    
    This WAR is applicable when changing tap value manually as well.
    Tegra SDHCI driver has this implemented correctly for manual tap
    change but missing SW reset before enabling card clock during
    sending tuning command.
    
    Issuing SW reset during tuning command as a part of WAR and is
    applicable in cases where tuning is performed with single step size
    for more iterations. This patch includes this fix.
    
    HW auto-tuning finds the best largest passing window and sets the
    tap at the middle of the window. With some devices like sandisk
    eMMC driving fast edges and due to high tap to tap delay in the
    Tegra chipset, auto-tuning does not detect falling tap between the
    valid windows resulting in a parital window or a merged window and
    the best tap is set at the signal transition which is actually the
    worst tap location.
    
    Recommended SW solution is to detect if the best passing window
    picked by the HW tuning is a partial or a merged window based on
    min and max tap delays found from chip characterization across
    PVT and perform tuning correction to pick the best tap.
    
    This patch has implementation of this post HW tuning process for
    the tegra hosts that support HW tuning through the callback function
    tegra_sdhci_execute_hw_tuning and uses the tuned tap delay.
    Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Signed-off-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
    Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    ea8fc595
sdhci-tegra.c 45.8 KB