[U-Boot,v2] mmc: sdhci: Fix MMC HS200 tuning command failures

Message ID 42d5dcbfd9f9e1985f0994b6dd7466acbba5b114.1528870838.git.michal.simek@xilinx.com
State Accepted
Delegated to: Tom Rini
Headers show
Series
  • [U-Boot,v2] mmc: sdhci: Fix MMC HS200 tuning command failures
Related show

Commit Message

Michal Simek June 13, 2018, 6:20 a.m.
From: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>

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>
---

Changes in v2:
- Fixed typo and added Reported-by

 drivers/mmc/sdhci.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Masahiro Yamada June 13, 2018, 7 a.m. | #1
2018-06-13 15:20 GMT+09:00 Michal Simek <michal.simek@xilinx.com>:
> From: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
>
> 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>


This one applies and works for me.

Tested-by: Masahiro Yamada <yamada.masahiro@socionext.com>


Thanks.


> ---
>
> Changes in v2:
> - Fixed typo and added Reported-by
>
>  drivers/mmc/sdhci.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 40e28abda67f..cdeba914f95c 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -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))
> --
> 1.9.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
Tom Rini June 19, 2018, 6:43 p.m. | #2
On Wed, Jun 13, 2018 at 08:20:39AM +0200, Michal Simek wrote:

> From: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
> 
> 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>

Applied to u-boot/master, thanks!

Patch

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 40e28abda67f..cdeba914f95c 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -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))