• Ulf Hansson's avatar
    mmc: core: Update CMD13 busy check for CMD6 commands · 2a1c7cda
    Ulf Hansson authored
    Through mmc_poll_for_busy() a CMD13 may be sent to get the status of the
    (e)MMC card. If the state of the card is R1_STATE_PRG, the card is
    considered as being busy, which means we continue to poll with CMD13. This
    seems to be sufficient, but it's also unnecessary fragile, as it means a
    new command/request could potentially be sent to the card when it's in an
    unknown state.
    
    To try to improve the situation, but also to move towards a more consistent
    CMD13 polling behaviour in the mmc core, let's deploy the same policy we
    use for regular I/O write requests. In other words, let's check that card
    returns to the R1_STATE_TRAN and that the R1_READY_FOR_DATA bit is set in
    the CMD13 response, before exiting the polling loop.
    
    Note that, potentially this changed behaviour could lead to unnecessary
    waiting for the timeout to expire, if the card for some reason, moves to an
    unexpected error state. However, as we bail out from the polling loop when
    R1_SWITCH_ERROR bit is set or when the CMD13 fails, this shouldn't be an
    issue.
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Tested-by: default avatarBaolin Wang <baolin.wang7@gmail.com>
    Tested-by: default avatarLudovic Barre <ludovic.barre@st.com>
    Reviewed-by: default avatarLudovic Barre <ludovic.barre@st.com>
    Link: https://lore.kernel.org/r/20200204085449.32585-8-ulf.hansson@linaro.org
    2a1c7cda
mmc_ops.c 23.2 KB