On 8/18/21 4:46 AM, stcar...@linux.microsoft.com wrote:
> From: Stephen Carlson <stcar...@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 <stcar...@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)
> 

Reply via email to