• Michael Wu's avatar
    mmc: core: Fixup support for writeback-cache for eMMC and SD · 08ebf903
    Michael Wu authored
    During the card initialization process, the mmc core checks whether the
    eMMC/SD card supports an internal writeback-cache and then enables it
    inside the card.
    
    Unfortunately, this isn't according to what the mmc core reports to the
    upper block layer. Instead, the writeback-cache support with REQ_FLUSH and
    REQ_FUA, are being enabled depending on whether the host supports the CMD23
    (MMC_CAP_CMD23) and whether an eMMC supports the reliable-write command.
    
    This is wrong and it may also sound awkward. In fact, it's a remnant
    from when both eMMC/SD cards didn't have dedicated commands/support to
    control the internal writeback-cache. In other words, it was the best we
    could do at that point in time.
    
    To fix the problem, but also without breaking backwards compatibility,
    let's align the REQ_FLUSH support with whether the writeback-cache became
    successfully enabled - for both eMMC and SD cards.
    
    Cc: stable@kernel.org
    Fixes: 881d1c25 ("mmc: core: Add cache control for eMMC4.5 device")
    Fixes: 130206a6 ("mmc: core: Add support for cache ctrl for SD cards")
    Depends-on: 97fce126 ("mmc: block: Issue a cache flush only when it's enabled")
    Reviewed-by: default avatarAvri Altman <Avri.Altman@wdc.com>
    Signed-off-by: default avatarMichael Wu <michael@allwinnertech.com>
    Link: https://lore.kernel.org/r/20220331073223.106415-1-michael@allwinnertech.com
    [Ulf: Re-wrote the commit message]
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    08ebf903
block.c 76.5 KB