• Stefan Agner's avatar
    mmc: sdhci-esdhc-imx: allow 1.8V modes without 100/200MHz pinctrl states · 92748bea
    Stefan Agner authored
    If pinctrl nodes for 100/200MHz are missing, the controller should
    not select any mode which need signal frequencies 100MHz or higher.
    To prevent such speed modes the driver currently uses the quirk flag
    SDHCI_QUIRK2_NO_1_8_V. This works nicely for SD cards since 1.8V
    signaling is required for all faster modes and slower modes use 3.3V
    signaling only.
    
    However, there are eMMC modes which use 1.8V signaling and run below
    100MHz, e.g. DDR52 at 1.8V. With using SDHCI_QUIRK2_NO_1_8_V this
    mode is prevented. When using a fixed 1.8V regulator as vqmmc-supply
    the stack has no valid mode to use. In this tenuous situation the
    kernel continuously prints voltage switching errors:
      mmc1: Switching to 3.3V signalling voltage failed
    
    Avoid using SDHCI_QUIRK2_NO_1_8_V and prevent faster modes by
    altering the SDHCI capability register. With that the stack is able
    to select 1.8V modes even if no faster pinctrl states are available:
      # cat /sys/kernel/debug/mmc1/ios
      ...
      timing spec:    8 (mmc DDR52)
      signal voltage: 1 (1.80 V)
      ...
    
    Link: http://lkml.kernel.org/r/20180628081331.13051-1-stefan@agner.chSigned-off-by: default avatarStefan Agner <stefan@agner.ch>
    Fixes: ad93220d ("mmc: sdhci-esdhc-imx: change pinctrl state according
    to uhs mode")
    Cc: <stable@vger.kernel.org> # v4.13+
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    92748bea
sdhci-esdhc-imx.c 43.1 KB