[PATCH 1/1] rtemsbsd/sdhci: Fix Arasan driver when no card present

rvanderwal at bellsouth.net rvanderwal at bellsouth.net
Thu Mar 23 00:02:03 UTC 2023


From: Rick VanderWal <rvanderwal at bellsouth.net>

This fixes an issue where the card present signal doesn't stabilize
quickly and indicates present when no card is inserted in a removable
slot.
---
 rtemsbsd/sys/dev/sdhci/arasan_sdhci.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
index 0e87d903..7ac0a971 100644
--- a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
+++ b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
@@ -195,6 +195,26 @@ arasan_sdhci_get_card_present(device_t dev, struct sdhci_slot *slot)
 {
 	struct arasan_sdhci_softc *sc = device_get_softc(dev);
 
+	// wait a maximum of 1 second for card stable to settle
+	const unsigned int max_tries = 20;
+	const rtems_interval sleep_ticks =
+		rtems_clock_get_ticks_per_second() / max_tries;
+
+	unsigned int count = 0;
+	while (!(RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_STABLE) &&
+		(count < max_tries))
+	{
+		rtems_task_wake_after(sleep_ticks);
+		++count;
+	}
+
+	if (!(RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_STABLE))
+	{
+		device_printf(dev,
+			"CD failed to stabilize, setting to not present.\n");
+		return false;
+	}
+
 	return (RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
 }
 
-- 
2.34.1



More information about the devel mailing list