[SeaBIOS] [PATCH 2/4] sdcard: Move frequency setting into sdcard_card_setup()

Kevin O'Connor kevin at koconnor.net
Mon Aug 24 15:24:08 CET 2015


Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
 src/hw/sdcard.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/hw/sdcard.c b/src/hw/sdcard.c
index bf35277..a60fa92 100644
--- a/src/hw/sdcard.c
+++ b/src/hw/sdcard.c
@@ -355,9 +355,14 @@ sdcard_set_frequency(struct sdhci_s *regs, u32 khz)
 static int
 sdcard_card_setup(struct sdhci_s *regs, int volt)
 {
+    // Set controller to initialization clock rate
+    int ret = sdcard_set_frequency(regs, 400);
+    if (ret)
+        return ret;
+    msleep(SDHCI_CLOCK_ON_TIME);
     // Reset card
     u32 param[4] = { };
-    int ret = sdcard_pio(regs, SC_GO_IDLE_STATE, param);
+    ret = sdcard_pio(regs, SC_GO_IDLE_STATE, param);
     if (ret)
         return ret;
     // Let card know SDHC/SDXC is supported and confirm voltage
@@ -412,6 +417,10 @@ sdcard_card_setup(struct sdhci_s *regs, int volt)
     ret = sdcard_pio(regs, SC_SELECT_DESELECT_CARD, param);
     if (ret)
         return ret;
+    // Set controller to data transfer clock rate
+    ret = sdcard_set_frequency(regs, 25000);
+    if (ret)
+        return ret;
     return card_type;
 }
 
@@ -438,18 +447,11 @@ sdcard_controller_setup(struct sdhci_s *regs, int prio)
     int volt = sdcard_set_power(regs);
     if (volt < 0)
         return;
-    int ret = sdcard_set_frequency(regs, 400);
-    if (ret)
-        goto fail;
-    msleep(SDHCI_CLOCK_ON_TIME);
 
     // Initialize card
     int card_type = sdcard_card_setup(regs, volt);
     if (card_type < 0)
         goto fail;
-    ret = sdcard_set_frequency(regs, 25000);
-    if (ret)
-        goto fail;
 
     // Register drive
     struct sddrive_s *drive = malloc_fseg(sizeof(*drive));
-- 
2.4.3




More information about the SeaBIOS mailing list