The MMC_RSP_BUSY flag indicates that we have to wait for the transfer completion interrupt. Other SDHCI drivers do this, but the rockchip driver missed it.
Signed-off-by: Sascha Hauer <[email protected]> --- drivers/mci/rockchip-dwcmshc-sdhci.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/mci/rockchip-dwcmshc-sdhci.c b/drivers/mci/rockchip-dwcmshc-sdhci.c index 398c258fb9..2605a1368f 100644 --- a/drivers/mci/rockchip-dwcmshc-sdhci.c +++ b/drivers/mci/rockchip-dwcmshc-sdhci.c @@ -251,7 +251,7 @@ static int rk_sdhci_send_cmd(struct mci_host *mci, struct mci_cmd *cmd) { struct rk_sdhci_host *host = to_rk_sdhci_host(mci); struct mci_data *data = cmd->data; - u32 command, xfer; + u32 mask, command, xfer; int ret; dma_addr_t dma; @@ -261,6 +261,10 @@ static int rk_sdhci_send_cmd(struct mci_host *mci, struct mci_cmd *cmd) sdhci_write32(&host->sdhci, SDHCI_INT_STATUS, ~0); + mask = SDHCI_INT_CMD_COMPLETE; + if (cmd->resp_type & MMC_RSP_BUSY) + mask |= SDHCI_INT_XFER_COMPLETE; + sdhci_write8(&host->sdhci, SDHCI_TIMEOUT_CONTROL, 0xe); sdhci_setup_data_dma(&host->sdhci, data, &dma); @@ -274,7 +278,7 @@ static int rk_sdhci_send_cmd(struct mci_host *mci, struct mci_cmd *cmd) sdhci_write32(&host->sdhci, SDHCI_ARGUMENT, cmd->cmdarg); sdhci_write16(&host->sdhci, SDHCI_COMMAND, command); - ret = sdhci_wait_for_done(&host->sdhci, SDHCI_INT_CMD_COMPLETE); + ret = sdhci_wait_for_done(&host->sdhci, mask); if (ret) { sdhci_teardown_data(&host->sdhci, data, dma); goto error; -- 2.47.3
