@ -511,18 +511,22 @@ static const struct mmc_ops sdhci_ops = {
} ;
} ;
# endif
# endif
int sdhci_setup_cfg ( struct mmc_config * cfg , const char * name ,
int sdhci_setup_cfg ( struct mmc_config * cfg , struct sdhci_host * host ,
uint caps , u32 max_clk , u32 min_clk , uint version ,
u32 max_clk , u32 min_clk )
uint quirks , uint host_caps )
{
{
cfg - > name = name ;
u32 caps ;
caps = sdhci_readl ( host , SDHCI_CAPABILITIES ) ;
host - > version = sdhci_readw ( host , SDHCI_HOST_VERSION ) ;
cfg - > name = host - > name ;
# ifndef CONFIG_DM_MMC_OPS
# ifndef CONFIG_DM_MMC_OPS
cfg - > ops = & sdhci_ops ;
cfg - > ops = & sdhci_ops ;
# endif
# endif
if ( max_clk )
if ( max_clk )
cfg - > f_max = max_clk ;
cfg - > f_max = max_clk ;
else {
else {
if ( version > = SDHCI_SPEC_300 )
if ( SDHCI_GET_VERSION ( host ) > = SDHCI_SPEC_300 )
cfg - > f_max = ( caps & SDHCI_CLOCK_V3_BASE_MASK ) > >
cfg - > f_max = ( caps & SDHCI_CLOCK_V3_BASE_MASK ) > >
SDHCI_CLOCK_BASE_SHIFT ;
SDHCI_CLOCK_BASE_SHIFT ;
else
else
@ -535,7 +539,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, const char *name,
if ( min_clk )
if ( min_clk )
cfg - > f_min = min_clk ;
cfg - > f_min = min_clk ;
else {
else {
if ( version > = SDHCI_SPEC_300 )
if ( SDHCI_GET_VERSION ( host ) > = SDHCI_SPEC_300 )
cfg - > f_min = cfg - > f_max / SDHCI_MAX_DIV_SPEC_300 ;
cfg - > f_min = cfg - > f_max / SDHCI_MAX_DIV_SPEC_300 ;
else
else
cfg - > f_min = cfg - > f_max / SDHCI_MAX_DIV_SPEC_200 ;
cfg - > f_min = cfg - > f_max / SDHCI_MAX_DIV_SPEC_200 ;
@ -549,13 +553,13 @@ int sdhci_setup_cfg(struct mmc_config *cfg, const char *name,
cfg - > voltages | = MMC_VDD_165_195 ;
cfg - > voltages | = MMC_VDD_165_195 ;
cfg - > host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT ;
cfg - > host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT ;
if ( version > = SDHCI_SPEC_300 ) {
if ( SDHCI_GET_VERSION ( host ) > = SDHCI_SPEC_300 ) {
if ( caps & SDHCI_CAN_DO_8BIT )
if ( caps & SDHCI_CAN_DO_8BIT )
cfg - > host_caps | = MMC_MODE_8BIT ;
cfg - > host_caps | = MMC_MODE_8BIT ;
}
}
if ( host_caps )
if ( host - > host _caps)
cfg - > host_caps | = host_caps ;
cfg - > host_caps | = host - > host _caps;
cfg - > b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT ;
cfg - > b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT ;
@ -582,9 +586,7 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
}
}
# endif
# endif
if ( sdhci_setup_cfg ( & host - > cfg , host - > name , caps ,
if ( sdhci_setup_cfg ( & host - > cfg , host , max_clk , min_clk ) ) {
max_clk , min_clk , SDHCI_GET_VERSION ( host ) ,
host - > quirks , host - > host_caps ) ) {
printf ( " %s: Hardware doesn't specify base clock frequency \n " ,
printf ( " %s: Hardware doesn't specify base clock frequency \n " ,
__func__ ) ;
__func__ ) ;
return - EINVAL ;
return - EINVAL ;