[U-Boot] HS200 for SDHCI is broken

Masahiro Yamada yamada.masahiro at socionext.com
Tue Jun 12 10:54:43 UTC 2018


Hi Siva,

2018-06-12 18:44 GMT+09:00 Siva Durga Prasad Paladugu <sivadur at xilinx.com>:
> Hi Masahiro,
>
> Can you please try with this below change and let me know if it works.
> In our case, we don’t want to read tuning pattern, instead it waits for TUNED_CLK bit to be set in host ctrl2 register. But, in your case, you want to read back the pattern data and compare it.
>
>
> --- 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))
>
>


Yes, it works.  Thanks!



-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list