3030
3131static int mmc_set_signal_voltage (struct mmc * mmc , uint signal_voltage );
3232
33+ static bool mmc_is_nonremovable_emmc (struct mmc * mmc )
34+ {
35+ return !mmc_host_is_spi (mmc ) &&
36+ (mmc -> cfg -> host_caps & MMC_CAP_NONREMOVABLE ) &&
37+ (mmc -> cfg -> host_caps & MMC_MODE_8BIT );
38+ }
39+
40+ static unsigned int mmc_go_idle_pre_delay_us (struct mmc * mmc )
41+ {
42+ #if defined(CONFIG_MMC_SDHCI_SNPS )
43+ return mmc_is_nonremovable_emmc (mmc ) ? 1000 : 4000 ;
44+ #else
45+ return 1000 ;
46+ #endif
47+ }
48+
49+ static unsigned int mmc_go_idle_post_delay_us (struct mmc * mmc )
50+ {
51+ return mmc_is_nonremovable_emmc (mmc ) ? 0 : 2000 ;
52+ }
53+
54+ static unsigned int mmc_power_cycle_delay_us (struct mmc * mmc )
55+ {
56+ return mmc_is_nonremovable_emmc (mmc ) ? 1000 : 2000 ;
57+ }
58+
3359#if !CONFIG_IS_ENABLED (DM_MMC )
3460
3561static int mmc_wait_dat0 (struct mmc * mmc , int state , int timeout_us )
@@ -512,12 +538,10 @@ static int mmc_go_idle(struct mmc *mmc)
512538{
513539 struct mmc_cmd cmd ;
514540 int err ;
541+ unsigned int delay_us ;
515542
516- #if defined (CONFIG_MMC_SDHCI_SNPS )
517- udelay (4000 );
518- #else
519- udelay (1000 );
520- #endif
543+ delay_us = mmc_go_idle_pre_delay_us (mmc );
544+ udelay (delay_us );
521545
522546 cmd .cmdidx = MMC_CMD_GO_IDLE_STATE ;
523547 cmd .cmdarg = 0 ;
@@ -528,7 +552,9 @@ static int mmc_go_idle(struct mmc *mmc)
528552 if (err )
529553 return err ;
530554
531- udelay (2000 );
555+ delay_us = mmc_go_idle_post_delay_us (mmc );
556+ if (delay_us )
557+ udelay (delay_us );
532558
533559 return 0 ;
534560}
@@ -696,14 +722,15 @@ static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
696722 return 0 ;
697723}
698724
699- static int mmc_send_op_cond (struct mmc * mmc )
725+ static int mmc_send_op_cond (struct mmc * mmc , bool send_idle )
700726{
701727 int err , i ;
702728 int timeout = 1000 ;
703729 uint start ;
704730
705731 /* Some cards seem to need this */
706- mmc_go_idle (mmc );
732+ if (send_idle )
733+ mmc_go_idle (mmc );
707734
708735 start = get_timer (0 );
709736 /* Asking to the card its capabilities */
@@ -2598,6 +2625,17 @@ static int mmc_startup(struct mmc *mmc)
25982625 return err ;
25992626 }
26002627
2628+ /*
2629+ * Reading EXT_CSD at the initial clock is slow on K230 eMMC. Once the
2630+ * card reaches transfer state, use the CSD legacy rate before CMD8.
2631+ */
2632+ if (!IS_SD (mmc ) && !mmc_host_is_spi (mmc ) &&
2633+ mmc -> legacy_speed > mmc -> clock ) {
2634+ err = mmc_set_clock (mmc , mmc -> legacy_speed , false);
2635+ if (err )
2636+ return err ;
2637+ }
2638+
26012639 /*
26022640 * For SD, its erase group is always one sector
26032641 */
@@ -2788,6 +2826,7 @@ static int mmc_power_off(struct mmc *mmc)
27882826static int mmc_power_cycle (struct mmc * mmc )
27892827{
27902828 int ret ;
2829+ unsigned int delay_us ;
27912830
27922831 ret = mmc_power_off (mmc );
27932832 if (ret )
@@ -2801,13 +2840,15 @@ static int mmc_power_cycle(struct mmc *mmc)
28012840 * SD spec recommends at least 1ms of delay. Let's wait for 2ms
28022841 * to be on the safer side.
28032842 */
2804- udelay (2000 );
2843+ delay_us = mmc_power_cycle_delay_us (mmc );
2844+ udelay (delay_us );
28052845 return mmc_power_on (mmc );
28062846}
28072847
28082848int mmc_get_op_cond (struct mmc * mmc , bool quiet )
28092849{
28102850 bool uhs_en = supports_uhs (mmc -> cfg -> host_caps );
2851+ bool skip_sd_probe = false;
28112852 int err ;
28122853
28132854 if (mmc -> has_init )
@@ -2864,20 +2905,25 @@ int mmc_get_op_cond(struct mmc *mmc, bool quiet)
28642905 /* The internal partition reset to user partition(0) at every CMD0 */
28652906 mmc_get_blk_desc (mmc )-> hwpart = 0 ;
28662907
2867- /* Test for SD version 2 */
2868- err = mmc_send_if_cond (mmc );
2869-
2870- /* Now try to get the SD card's operating condition */
2871- err = sd_send_op_cond (mmc , uhs_en );
2872- if (err && uhs_en ) {
2873- uhs_en = false;
2874- mmc_power_cycle (mmc );
2875- goto retry ;
2908+ skip_sd_probe = mmc_is_nonremovable_emmc (mmc );
2909+ if (!skip_sd_probe ) {
2910+ /* Test for SD version 2 */
2911+ err = mmc_send_if_cond (mmc );
2912+
2913+ /* Now try to get the SD card's operating condition */
2914+ err = sd_send_op_cond (mmc , uhs_en );
2915+ if (err && uhs_en ) {
2916+ uhs_en = false;
2917+ mmc_power_cycle (mmc );
2918+ goto retry ;
2919+ }
2920+ } else {
2921+ err = - ETIMEDOUT ;
28762922 }
28772923
28782924 /* If the command timed out, we check for an MMC card */
28792925 if (err == - ETIMEDOUT ) {
2880- err = mmc_send_op_cond (mmc );
2926+ err = mmc_send_op_cond (mmc , ! skip_sd_probe );
28812927
28822928 if (err ) {
28832929#if !defined(CONFIG_SPL_BUILD ) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT )
0 commit comments