mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-23 13:56:20 +00:00
mmc: sdhci: Add HS400 Enhanced Strobe support
Delegate setting the Enhanced Strobe configuration to individual drivers if they set a function for it. Return -ENOTSUPP if they do not, like what the MMC uclass does. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
parent
0f3466f52f
commit
2a1d7c635f
2 changed files with 30 additions and 0 deletions
|
@ -513,6 +513,7 @@ void sdhci_set_uhs_timing(struct sdhci_host *host)
|
||||||
reg |= SDHCI_CTRL_UHS_SDR104;
|
reg |= SDHCI_CTRL_UHS_SDR104;
|
||||||
break;
|
break;
|
||||||
case MMC_HS_400:
|
case MMC_HS_400:
|
||||||
|
case MMC_HS_400_ES:
|
||||||
reg |= SDHCI_CTRL_HS400;
|
reg |= SDHCI_CTRL_HS400;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -666,6 +667,7 @@ static int sdhci_set_ios(struct mmc *mmc)
|
||||||
mmc->selected_mode == MMC_DDR_52 ||
|
mmc->selected_mode == MMC_DDR_52 ||
|
||||||
mmc->selected_mode == MMC_HS_200 ||
|
mmc->selected_mode == MMC_HS_200 ||
|
||||||
mmc->selected_mode == MMC_HS_400 ||
|
mmc->selected_mode == MMC_HS_400 ||
|
||||||
|
mmc->selected_mode == MMC_HS_400_ES ||
|
||||||
mmc->selected_mode == UHS_SDR25 ||
|
mmc->selected_mode == UHS_SDR25 ||
|
||||||
mmc->selected_mode == UHS_SDR50 ||
|
mmc->selected_mode == UHS_SDR50 ||
|
||||||
mmc->selected_mode == UHS_SDR104 ||
|
mmc->selected_mode == UHS_SDR104 ||
|
||||||
|
@ -799,6 +801,19 @@ static int sdhci_wait_dat0(struct udevice *dev, int state,
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
|
||||||
|
static int sdhci_set_enhanced_strobe(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct mmc *mmc = mmc_get_mmc_dev(dev);
|
||||||
|
struct sdhci_host *host = mmc->priv;
|
||||||
|
|
||||||
|
if (host->ops && host->ops->set_enhanced_strobe)
|
||||||
|
return host->ops->set_enhanced_strobe(host);
|
||||||
|
|
||||||
|
return -ENOTSUPP;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct dm_mmc_ops sdhci_ops = {
|
const struct dm_mmc_ops sdhci_ops = {
|
||||||
.send_cmd = sdhci_send_command,
|
.send_cmd = sdhci_send_command,
|
||||||
.set_ios = sdhci_set_ios,
|
.set_ios = sdhci_set_ios,
|
||||||
|
@ -808,6 +823,9 @@ const struct dm_mmc_ops sdhci_ops = {
|
||||||
.execute_tuning = sdhci_execute_tuning,
|
.execute_tuning = sdhci_execute_tuning,
|
||||||
#endif
|
#endif
|
||||||
.wait_dat0 = sdhci_wait_dat0,
|
.wait_dat0 = sdhci_wait_dat0,
|
||||||
|
#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
|
||||||
|
.set_enhanced_strobe = sdhci_set_enhanced_strobe,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
static const struct mmc_ops sdhci_ops = {
|
static const struct mmc_ops sdhci_ops = {
|
||||||
|
|
|
@ -272,6 +272,18 @@ struct sdhci_ops {
|
||||||
int (*platform_execute_tuning)(struct mmc *host, u8 opcode);
|
int (*platform_execute_tuning)(struct mmc *host, u8 opcode);
|
||||||
int (*set_delay)(struct sdhci_host *host);
|
int (*set_delay)(struct sdhci_host *host);
|
||||||
int (*deferred_probe)(struct sdhci_host *host);
|
int (*deferred_probe)(struct sdhci_host *host);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set_enhanced_strobe() - Set HS400 Enhanced Strobe config
|
||||||
|
*
|
||||||
|
* This is called after setting the card speed and mode to
|
||||||
|
* HS400 ES, and should set any host-specific configuration
|
||||||
|
* necessary for it.
|
||||||
|
*
|
||||||
|
* @host: SDHCI host structure
|
||||||
|
* Return: 0 if successful, -ve on error
|
||||||
|
*/
|
||||||
|
int (*set_enhanced_strobe)(struct sdhci_host *host);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ADMA_MAX_LEN 65532
|
#define ADMA_MAX_LEN 65532
|
||||||
|
|
Loading…
Add table
Reference in a new issue