[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