@ -22,14 +22,6 @@
# include <div64.h>
# include "mmc_private.h"
static const unsigned int sd_au_size [ ] = {
0 , SZ_16K / 512 , SZ_32K / 512 ,
SZ_64K / 512 , SZ_128K / 512 , SZ_256K / 512 ,
SZ_512K / 512 , SZ_1M / 512 , SZ_2M / 512 ,
SZ_4M / 512 , SZ_8M / 512 , ( SZ_8M + SZ_4M ) / 512 ,
SZ_16M / 512 , ( SZ_16M + SZ_8M ) / 512 , SZ_32M / 512 , SZ_64M / 512 ,
} ;
static int mmc_set_signal_voltage ( struct mmc * mmc , uint signal_voltage ) ;
static int mmc_power_cycle ( struct mmc * mmc ) ;
static int mmc_select_mode_and_width ( struct mmc * mmc , uint card_caps ) ;
@ -1376,8 +1368,17 @@ int sd_select_bus_width(struct mmc *mmc, int w)
return 0 ;
}
# if CONFIG_IS_ENABLED(MMC_WRITE)
static int sd_read_ssr ( struct mmc * mmc )
{
static const unsigned int sd_au_size [ ] = {
0 , SZ_16K / 512 , SZ_32K / 512 ,
SZ_64K / 512 , SZ_128K / 512 , SZ_256K / 512 ,
SZ_512K / 512 , SZ_1M / 512 , SZ_2M / 512 ,
SZ_4M / 512 , SZ_8M / 512 , ( SZ_8M + SZ_4M ) / 512 ,
SZ_16M / 512 , ( SZ_16M + SZ_8M ) / 512 , SZ_32M / 512 ,
SZ_64M / 512 ,
} ;
int err , i ;
struct mmc_cmd cmd ;
ALLOC_CACHE_ALIGN_BUFFER ( uint , ssr , 16 ) ;
@ -1431,7 +1432,7 @@ retry_ssr:
return 0 ;
}
# endif
/* frequency bases */
/* divided by 10 to be nice to platforms without floating point */
static const int fbase [ ] = {
@ -1689,12 +1690,14 @@ static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps)
}
# endif
# if CONFIG_IS_ENABLED(MMC_WRITE)
err = sd_read_ssr ( mmc ) ;
if ( ! err )
pr_warn ( " unable to read ssr \n " ) ;
# endif
if ( ! err )
return 0 ;
pr_warn ( " bad ssr \n " ) ;
error :
/* revert to a safer bus speed */
mmc_select_mode ( mmc , SD_LEGACY ) ;