• Subhash Jadavani's avatar
    mmc: block: fix the data timeout issue with ACMD22 · d380443c
    Subhash Jadavani authored
    If multi block write operation fails for SD card, during
    error handling we send the SD_APP_SEND_NUM_WR_BLKS (ACMD22)
    to know how many blocks were already programmed by card.
    
    But mmc_sd_num_wr_blocks() function which sends the ACMD22
    calculates the data timeout value from csd.tacc_ns and
    csd.tacc_clks parameters which will be 0 for block addressed
    (>2GB cards) SD card. This would result in timeout_ns and
    timeout_clks being 0 in the mmc_request passed to host driver.
    This means host controller would program its data timeout timer
    value with 0 which could result in DATA TIMEOUT errors from
    controller.
    
    To fix this issue, mmc_sd_num_wr_blocks() should instead
    just call the mmc_set_data_timeout() to calculate the
    data timeout value. mmc_set_data_timeout() function
    ensures that non zero timeout value is set even for
    block addressed SD cards.
    Signed-off-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
    Reviewed-by: default avatarVenkatraman S <svenkatr@ti.com>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    d380443c
block.c 46.9 KB