]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
mmc: Fix missing 1 ms delay after mmc power up
authorChristoph Stoidner <c.stoidner@phytec.de>
Fri, 31 Oct 2025 14:59:51 +0000 (15:59 +0100)
committerPeng Fan <peng.fan@nxp.com>
Thu, 8 Jan 2026 13:57:20 +0000 (21:57 +0800)
mmc/sd specification requires a 1 ms delay (stable supply voltage)
after vdd was enabled and before issuing first command.

For most sdcard/soc combinations, the missing delay seems to be not a
problem because the processing time between enabling vdd and the first
command is often hundreds of microseconds or more. However, in our
specific case, some sdcards were not detected by u-boot:
* soc: NXP i.MX 93
* sdcards: SanDisk Ultra, 64GB micro SDXC 1,
           MediaRange, 8GB, SDHC
* measured time between vdd and first command: approx. 784us
* symptom: both sdcards did not respond at all to first commands,
           u-boot mmc subsystem ran into timeout and stops to
           initialize the cards

Signed-off-by: Christoph Stoidner <c.stoidner@phytec.de>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/mmc/mmc.c

index bf82c5156003acd0e817aafbbd79b869a4f934af..71664173016516c909a48bc909c1cab509e40dcf 100644 (file)
@@ -2933,11 +2933,18 @@ static int mmc_power_cycle(struct mmc *mmc)
                return ret;
 
        /*
-        * SD spec recommends at least 1ms of delay. Let's wait for 2ms
-        * to be on the safer side.
+        * SD spec recommends at least 1ms of 'power on' delay.
+        * Let's wait for 2ms to be on the safer side.
         */
        udelay(2000);
-       return mmc_power_on(mmc);
+       ret = mmc_power_on(mmc);
+
+       /*
+        * SD spec recommends at least 1ms of 'stable supply voltage' delay.
+        * Let's wait for 2ms to be on the safer side.
+        */
+       udelay(2000);
+       return ret;
 }
 
 int mmc_get_op_cond(struct mmc *mmc, bool quiet)