[PATCH v5 1/3] mmc: sdhci: Add HS400 Enhanced Strobe support
Kever Yang
kever.yang at rock-chips.com
Wed Mar 16 02:26:33 CET 2022
HI Alper,
On 2022/3/16 01:46, Alper Nebi Yasak wrote:
> 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 at gmail.com>
> Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
>
> (no changes since v4)
>
> Changes in v4:
> - Add comment for SDHCI set_enhanced_strobe() operation
>
> Changes in v2:
> - Add tag: "Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>"
>
> drivers/mmc/sdhci.c | 18 ++++++++++++++++++
> include/sdhci.h | 12 ++++++++++++
> 2 files changed, 30 insertions(+)
>
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 766e4a6b0c5e..bf989a594f7e 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -513,6 +513,7 @@ void sdhci_set_uhs_timing(struct sdhci_host *host)
> reg |= SDHCI_CTRL_UHS_SDR104;
> break;
> case MMC_HS_400:
> + case MMC_HS_400_ES:
> reg |= SDHCI_CTRL_HS400;
> break;
> default:
> @@ -666,6 +667,7 @@ static int sdhci_set_ios(struct mmc *mmc)
> mmc->selected_mode == MMC_DDR_52 ||
> mmc->selected_mode == MMC_HS_200 ||
> mmc->selected_mode == MMC_HS_400 ||
> + mmc->selected_mode == MMC_HS_400_ES ||
> mmc->selected_mode == UHS_SDR25 ||
> mmc->selected_mode == UHS_SDR50 ||
> mmc->selected_mode == UHS_SDR104 ||
> @@ -799,6 +801,19 @@ static int sdhci_wait_dat0(struct udevice *dev, int state,
> 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 = {
> .send_cmd = sdhci_send_command,
> .set_ios = sdhci_set_ios,
> @@ -808,6 +823,9 @@ const struct dm_mmc_ops sdhci_ops = {
> .execute_tuning = sdhci_execute_tuning,
> #endif
> .wait_dat0 = sdhci_wait_dat0,
> +#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
> + .set_enhanced_strobe = sdhci_set_enhanced_strobe,
> +#endif
> };
> #else
> static const struct mmc_ops sdhci_ops = {
> diff --git a/include/sdhci.h b/include/sdhci.h
> index c8d69f5a63f7..88f1917480b6 100644
> --- a/include/sdhci.h
> +++ b/include/sdhci.h
> @@ -272,6 +272,18 @@ struct sdhci_ops {
> int (*platform_execute_tuning)(struct mmc *host, u8 opcode);
> int (*set_delay)(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
More information about the U-Boot
mailing list