• Haibo Chen's avatar
    mmc: sdhci-esdhc-imx: add flag ESDHC_FLAG_BROKEN_AUTO_CMD23 · 74898cbc
    Haibo Chen authored
    Since L4.15, community involve the commit 105819c8 ("mmc: core: use mrq->sbc
    when sending CMD23 for RPMB"), let the usdhc to decide whether to use ACMD23 for
    RPMB. This CMD23 for RPMB need to set the bit 31 to its argument, if not, the
    RPMB write operation will return general fail.
    
    According to the sdhci logic, SDMA mode will disable the ACMD23, and only in
    ADMA mode, it will chose to use ACMD23 if the host support. But according to
    debug, and confirm with IC, the imx6qpdl/imx6sx/imx6sl/imx7d do not support
    the ACMD23 feature completely. These SoCs only use the 16 bit block count of
    the register 0x4 (BLOCK_ATT) as the CMD23's argument in ACMD23 mode, which
    means it will ignore the upper 16 bit of the CMD23's argument. This will block
    the reliable write operation in RPMB, because RPMB reliable write need to set
    the bit31 of the CMD23's argument. This is the hardware limitation. So for
    imx6qpdl/imx6sx/imx6sl/imx7d, it need to broke the ACMD23 for eMMC, SD card do
    not has this limitation, because SD card do not support reliable write.
    
    For imx6ul/imx6ull/imx6sll/imx7ulp/imx8, it support the ACMD23 completely, it
    change to use the 0x0 register (DS_ADDR) to put the CMD23's argument in ADMA mode.
    
    This patch add a new flag ESDHC_FLAG_BROKEN_AUTO_CMD23, and add this flag to
    imx6q/imx6sx/imx6sl/imx7d, and due to the imx6sll share the same compatible string
    with imx6sx before, and imx6sll do not has this limitation, so add a new compatible
    string for imx6sll.
    Signed-off-by: default avatarHaibo Chen <haibo.chen@nxp.com>
    Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/1582100757-20683-4-git-send-email-haibo.chen@nxp.comSigned-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    74898cbc
sdhci-esdhc-imx.c 52.9 KB