Message ID | 20210817194641.2269-2-stcarlso@linux.microsoft.com |
---|---|
State | Accepted |
Commit | ee02543561d4d776b15ad1ad2f6430b361414102 |
Delegated to: | Jaehoon Chung |
Headers | show |
Series | drivers: mmc: Add wait_dat0 support for more devices | expand |
On 8/18/21 4:46 AM, stcarlso@linux.microsoft.com wrote: > From: Stephen Carlson <stcarlso@linux.microsoft.com> > > Adds an implementation of the wait_dat0 MMC operation for the Freescale > eSHDC 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@linux.microsoft.com> > --- > drivers/mmc/fsl_esdhc.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c > index 1d98fa65c4..f74289a677 100644 > --- a/drivers/mmc/fsl_esdhc.c > +++ b/drivers/mmc/fsl_esdhc.c > @@ -27,6 +27,7 @@ > #include <dm/device_compat.h> > #include <linux/bitops.h> > #include <linux/delay.h> > +#include <linux/iopoll.h> > #include <linux/dma-mapping.h> > #include <sdhci.h> > > @@ -1145,6 +1146,20 @@ int fsl_esdhc_hs400_prepare_ddr(struct udevice *dev) > return 0; > } > > +static int fsl_esdhc_wait_dat0(struct udevice *dev, int state, > + int timeout_us) > +{ > + int ret; nitpick, doesn't need to use the ret variable. > + u32 tmp; > + struct fsl_esdhc_priv *priv = dev_get_priv(dev); > + struct fsl_esdhc *regs = priv->esdhc_regs; > + > + ret = readx_poll_timeout(esdhc_read32, ®s->prsstat, tmp, > + !!(tmp & PRSSTAT_DAT0) == !!state, > + timeout_us); > + return ret; return readx_poll_timeout(); ? Other things look good to me. Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com> Best Regards, Jaehoon Chung > +} > + > static const struct dm_mmc_ops fsl_esdhc_ops = { > .get_cd = fsl_esdhc_get_cd, > .send_cmd = fsl_esdhc_send_cmd, > @@ -1154,6 +1169,7 @@ static const struct dm_mmc_ops fsl_esdhc_ops = { > #endif > .reinit = fsl_esdhc_reinit, > .hs400_prepare_ddr = fsl_esdhc_hs400_prepare_ddr, > + .wait_dat0 = fsl_esdhc_wait_dat0, > }; > > static const struct udevice_id fsl_esdhc_ids[] = { >
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 1d98fa65c4..f74289a677 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -27,6 +27,7 @@ #include <dm/device_compat.h> #include <linux/bitops.h> #include <linux/delay.h> +#include <linux/iopoll.h> #include <linux/dma-mapping.h> #include <sdhci.h> @@ -1145,6 +1146,20 @@ int fsl_esdhc_hs400_prepare_ddr(struct udevice *dev) return 0; } +static int fsl_esdhc_wait_dat0(struct udevice *dev, int state, + int timeout_us) +{ + int ret; + u32 tmp; + struct fsl_esdhc_priv *priv = dev_get_priv(dev); + struct fsl_esdhc *regs = priv->esdhc_regs; + + ret = readx_poll_timeout(esdhc_read32, ®s->prsstat, tmp, + !!(tmp & PRSSTAT_DAT0) == !!state, + timeout_us); + return ret; +} + static const struct dm_mmc_ops fsl_esdhc_ops = { .get_cd = fsl_esdhc_get_cd, .send_cmd = fsl_esdhc_send_cmd, @@ -1154,6 +1169,7 @@ static const struct dm_mmc_ops fsl_esdhc_ops = { #endif .reinit = fsl_esdhc_reinit, .hs400_prepare_ddr = fsl_esdhc_hs400_prepare_ddr, + .wait_dat0 = fsl_esdhc_wait_dat0, }; static const struct udevice_id fsl_esdhc_ids[] = {