@ -32,12 +32,21 @@ struct arasan_sdhci_priv {
} ;
# if defined(CONFIG_ARCH_ZYNQMP)
# define MMC_HS200_BUS_SPEED 5
static const u8 mode2timing [ ] = {
[ UHS_SDR12 ] = UHS_SDR12_BUS_SPEED ,
[ UHS_SDR25 ] = UHS_SDR25_BUS_SPEED ,
[ UHS_SDR50 ] = UHS_SDR50_BUS_SPEED ,
[ UHS_SDR104 ] = UHS_SDR104_BUS_SPEED ,
[ UHS_DDR50 ] = UHS_DDR50_BUS_SPEED ,
[ MMC_LEGACY ] = UHS_SDR12_BUS_SPEED ,
[ SD_LEGACY ] = UHS_SDR12_BUS_SPEED ,
[ MMC_HS ] = HIGH_SPEED_BUS_SPEED ,
[ SD_HS ] = HIGH_SPEED_BUS_SPEED ,
[ MMC_HS_52 ] = HIGH_SPEED_BUS_SPEED ,
[ MMC_DDR_52 ] = HIGH_SPEED_BUS_SPEED ,
[ UHS_SDR12 ] = UHS_SDR12_BUS_SPEED ,
[ UHS_SDR25 ] = UHS_SDR25_BUS_SPEED ,
[ UHS_SDR50 ] = UHS_SDR50_BUS_SPEED ,
[ UHS_DDR50 ] = UHS_DDR50_BUS_SPEED ,
[ UHS_SDR104 ] = UHS_SDR104_BUS_SPEED ,
[ MMC_HS_200 ] = MMC_HS200_BUS_SPEED ,
} ;
# define SDHCI_HOST_CTRL2 0x3E
@ -160,9 +169,6 @@ static void arasan_sdhci_set_tapdelay(struct sdhci_host *host)
struct mmc * mmc = ( struct mmc * ) host - > mmc ;
u8 uhsmode ;
if ( ! IS_SD ( mmc ) )
return ;
uhsmode = mode2timing [ mmc - > selected_mode ] ;
if ( uhsmode > = UHS_SDR25_BUS_SPEED )
@ -175,6 +181,9 @@ static void arasan_sdhci_set_control_reg(struct sdhci_host *host)
struct mmc * mmc = ( struct mmc * ) host - > mmc ;
u32 reg ;
if ( ! IS_SD ( mmc ) )
return ;
if ( mmc - > signal_voltage = = MMC_SIGNAL_VOLTAGE_180 ) {
reg = sdhci_readw ( host , SDHCI_HOST_CTRL2 ) ;
reg | = SDHCI_18V_SIGNAL ;