All of lore.kernel.org
 help / color / mirror / Atom feed
From: Corentin Labbe <clabbe.montjoie@gmail.com>
To: Maxime Ripard <maxime.ripard@anandra.org>
Cc: davem@davemloft.net, herbert@gondor.apana.org.au,
	Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-sunxi@googlegroups.com
Subject: Re: [PATCH 2/2] crypto: sun4i-ss: enable pm_runtime
Date: Thu, 12 Sep 2019 10:49:07 +0200	[thread overview]
Message-ID: <20190912084907.GA26551@Red> (raw)
In-Reply-To: <CAO4ZVTM99FksM71BAiraYj7eyREO1Qi=L1NFzEkNmMgBmphBww@mail.gmail.com>

On Thu, Sep 12, 2019 at 08:35:51AM +0200, Maxime Ripard wrote:
> Hi,
> 
> Le mer. 11 sept. 2019 à 13:46, Corentin Labbe
> <clabbe.montjoie@gmail.com> a écrit :
> >
> > This patch enables power management on the Security System.
> >
> > Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> > ---
> >  drivers/crypto/sunxi-ss/sun4i-ss-cipher.c |  5 +++
> >  drivers/crypto/sunxi-ss/sun4i-ss-core.c   | 42 ++++++++++++++++++++++-
> >  2 files changed, 46 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > index fa4b1b47822e..1fedec9e83b0 100644
> > --- a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > @@ -10,6 +10,8 @@
> >   *
> >   * You could find the datasheet in Documentation/arm/sunxi.rst
> >   */
> > +
> > +#include <linux/pm_runtime.h>
> >  #include "sun4i-ss.h"
> >
> >  static int noinline_for_stack sun4i_ss_opti_poll(struct skcipher_request *areq)
> > @@ -497,13 +499,16 @@ int sun4i_ss_cipher_init(struct crypto_tfm *tfm)
> >                 return PTR_ERR(op->fallback_tfm);
> >         }
> >
> > +       pm_runtime_get_sync(op->ss->dev);
> >         return 0;
> >  }
> >
> >  void sun4i_ss_cipher_exit(struct crypto_tfm *tfm)
> >  {
> >         struct sun4i_tfm_ctx *op = crypto_tfm_ctx(tfm);
> > +
> >         crypto_free_sync_skcipher(op->fallback_tfm);
> > +       pm_runtime_put_sync(op->ss->dev);
> >  }
> >
> >  /* check and set the AES key, prepare the mode to be used */
> > diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > index 2c9ff01dddfc..5e6e1a308f60 100644
> > --- a/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > +++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > @@ -14,6 +14,7 @@
> >  #include <linux/module.h>
> >  #include <linux/of.h>
> >  #include <linux/platform_device.h>
> > +#include <linux/pm_runtime.h>
> >  #include <crypto/scatterwalk.h>
> >  #include <linux/scatterlist.h>
> >  #include <linux/interrupt.h>
> > @@ -258,6 +259,37 @@ static int sun4i_ss_enable(struct sun4i_ss_ctx *ss)
> >         return err;
> >  }
> >
> > +#ifdef CONFIG_PM
> > +static int sun4i_ss_pm_suspend(struct device *dev)
> > +{
> > +       struct sun4i_ss_ctx *ss = dev_get_drvdata(dev);
> > +
> > +       sun4i_ss_disable(ss);
> > +       return 0;
> > +}
> > +
> > +static int sun4i_ss_pm_resume(struct device *dev)
> > +{
> > +       struct sun4i_ss_ctx *ss = dev_get_drvdata(dev);
> > +
> > +       return sun4i_ss_enable(ss);
> > +}
> > +#endif
> > +
> > +const struct dev_pm_ops sun4i_ss_pm_ops = {
> > +       SET_RUNTIME_PM_OPS(sun4i_ss_pm_suspend, sun4i_ss_pm_resume, NULL)
> > +};
> > +
> > +static void sun4i_ss_pm_init(struct sun4i_ss_ctx *ss)
> > +{
> > +       pm_runtime_use_autosuspend(ss->dev);
> > +       pm_runtime_set_autosuspend_delay(ss->dev, 1000);
> > +
> > +       pm_runtime_get_noresume(ss->dev);
> > +       pm_runtime_set_active(ss->dev);
> > +       pm_runtime_enable(ss->dev);
> > +}
> 
> It's not really clear to me what you're doing here? Can you explain?
> 

I set the autosuspend state and delay.

I say that the device is active and so I "get" it.
Then I enable PM.

I do like that since I use the device later in probe(), so I need to keep it up.
At the end of probe() I put the device which go in suspend automaticaly after.

Regards

WARNING: multiple messages have this Message-ID (diff)
From: Corentin Labbe <clabbe.montjoie@gmail.com>
To: Maxime Ripard <maxime.ripard@anandra.org>
Cc: herbert@gondor.apana.org.au, linux-sunxi@googlegroups.com,
	linux-kernel@vger.kernel.org, Maxime Ripard <mripard@kernel.org>,
	Chen-Yu Tsai <wens@csie.org>,
	linux-crypto@vger.kernel.org, davem@davemloft.net,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] crypto: sun4i-ss: enable pm_runtime
Date: Thu, 12 Sep 2019 10:49:07 +0200	[thread overview]
Message-ID: <20190912084907.GA26551@Red> (raw)
In-Reply-To: <CAO4ZVTM99FksM71BAiraYj7eyREO1Qi=L1NFzEkNmMgBmphBww@mail.gmail.com>

On Thu, Sep 12, 2019 at 08:35:51AM +0200, Maxime Ripard wrote:
> Hi,
> 
> Le mer. 11 sept. 2019 à 13:46, Corentin Labbe
> <clabbe.montjoie@gmail.com> a écrit :
> >
> > This patch enables power management on the Security System.
> >
> > Signed-off-by: Corentin Labbe <clabbe.montjoie@gmail.com>
> > ---
> >  drivers/crypto/sunxi-ss/sun4i-ss-cipher.c |  5 +++
> >  drivers/crypto/sunxi-ss/sun4i-ss-core.c   | 42 ++++++++++++++++++++++-
> >  2 files changed, 46 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > index fa4b1b47822e..1fedec9e83b0 100644
> > --- a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > +++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
> > @@ -10,6 +10,8 @@
> >   *
> >   * You could find the datasheet in Documentation/arm/sunxi.rst
> >   */
> > +
> > +#include <linux/pm_runtime.h>
> >  #include "sun4i-ss.h"
> >
> >  static int noinline_for_stack sun4i_ss_opti_poll(struct skcipher_request *areq)
> > @@ -497,13 +499,16 @@ int sun4i_ss_cipher_init(struct crypto_tfm *tfm)
> >                 return PTR_ERR(op->fallback_tfm);
> >         }
> >
> > +       pm_runtime_get_sync(op->ss->dev);
> >         return 0;
> >  }
> >
> >  void sun4i_ss_cipher_exit(struct crypto_tfm *tfm)
> >  {
> >         struct sun4i_tfm_ctx *op = crypto_tfm_ctx(tfm);
> > +
> >         crypto_free_sync_skcipher(op->fallback_tfm);
> > +       pm_runtime_put_sync(op->ss->dev);
> >  }
> >
> >  /* check and set the AES key, prepare the mode to be used */
> > diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-core.c b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > index 2c9ff01dddfc..5e6e1a308f60 100644
> > --- a/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > +++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
> > @@ -14,6 +14,7 @@
> >  #include <linux/module.h>
> >  #include <linux/of.h>
> >  #include <linux/platform_device.h>
> > +#include <linux/pm_runtime.h>
> >  #include <crypto/scatterwalk.h>
> >  #include <linux/scatterlist.h>
> >  #include <linux/interrupt.h>
> > @@ -258,6 +259,37 @@ static int sun4i_ss_enable(struct sun4i_ss_ctx *ss)
> >         return err;
> >  }
> >
> > +#ifdef CONFIG_PM
> > +static int sun4i_ss_pm_suspend(struct device *dev)
> > +{
> > +       struct sun4i_ss_ctx *ss = dev_get_drvdata(dev);
> > +
> > +       sun4i_ss_disable(ss);
> > +       return 0;
> > +}
> > +
> > +static int sun4i_ss_pm_resume(struct device *dev)
> > +{
> > +       struct sun4i_ss_ctx *ss = dev_get_drvdata(dev);
> > +
> > +       return sun4i_ss_enable(ss);
> > +}
> > +#endif
> > +
> > +const struct dev_pm_ops sun4i_ss_pm_ops = {
> > +       SET_RUNTIME_PM_OPS(sun4i_ss_pm_suspend, sun4i_ss_pm_resume, NULL)
> > +};
> > +
> > +static void sun4i_ss_pm_init(struct sun4i_ss_ctx *ss)
> > +{
> > +       pm_runtime_use_autosuspend(ss->dev);
> > +       pm_runtime_set_autosuspend_delay(ss->dev, 1000);
> > +
> > +       pm_runtime_get_noresume(ss->dev);
> > +       pm_runtime_set_active(ss->dev);
> > +       pm_runtime_enable(ss->dev);
> > +}
> 
> It's not really clear to me what you're doing here? Can you explain?
> 

I set the autosuspend state and delay.

I say that the device is active and so I "get" it.
Then I enable PM.

I do like that since I use the device later in probe(), so I need to keep it up.
At the end of probe() I put the device which go in suspend automaticaly after.

Regards

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-09-12  8:49 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-11 11:46 [PATCH 0/2] crypto: sun4i-ss: Enable power management Corentin Labbe
2019-09-11 11:46 ` Corentin Labbe
2019-09-11 11:46 ` [PATCH 1/2] crypto: sun4i-ss: simplify enable/disable of the device Corentin Labbe
2019-09-11 11:46   ` Corentin Labbe
2019-09-12  6:32   ` Maxime Ripard
2019-09-12  6:32     ` Maxime Ripard
2019-09-11 11:46 ` [PATCH 2/2] crypto: sun4i-ss: enable pm_runtime Corentin Labbe
2019-09-11 11:46   ` Corentin Labbe
2019-09-12  6:35   ` Maxime Ripard
2019-09-12  6:35     ` Maxime Ripard
2019-09-12  8:49     ` Corentin Labbe [this message]
2019-09-12  8:49       ` Corentin Labbe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190912084907.GA26551@Red \
    --to=clabbe.montjoie@gmail.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@anandra.org \
    --cc=mripard@kernel.org \
    --cc=wens@csie.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.