• Corneliu Doban's avatar
    mmc: sdhci-iproc: fix 32bit writes for TRANSFER_MODE register · 352f4375
    Corneliu Doban authored
    commit 5f651b87 upstream.
    
    When the host controller accepts only 32bit writes, the value of the
    16bit TRANSFER_MODE register, that has the same 32bit address as the
    16bit COMMAND register, needs to be saved and it will be written
    in a 32bit write together with the command as this will trigger the
    host to send the command on the SD interface.
    When sending the tuning command, TRANSFER_MODE is written and then
    sdhci_set_transfer_mode reads it back to clear AUTO_CMD12 bit and
    write it again resulting in wrong value to be written because the
    initial write value was saved in a shadow and the read-back returned
    a wrong value, from the register.
    Fix sdhci_iproc_readw to return the saved value of TRANSFER_MODE
    when a saved value exist.
    Same fix for read of BLOCK_SIZE and BLOCK_COUNT registers, that are
    saved for a different reason, although a scenario that will cause the
    mentioned problem on this registers is not probable.
    
    Fixes: b580c52d ("mmc: sdhci-iproc: add IPROC SDHCI driver")
    Signed-off-by: default avatarCorneliu Doban <corneliu.doban@broadcom.com>
    Signed-off-by: default avatarScott Branden <scott.branden@broadcom.com>
    Cc: stable@vger.kernel.org # v4.1+
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    352f4375
sdhci-iproc.c 8.31 KB