From 4c6de9ef3f67020d28d57822bb824312e67a31c4 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Tue, 4 Aug 2015 10:01:02 -0400 Subject: [PATCH] sdcard: Add proper delays during card power up Add card power up timing delays as specified by the sd card "Physical Layer Simplified Specification Version 4.10". Signed-off-by: Kevin O'Connor --- src/hw/sdcard.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/hw/sdcard.c b/src/hw/sdcard.c index 7f34460..eacac71 100644 --- a/src/hw/sdcard.c +++ b/src/hw/sdcard.c @@ -105,6 +105,9 @@ struct sdhci_s { #define SR_OCR_NOTBUSY (1<<31) // SDHCI timeouts +#define SDHCI_POWER_OFF_TIME 1 +#define SDHCI_POWER_ON_TIME 1 +#define SDHCI_CLOCK_ON_TIME 1 // 74 clock cycles #define SDHCI_POWERUP_TIMEOUT 1000 #define SDHCI_PIO_TIMEOUT 1000 // XXX - these are just made up #define SDHCI_TRANSFER_TIMEOUT 10000 @@ -359,10 +362,13 @@ sdcard_controller_setup(void *data) writew(®s->error_signal, 0); writeb(®s->timeout_control, 0x0e); // Set to max timeout writeb(®s->power_control, 0); + msleep(SDHCI_POWER_OFF_TIME); writeb(®s->power_control, SPC_V33 | SPC_POWER_ON); + msleep(SDHCI_POWER_ON_TIME); int ret = sdcard_set_frequency(regs, 400); if (ret) return; + msleep(SDHCI_CLOCK_ON_TIME); // Initialize card int card_type = sdcard_card_setup(regs); -- 2.39.5