[PATCH 2/2] drivers: mmc: Add wait_dat0 support for sdhci driver

Jaehoon Chung jh80.chung at samsung.com
Sat Aug 28 07:13:56 CEST 2021


On 8/18/21 4:46 AM, stcarlso at linux.microsoft.com wrote:
> From: Stephen Carlson <stcarlso at linux.microsoft.com>
> 
> Adds an implementation of the wait_dat0 MMC operation for the DM SDHCI
> driver, allowing the driver to continue when the card is ready rather
> than waiting for the worst case time on each MMC switch operation.
> 
> Signed-off-by: Stephen Carlson <stcarlso at linux.microsoft.com>
> ---
>  drivers/mmc/sdhci.c | 20 ++++++++++++++++++++
>  include/sdhci.h     |  2 ++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index eea4701d8a..bb55e00ef5 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -775,6 +775,25 @@ static int sdhci_get_cd(struct udevice *dev)
>  		return value;
>  }
>  
> +static int sdhci_wait_dat0(struct udevice *dev, int state,
> +			   int timeout_us)
> +{
> +	int tmp;
> +	struct mmc *mmc = mmc_get_mmc_dev(dev);
> +	struct sdhci_host *host = mmc->priv;
> +	unsigned long timeout = timer_get_us() + timeout_us;
> +
> +	// readx_poll_timeout is unsuitable because sdhci_readl accepts
> +	// two arguments

Removed the comment or use "/* */" instead of "//"
And i didn't understand what's unsuitable?

Best Regards,
Jaehoon Chung

> +	do {
> +		tmp = sdhci_readl(host, SDHCI_PRESENT_STATE);
> +		if (!!(tmp & SDHCI_DATA_0_LVL_MASK) == !!state)
> +			return 0;
> +	} while (!timeout_us || !time_after(timer_get_us(), timeout));
> +
> +	return -ETIMEDOUT;
> +}
> +
>  const struct dm_mmc_ops sdhci_ops = {
>  	.send_cmd	= sdhci_send_command,
>  	.set_ios	= sdhci_set_ios,
> @@ -783,6 +802,7 @@ const struct dm_mmc_ops sdhci_ops = {
>  #ifdef MMC_SUPPORTS_TUNING
>  	.execute_tuning	= sdhci_execute_tuning,
>  #endif
> +	.wait_dat0	= sdhci_wait_dat0,
>  };
>  #else
>  static const struct mmc_ops sdhci_ops = {
> diff --git a/include/sdhci.h b/include/sdhci.h
> index 0ae9471ad7..dd4eb41442 100644
> --- a/include/sdhci.h
> +++ b/include/sdhci.h
> @@ -65,6 +65,8 @@
>  #define  SDHCI_CARD_STATE_STABLE	BIT(17)
>  #define  SDHCI_CARD_DETECT_PIN_LEVEL	BIT(18)
>  #define  SDHCI_WRITE_PROTECT	BIT(19)
> +#define  SDHCI_DATA_LVL_MASK	0x00F00000
> +#define   SDHCI_DATA_0_LVL_MASK BIT(20)
>  
>  #define SDHCI_HOST_CONTROL	0x28
>  #define  SDHCI_CTRL_LED		BIT(0)
> 



More information about the U-Boot mailing list