From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: ssantosh@kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
khilman@linaro.org, Geert Uytterhoeven <geert+renesas@glider.be>,
linux-pm@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
grant.likely@secretlab.ca, ulf.hansson@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH v2 1/3] PM / clock_ops: Add pm_clk_add_clk()
Date: Wed, 22 Oct 2014 14:16:31 -0700 [thread overview]
Message-ID: <20141022211631.GC4250@dtor-ws> (raw)
In-Reply-To: <20141022201409.GB4250@dtor-ws>
On Wed, Oct 22, 2014 at 01:14:09PM -0700, Dmitry Torokhov wrote:
> On Wed, Oct 22, 2014 at 10:02:41PM +0300, Grygorii Strashko wrote:
> > On 10/22/2014 08:38 PM, Dmitry Torokhov wrote:
> > >On Mon, Oct 20, 2014 at 03:56:02PM +0300, Grygorii Strashko wrote:
> > >>From: Geert Uytterhoeven <geert+renesas@glider.be>
> > >>
> > >>The existing pm_clk_add() allows to pass a clock by con_id. However,
> > >>when referring to a specific clock from DT, no con_id is available.
> > >>
> > >>Add pm_clk_add_clk(), which allows to specify the struct clk * directly.
> > >>
> > >>Reviewed-by: Kevin Hilman <khilman@linaro.org>
> > >>Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > >>Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> > >>---
> > >>
> > >> Pay attantion pls, that there is another series of patches
> > >> which have been posted already and which depends from this patch
> > >> "[PATCH v4 0/3] ARM: rk3288 : Add PM Domain support"
> > >> https://lkml.org/lkml/2014/10/20/105
> > >>
> > >> drivers/base/power/clock_ops.c | 41 +++++++++++++++++++++++++++++++----------
> > >> include/linux/pm_clock.h | 8 ++++++++
> > >> 2 files changed, 39 insertions(+), 10 deletions(-)
> > >>
> > >>diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
> > >>index 7836930..f14b767 100644
> > >>--- a/drivers/base/power/clock_ops.c
> > >>+++ b/drivers/base/power/clock_ops.c
> > >>@@ -53,7 +53,8 @@ static inline int __pm_clk_enable(struct device *dev, struct clk *clk)
> > >> */
> > >> static void pm_clk_acquire(struct device *dev, struct pm_clock_entry *ce)
> > >> {
> > >>- ce->clk = clk_get(dev, ce->con_id);
> > >>+ if (!ce->clk)
> > >>+ ce->clk = clk_get(dev, ce->con_id);
> > >> if (IS_ERR(ce->clk)) {
> > >> ce->status = PCE_STATUS_ERROR;
> > >> } else {
> > >>@@ -63,15 +64,8 @@ static void pm_clk_acquire(struct device *dev, struct pm_clock_entry *ce)
> > >> }
> > >> }
> > >>
> > >>-/**
> > >>- * pm_clk_add - Start using a device clock for power management.
> > >>- * @dev: Device whose clock is going to be used for power management.
> > >>- * @con_id: Connection ID of the clock.
> > >>- *
> > >>- * Add the clock represented by @con_id to the list of clocks used for
> > >>- * the power management of @dev.
> > >>- */
> > >>-int pm_clk_add(struct device *dev, const char *con_id)
> > >>+static int __pm_clk_add(struct device *dev, const char *con_id,
> > >>+ struct clk *clk)
> > >> {
> > >> struct pm_subsys_data *psd = dev_to_psd(dev);
> > >> struct pm_clock_entry *ce;
> > >>@@ -93,6 +87,8 @@ int pm_clk_add(struct device *dev, const char *con_id)
> > >> kfree(ce);
> > >> return -ENOMEM;
> > >> }
> > >>+ } else {
> > >>+ ce->clk = clk;
Shouldn't this be
ce->clk = __clk_get(clk);
to account for clk_put() in __pm_clk_remove()?
> > >> }
> > >>
> > >> pm_clk_acquire(dev, ce);
> > >>@@ -104,6 +100,31 @@ int pm_clk_add(struct device *dev, const char *con_id)
> > >> }
> > >>
> > >> /**
> > >>+ * pm_clk_add - Start using a device clock for power management.
> > >>+ * @dev: Device whose clock is going to be used for power management.
> > >>+ * @con_id: Connection ID of the clock.
> > >>+ *
> > >>+ * Add the clock represented by @con_id to the list of clocks used for
> > >>+ * the power management of @dev.
> > >>+ */
> > >>+int pm_clk_add(struct device *dev, const char *con_id)
> > >>+{
> > >>+ return __pm_clk_add(dev, con_id, NULL);
> > >
> > >Bikeshedding: why do we need __pm_clk_add() and not simply have
> > >"canonical" pm_clk_add_clk() and then do:
> > >
> > >int pm_clk_add(struct device *dev, const char *con_id)
> > >{
> > > struct clk *clk;
> > >
> > > clk = clk_get(dev, con_id);
> > > ...
> > > return pm_clk_add_clk(dev, clk);
> > >}
> >
> > Hm. I did fast look at code and:
> > 1) agree - there is a lot of thing which can be optimized ;)
> > 2) in my strong opinion, this patch is the fastest and simplest
> > way to introduce new API (take a look on pm_clock_entry->con_id
> > management code) and It is exactly what we need as of now.
>
> Yeah, I guess. We are lucky we do not crash when we are tryign to print
> NULL strings (see pm_clk_acquire).
>
> BTW, what is the point of doing pm_clk_add(dev, NULL)? We add clock
> entry with status PCE_STATUS_ERROR and then have to handle it
> everywhere? Can we just return -EINVAL if someone triies to pass NULL
> ass con_id?
Umm, no, ignore me here, I misread clk_get(dev, NULL) - it won't return
error. Still, do why do we need to keep clock entry if clk_get() fails
for some reason?
Thanks.
--
Dmitry
WARNING: multiple messages have this Message-ID (diff)
From: dmitry.torokhov@gmail.com (Dmitry Torokhov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/3] PM / clock_ops: Add pm_clk_add_clk()
Date: Wed, 22 Oct 2014 14:16:31 -0700 [thread overview]
Message-ID: <20141022211631.GC4250@dtor-ws> (raw)
In-Reply-To: <20141022201409.GB4250@dtor-ws>
On Wed, Oct 22, 2014 at 01:14:09PM -0700, Dmitry Torokhov wrote:
> On Wed, Oct 22, 2014 at 10:02:41PM +0300, Grygorii Strashko wrote:
> > On 10/22/2014 08:38 PM, Dmitry Torokhov wrote:
> > >On Mon, Oct 20, 2014 at 03:56:02PM +0300, Grygorii Strashko wrote:
> > >>From: Geert Uytterhoeven <geert+renesas@glider.be>
> > >>
> > >>The existing pm_clk_add() allows to pass a clock by con_id. However,
> > >>when referring to a specific clock from DT, no con_id is available.
> > >>
> > >>Add pm_clk_add_clk(), which allows to specify the struct clk * directly.
> > >>
> > >>Reviewed-by: Kevin Hilman <khilman@linaro.org>
> > >>Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > >>Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> > >>---
> > >>
> > >> Pay attantion pls, that there is another series of patches
> > >> which have been posted already and which depends from this patch
> > >> "[PATCH v4 0/3] ARM: rk3288 : Add PM Domain support"
> > >> https://lkml.org/lkml/2014/10/20/105
> > >>
> > >> drivers/base/power/clock_ops.c | 41 +++++++++++++++++++++++++++++++----------
> > >> include/linux/pm_clock.h | 8 ++++++++
> > >> 2 files changed, 39 insertions(+), 10 deletions(-)
> > >>
> > >>diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c
> > >>index 7836930..f14b767 100644
> > >>--- a/drivers/base/power/clock_ops.c
> > >>+++ b/drivers/base/power/clock_ops.c
> > >>@@ -53,7 +53,8 @@ static inline int __pm_clk_enable(struct device *dev, struct clk *clk)
> > >> */
> > >> static void pm_clk_acquire(struct device *dev, struct pm_clock_entry *ce)
> > >> {
> > >>- ce->clk = clk_get(dev, ce->con_id);
> > >>+ if (!ce->clk)
> > >>+ ce->clk = clk_get(dev, ce->con_id);
> > >> if (IS_ERR(ce->clk)) {
> > >> ce->status = PCE_STATUS_ERROR;
> > >> } else {
> > >>@@ -63,15 +64,8 @@ static void pm_clk_acquire(struct device *dev, struct pm_clock_entry *ce)
> > >> }
> > >> }
> > >>
> > >>-/**
> > >>- * pm_clk_add - Start using a device clock for power management.
> > >>- * @dev: Device whose clock is going to be used for power management.
> > >>- * @con_id: Connection ID of the clock.
> > >>- *
> > >>- * Add the clock represented by @con_id to the list of clocks used for
> > >>- * the power management of @dev.
> > >>- */
> > >>-int pm_clk_add(struct device *dev, const char *con_id)
> > >>+static int __pm_clk_add(struct device *dev, const char *con_id,
> > >>+ struct clk *clk)
> > >> {
> > >> struct pm_subsys_data *psd = dev_to_psd(dev);
> > >> struct pm_clock_entry *ce;
> > >>@@ -93,6 +87,8 @@ int pm_clk_add(struct device *dev, const char *con_id)
> > >> kfree(ce);
> > >> return -ENOMEM;
> > >> }
> > >>+ } else {
> > >>+ ce->clk = clk;
Shouldn't this be
ce->clk = __clk_get(clk);
to account for clk_put() in __pm_clk_remove()?
> > >> }
> > >>
> > >> pm_clk_acquire(dev, ce);
> > >>@@ -104,6 +100,31 @@ int pm_clk_add(struct device *dev, const char *con_id)
> > >> }
> > >>
> > >> /**
> > >>+ * pm_clk_add - Start using a device clock for power management.
> > >>+ * @dev: Device whose clock is going to be used for power management.
> > >>+ * @con_id: Connection ID of the clock.
> > >>+ *
> > >>+ * Add the clock represented by @con_id to the list of clocks used for
> > >>+ * the power management of @dev.
> > >>+ */
> > >>+int pm_clk_add(struct device *dev, const char *con_id)
> > >>+{
> > >>+ return __pm_clk_add(dev, con_id, NULL);
> > >
> > >Bikeshedding: why do we need __pm_clk_add() and not simply have
> > >"canonical" pm_clk_add_clk() and then do:
> > >
> > >int pm_clk_add(struct device *dev, const char *con_id)
> > >{
> > > struct clk *clk;
> > >
> > > clk = clk_get(dev, con_id);
> > > ...
> > > return pm_clk_add_clk(dev, clk);
> > >}
> >
> > Hm. I did fast look at code and:
> > 1) agree - there is a lot of thing which can be optimized ;)
> > 2) in my strong opinion, this patch is the fastest and simplest
> > way to introduce new API (take a look on pm_clock_entry->con_id
> > management code) and It is exactly what we need as of now.
>
> Yeah, I guess. We are lucky we do not crash when we are tryign to print
> NULL strings (see pm_clk_acquire).
>
> BTW, what is the point of doing pm_clk_add(dev, NULL)? We add clock
> entry with status PCE_STATUS_ERROR and then have to handle it
> everywhere? Can we just return -EINVAL if someone triies to pass NULL
> ass con_id?
Umm, no, ignore me here, I misread clk_get(dev, NULL) - it won't return
error. Still, do why do we need to keep clock entry if clk_get() fails
for some reason?
Thanks.
--
Dmitry
next prev parent reply other threads:[~2014-10-22 21:16 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-20 12:56 [PATCH v2 0/3] ARM: keystone: pm: switch to use generic pm domains Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-20 12:56 ` [PATCH v2 1/3] PM / clock_ops: Add pm_clk_add_clk() Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-21 18:00 ` Santosh Shilimkar
2014-10-21 18:00 ` Santosh Shilimkar
[not found] ` <1413809764-21995-2-git-send-email-grygorii.strashko-l0cyMroinI0@public.gmane.org>
2014-10-22 17:38 ` Dmitry Torokhov
2014-10-22 17:38 ` Dmitry Torokhov
2014-10-22 17:38 ` Dmitry Torokhov
2014-10-22 19:02 ` Grygorii Strashko
2014-10-22 19:02 ` Grygorii Strashko
2014-10-22 19:02 ` Grygorii Strashko
2014-10-22 20:14 ` Dmitry Torokhov
2014-10-22 20:14 ` Dmitry Torokhov
2014-10-22 21:16 ` Dmitry Torokhov [this message]
2014-10-22 21:16 ` Dmitry Torokhov
2014-10-22 22:46 ` Dmitry Torokhov
2014-10-22 22:46 ` Dmitry Torokhov
[not found] ` <1413809764-21995-1-git-send-email-grygorii.strashko-l0cyMroinI0@public.gmane.org>
2014-10-20 12:56 ` [PATCH v2 2/3] ARM: keystone: pm: switch to use generic pm domains Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-21 18:05 ` Santosh Shilimkar
2014-10-21 18:05 ` Santosh Shilimkar
2014-10-22 11:23 ` Grygorii Strashko
2014-10-22 11:23 ` Grygorii Strashko
2014-10-22 11:23 ` Grygorii Strashko
2014-10-22 15:01 ` Ulf Hansson
2014-10-22 15:01 ` Ulf Hansson
2014-10-22 15:09 ` Geert Uytterhoeven
2014-10-22 15:09 ` Geert Uytterhoeven
2014-10-22 15:28 ` Ulf Hansson
2014-10-22 15:28 ` Ulf Hansson
2014-10-22 15:44 ` Geert Uytterhoeven
2014-10-22 15:44 ` Geert Uytterhoeven
2014-10-23 8:11 ` Ulf Hansson
2014-10-23 8:11 ` Ulf Hansson
2014-10-23 14:37 ` Grygorii Strashko
2014-10-23 14:37 ` Grygorii Strashko
2014-10-23 14:37 ` Grygorii Strashko
2014-10-24 9:53 ` Ulf Hansson
2014-10-24 9:53 ` Ulf Hansson
2014-10-24 12:07 ` Grygorii Strashko
2014-10-24 12:07 ` Grygorii Strashko
2014-10-24 12:07 ` Grygorii Strashko
2014-10-27 9:39 ` Ulf Hansson
2014-10-27 9:39 ` Ulf Hansson
2014-10-24 16:39 ` Dmitry Torokhov
2014-10-24 16:39 ` Dmitry Torokhov
2014-10-25 10:45 ` Ulf Hansson
2014-10-25 10:45 ` Ulf Hansson
2014-10-25 10:45 ` Ulf Hansson
2014-10-22 15:58 ` Kevin Hilman
2014-10-22 15:58 ` Kevin Hilman
2014-10-22 15:58 ` Kevin Hilman
2014-10-22 18:49 ` Santosh Shilimkar
2014-10-22 18:49 ` Santosh Shilimkar
2014-10-20 12:56 ` [PATCH v2 3/3] ARM: dts: keystone: add generic pd controller node Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
2014-10-20 12:56 ` Grygorii Strashko
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=20141022211631.GC4250@dtor-ws \
--to=dmitry.torokhov@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=grant.likely@secretlab.ca \
--cc=grygorii.strashko@ti.com \
--cc=khilman@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=robh+dt@kernel.org \
--cc=ssantosh@kernel.org \
--cc=ulf.hansson@linaro.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.