[U-Boot] [PATCH] mmc: sdhci: don't clear SDHCI_INT_STATUS register during CMD_INHIBIT
Jaehoon Chung
jh80.chung at samsung.com
Mon Nov 27 07:38:05 UTC 2017
On 11/02/2017 11:10 PM, Jorge Ramirez-Ortiz wrote:
> Fixes emmc initialization regression on the db410c platform.
>
> Clearing this register while SDHCI_PRESENT_STATE reports
> SDHCI_CMD_INHIBIT leads to undefined behaviour on the db410c.
>
> When commit 7dde50 was merged (mmc: sdhci: Wait for SDHCI_INT_DATA_END
> when transferring), SDHCI transfers transitioned to wait for bit
> SDHCI_INT_DATA_END before flagging transfers done.
>
> Without this patch, the db410 platform fails to initialize its eMMC
> due to all of its transfers timing out (SDHCI_INT_DATA_END is never
> raised after all the blocks have been transferred).
>
> Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz at linaro.org>
Applied to u-boot-mmc. Sorry for late.
Best Regards,
Jaehoon Chung
> ---
> drivers/mmc/sdhci.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 11d1f0c..f0c5aad 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -157,7 +157,6 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
> /* Timeout unit - ms */
> static unsigned int cmd_timeout = SDHCI_CMD_DEFAULT_TIMEOUT;
>
> - sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
> mask = SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT;
>
> /* We shouldn't wait for data inihibit for stop commands, even
> @@ -181,6 +180,8 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
> udelay(1000);
> }
>
> + sdhci_writel(host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS);
> +
> mask = SDHCI_INT_RESPONSE;
> if (!(cmd->resp_type & MMC_RSP_PRESENT))
> flags = SDHCI_CMD_RESP_NONE;
>
More information about the U-Boot
mailing list