
From: Stefan Herbrechtsmeier stefan.herbrechtsmeier@weidmueller.com
The card detect logic needs a short card present signal to work dependable. Without a present card the SDHCI_CARD_STATE_STABLE signal is not set dependable after a reset. Use the internal fixed card present signal to initiate the card detect logic.
Signed-off-by: Stefan Herbrechtsmeier stefan.herbrechtsmeier@weidmueller.com
--- On our hardware we get a "Sdhci card detect state not stable" error in the SPL if no mmc card is present. It is unclear if this patch is the correct solution, but a short card inserts or a fixed card present signal leads to a SDHCI_CARD_STATE_STABLE signal with and without card.
drivers/mmc/zynq_sdhci.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index e44868aaec..a88feeb367 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -1075,6 +1075,26 @@ static int sdhci_zynqmp_set_dynamic_config(struct arasan_sdhci_priv *priv, return ret; }
+ /* The card detect logic needs a short card present signal to work + * dependable. Without a present card the SDHCI_CARD_STATE_STABLE + * signal is not set dependable after a reset. Use the internal + * fixed card present signal to initiate the card detect logic. + */ + if (!dev_read_bool(dev, "non-removable")) { + ret = zynqmp_pm_set_sd_config(priv->node_id, SD_CONFIG_EMMC_SEL, + 1); + if (ret) { + dev_err(dev, "SD_CONFIG_EMMC_SEL failed\n"); + return ret; + } + ret = zynqmp_pm_set_sd_config(priv->node_id, SD_CONFIG_EMMC_SEL, + 0); + if (ret) { + dev_err(dev, "SD_CONFIG_EMMC_SEL failed\n"); + return ret; + } + } + return 0; } #endif