[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