Re: [PATCH v5 03/11] mmc: tmio: Add hw reset support

2016-08-31 Thread Simon Horman
On Wed, Aug 31, 2016 at 09:50:53AM +0200, Ulf Hansson wrote:
> On 30 August 2016 at 23:09, Simon Horman  wrote:
> > From: Ai Kyuse 
> >
> > Add hw reset support.
> >
> > Signed-off-by: Ai Kyuse 
> > Signed-off-by: Simon Horman 
> > ---
> > This is required by tuning support which will
> > be introduced by follow-up patches.
> >
> > v5 [Simon Horman]
> > * As suggested by Ulf Hansson
> >   - Broke out of a larger patch
> > ---
> >  drivers/mmc/host/tmio_mmc.h |  1 +
> >  drivers/mmc/host/tmio_mmc_pio.c | 12 
> >  2 files changed, 13 insertions(+)
> >
> > diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> > index 4b36cb5c2d9c..4b71f31fba63 100644
> > --- a/drivers/mmc/host/tmio_mmc.h
> > +++ b/drivers/mmc/host/tmio_mmc.h
> > @@ -164,6 +164,7 @@ struct tmio_mmc_host {
> > int (*start_signal_voltage_switch)(struct mmc_host *mmc,
> >struct mmc_ios *ios);
> > int (*write16_hook)(struct tmio_mmc_host *host, int addr);
> > +   void (*hw_reset)(struct tmio_mmc_host *host);
> >  };
> >
> >  struct tmio_mmc_host *tmio_mmc_host_alloc(struct platform_device *pdev);
> > diff --git a/drivers/mmc/host/tmio_mmc_pio.c 
> > b/drivers/mmc/host/tmio_mmc_pio.c
> > index 806308ac93e7..90758647bae6 100644
> > --- a/drivers/mmc/host/tmio_mmc_pio.c
> > +++ b/drivers/mmc/host/tmio_mmc_pio.c
> > @@ -756,6 +756,17 @@ static int tmio_mmc_start_data(struct tmio_mmc_host 
> > *host,
> > return 0;
> >  }
> >
> > +static void tmio_mmc_hw_reset(struct mmc_host *mmc)
> > +{
> > +   struct tmio_mmc_host *host = mmc_priv(mmc);
> > +
> > +   if (host->hw_reset)
> > +   host->hw_reset(host);
> > +
> > +   mmc_retune_timer_stop(host->mmc);
> > +   mmc_retune_needed(host->mmc);
> 
> Both the above tuning calls are completely pointless as the mmc core
> will run a reinitialization of the card when a ->hw_reset() host ops
> is invoked.
> That means a regular tuning will happen as part of the initialization
> of the card, so you don't need to trigger it from here as well.
> 
> So if that's the only reason to why you need to add the hw_reset()
> support, I think you should drop it instead.

Yes, sorry for leaving that in.
I will drop it.

> > +}
> > +
> >  /* Process requests from the MMC layer */
> >  static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
> >  {
> > @@ -970,6 +981,7 @@ static struct mmc_host_ops tmio_mmc_ops = {
> > .get_cd = mmc_gpio_get_cd,
> > .enable_sdio_irq = tmio_mmc_enable_sdio_irq,
> > .multi_io_quirk = tmio_multi_io_quirk,
> > +   .hw_reset   = tmio_mmc_hw_reset,
> >  };
> >
> >  static int tmio_mmc_init_ocr(struct tmio_mmc_host *host)
> > --
> > 2.7.0.rc3.207.g0ac5344
> >
> 
> Kind regards
> Uffe
> 


Re: [PATCH v5 03/11] mmc: tmio: Add hw reset support

2016-08-31 Thread Ulf Hansson
On 30 August 2016 at 23:09, Simon Horman  wrote:
> From: Ai Kyuse 
>
> Add hw reset support.
>
> Signed-off-by: Ai Kyuse 
> Signed-off-by: Simon Horman 
> ---
> This is required by tuning support which will
> be introduced by follow-up patches.
>
> v5 [Simon Horman]
> * As suggested by Ulf Hansson
>   - Broke out of a larger patch
> ---
>  drivers/mmc/host/tmio_mmc.h |  1 +
>  drivers/mmc/host/tmio_mmc_pio.c | 12 
>  2 files changed, 13 insertions(+)
>
> diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> index 4b36cb5c2d9c..4b71f31fba63 100644
> --- a/drivers/mmc/host/tmio_mmc.h
> +++ b/drivers/mmc/host/tmio_mmc.h
> @@ -164,6 +164,7 @@ struct tmio_mmc_host {
> int (*start_signal_voltage_switch)(struct mmc_host *mmc,
>struct mmc_ios *ios);
> int (*write16_hook)(struct tmio_mmc_host *host, int addr);
> +   void (*hw_reset)(struct tmio_mmc_host *host);
>  };
>
>  struct tmio_mmc_host *tmio_mmc_host_alloc(struct platform_device *pdev);
> diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
> index 806308ac93e7..90758647bae6 100644
> --- a/drivers/mmc/host/tmio_mmc_pio.c
> +++ b/drivers/mmc/host/tmio_mmc_pio.c
> @@ -756,6 +756,17 @@ static int tmio_mmc_start_data(struct tmio_mmc_host 
> *host,
> return 0;
>  }
>
> +static void tmio_mmc_hw_reset(struct mmc_host *mmc)
> +{
> +   struct tmio_mmc_host *host = mmc_priv(mmc);
> +
> +   if (host->hw_reset)
> +   host->hw_reset(host);
> +
> +   mmc_retune_timer_stop(host->mmc);
> +   mmc_retune_needed(host->mmc);

Both the above tuning calls are completely pointless as the mmc core
will run a reinitialization of the card when a ->hw_reset() host ops
is invoked.
That means a regular tuning will happen as part of the initialization
of the card, so you don't need to trigger it from here as well.

So if that's the only reason to why you need to add the hw_reset()
support, I think you should drop it instead.

> +}
> +
>  /* Process requests from the MMC layer */
>  static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
>  {
> @@ -970,6 +981,7 @@ static struct mmc_host_ops tmio_mmc_ops = {
> .get_cd = mmc_gpio_get_cd,
> .enable_sdio_irq = tmio_mmc_enable_sdio_irq,
> .multi_io_quirk = tmio_multi_io_quirk,
> +   .hw_reset   = tmio_mmc_hw_reset,
>  };
>
>  static int tmio_mmc_init_ocr(struct tmio_mmc_host *host)
> --
> 2.7.0.rc3.207.g0ac5344
>

Kind regards
Uffe


[PATCH v5 03/11] mmc: tmio: Add hw reset support

2016-08-30 Thread Simon Horman
From: Ai Kyuse 

Add hw reset support.

Signed-off-by: Ai Kyuse 
Signed-off-by: Simon Horman 
---
This is required by tuning support which will
be introduced by follow-up patches.

v5 [Simon Horman]
* As suggested by Ulf Hansson
  - Broke out of a larger patch
---
 drivers/mmc/host/tmio_mmc.h |  1 +
 drivers/mmc/host/tmio_mmc_pio.c | 12 
 2 files changed, 13 insertions(+)

diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
index 4b36cb5c2d9c..4b71f31fba63 100644
--- a/drivers/mmc/host/tmio_mmc.h
+++ b/drivers/mmc/host/tmio_mmc.h
@@ -164,6 +164,7 @@ struct tmio_mmc_host {
int (*start_signal_voltage_switch)(struct mmc_host *mmc,
   struct mmc_ios *ios);
int (*write16_hook)(struct tmio_mmc_host *host, int addr);
+   void (*hw_reset)(struct tmio_mmc_host *host);
 };
 
 struct tmio_mmc_host *tmio_mmc_host_alloc(struct platform_device *pdev);
diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
index 806308ac93e7..90758647bae6 100644
--- a/drivers/mmc/host/tmio_mmc_pio.c
+++ b/drivers/mmc/host/tmio_mmc_pio.c
@@ -756,6 +756,17 @@ static int tmio_mmc_start_data(struct tmio_mmc_host *host,
return 0;
 }
 
+static void tmio_mmc_hw_reset(struct mmc_host *mmc)
+{
+   struct tmio_mmc_host *host = mmc_priv(mmc);
+
+   if (host->hw_reset)
+   host->hw_reset(host);
+
+   mmc_retune_timer_stop(host->mmc);
+   mmc_retune_needed(host->mmc);
+}
+
 /* Process requests from the MMC layer */
 static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
 {
@@ -970,6 +981,7 @@ static struct mmc_host_ops tmio_mmc_ops = {
.get_cd = mmc_gpio_get_cd,
.enable_sdio_irq = tmio_mmc_enable_sdio_irq,
.multi_io_quirk = tmio_multi_io_quirk,
+   .hw_reset   = tmio_mmc_hw_reset,
 };
 
 static int tmio_mmc_init_ocr(struct tmio_mmc_host *host)
-- 
2.7.0.rc3.207.g0ac5344