@ -1451,7 +1451,7 @@ static int sd_select_mode_and_width(struct mmc *mmc)
if ( err )
return err ;
/* Restrict card's capabilities by what the host can do */
caps = mmc - > card_caps & ( mmc - > cfg - > host_caps | MMC_MODE_1BIT ) ;
caps = mmc - > card_caps & ( mmc - > host_caps | MMC_MODE_1BIT ) ;
if ( ! uhs_en )
caps & = ~ UHS_CAPS ;
@ -1599,7 +1599,7 @@ static int mmc_select_mode_and_width(struct mmc *mmc)
return err ;
/* Restrict card's capabilities by what the host can do */
mmc - > card_caps & = ( mmc - > cfg - > host_caps | MMC_MODE_1BIT ) ;
mmc - > card_caps & = ( mmc - > host_caps | MMC_MODE_1BIT ) ;
/* Only version 4 of MMC supports wider bus widths */
if ( mmc - > version < MMC_VERSION_4 )
@ -2182,6 +2182,8 @@ int mmc_start_init(struct mmc *mmc)
bool uhs_en = supports_uhs ( mmc - > cfg - > host_caps ) ;
int err ;
mmc - > host_caps = mmc - > cfg - > host_caps ;
/* we pretend there's no card when init is NULL */
no_card = mmc_getcd ( mmc ) = = 0 ;
# if !CONFIG_IS_ENABLED(DM_MMC)
@ -2205,7 +2207,18 @@ int mmc_start_init(struct mmc *mmc)
if ( err )
return err ;
err = mmc_power_on ( mmc ) ;
err = mmc_power_cycle ( mmc ) ;
if ( err ) {
/*
* if power cycling is not supported , we should not try
* to use the UHS modes , because we wouldn ' t be able to
* recover from an error during the UHS initialization .
*/
debug ( " Unable to do a full power cycle. Disabling the UHS modes for safety \n " ) ;
uhs_en = false ;
mmc - > host_caps & = ~ UHS_CAPS ;
err = mmc_power_on ( mmc ) ;
}
if ( err )
return err ;