summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick VanderWal <rvanderwal@bellsouth.net>2023-03-29 16:07:52 -0500
committerJoel Sherrill <joel@rtems.org>2023-04-04 09:48:25 -0500
commitac4cf946a28329cc65cbc0c30ec1ed0d6449d7cc (patch)
treece0559bdd197c359d2e1c9b7bdeb8e617f721170
parentwaf: Update to waf 2.0.25 (diff)
downloadrtems-libbsd-ac4cf946a28329cc65cbc0c30ec1ed0d6449d7cc.tar.bz2
rtemsbsd/sdhci: Fix Arasan driver when no card present
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.
-rw-r--r--rtemsbsd/sys/dev/sdhci/arasan_sdhci.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
index 0e87d903..722e609d 100644
--- a/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
+++ b/rtemsbsd/sys/dev/sdhci/arasan_sdhci.c
@@ -195,6 +195,27 @@ 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,
+ "Card Detect failed to stabilize,"
+ " setting to not present.\n");
+ return false;
+ }
+
return (RD4(sc, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
}