mmc: sdhci: Fix MMC HS200 tuning command failures
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Wed, 13 Jun 2018 06:13:01 +0000 (11:43 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Fri, 15 Jun 2018 06:54:04 +0000 (08:54 +0200)
This patch fixes the mmc tuning command failures
when tuning pattern data needs to read back for
comparision against the expected bit pattern.

Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Tested-by: Masahiro Yamada <yamada.masahiro@socionext.com>
drivers/mmc/sdhci.c

index 40e28abda67f4c0130c6cd85716a55061d0046b1..cdeba914f95cac4037eaf9b9eb521963f9048186 100644 (file)
@@ -161,8 +161,8 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
        /* We shouldn't wait for data inihibit for stop commands, even
           though they might use busy signaling */
        if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
+           ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
+             cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200) && !data))
                mask &= ~SDHCI_DATA_INHIBIT;
 
        while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
@@ -184,8 +184,8 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
        sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
 
        mask = SDHCI_INT_RESPONSE;
-       if (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
-           cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
+       if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
+            cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200) && !data)
                mask = SDHCI_INT_DATA_AVAIL;
 
        if (!(cmd->resp_type & MMC_RSP_PRESENT))