All of lore.kernel.org
 help / color / mirror / Atom feed
From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: ssantosh@kernel.org, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	khilman@linaro.org, linux-pm@vger.kernel.org,
	Rob Herring <robh+dt@kernel.org>,
	grant.likely@secretlab.ca, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Ulf Hansson <ulf.hansson@linaro.org>
Subject: Re: [PATCH v3 1/5] PM / clock_ops: Add pm_clk_add_clk()
Date: Thu, 23 Oct 2014 19:18:49 +0300	[thread overview]
Message-ID: <54492A69.5070505@ti.com> (raw)
In-Reply-To: <20141023154928.GC18714@dtor-ws>

On 10/23/2014 06:49 PM, Dmitry Torokhov wrote:
> On Thu, Oct 23, 2014 at 05:22:58PM +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.
>>
>> CC: Ulf Hansson <ulf.hansson@linaro.org>
>> CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
>> 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>
>> ---
>>   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 {
>
> You need __clk_get(clk) here, otherwise when you will be removing clocks
> you'll be dropping a reference that does not belong to you (as yiou have
> not taken it).

No, I don't ;)

pm_clk_add_clk is intended to be used with valid pointer on clk,
which means clk_get() has been called already. In our case:
	clk = of_clk_get(dev->of_node, i));
	ret = pm_clk_add_clk(dev, clk);

It's just a different way to fill list of clocks for device,
once pm_clk_add_clk() is called - PM clock framework will be the owner
of clock.

>
>> +		ce->clk = clk;
>>   	}
>>
>

regards,
-grygorii


WARNING: multiple messages have this Message-ID (diff)
From: grygorii.strashko@ti.com (Grygorii Strashko)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/5] PM / clock_ops: Add pm_clk_add_clk()
Date: Thu, 23 Oct 2014 19:18:49 +0300	[thread overview]
Message-ID: <54492A69.5070505@ti.com> (raw)
In-Reply-To: <20141023154928.GC18714@dtor-ws>

On 10/23/2014 06:49 PM, Dmitry Torokhov wrote:
> On Thu, Oct 23, 2014 at 05:22:58PM +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.
>>
>> CC: Ulf Hansson <ulf.hansson@linaro.org>
>> CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
>> 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>
>> ---
>>   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 {
>
> You need __clk_get(clk) here, otherwise when you will be removing clocks
> you'll be dropping a reference that does not belong to you (as yiou have
> not taken it).

No, I don't ;)

pm_clk_add_clk is intended to be used with valid pointer on clk,
which means clk_get() has been called already. In our case:
	clk = of_clk_get(dev->of_node, i));
	ret = pm_clk_add_clk(dev, clk);

It's just a different way to fill list of clocks for device,
once pm_clk_add_clk() is called - PM clock framework will be the owner
of clock.

>
>> +		ce->clk = clk;
>>   	}
>>
>

regards,
-grygorii

WARNING: multiple messages have this Message-ID (diff)
From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: <ssantosh@kernel.org>, "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	<khilman@linaro.org>, <linux-pm@vger.kernel.org>,
	Rob Herring <robh+dt@kernel.org>, <grant.likely@secretlab.ca>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Ulf Hansson <ulf.hansson@linaro.org>
Subject: Re: [PATCH v3 1/5] PM / clock_ops: Add pm_clk_add_clk()
Date: Thu, 23 Oct 2014 19:18:49 +0300	[thread overview]
Message-ID: <54492A69.5070505@ti.com> (raw)
In-Reply-To: <20141023154928.GC18714@dtor-ws>

On 10/23/2014 06:49 PM, Dmitry Torokhov wrote:
> On Thu, Oct 23, 2014 at 05:22:58PM +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.
>>
>> CC: Ulf Hansson <ulf.hansson@linaro.org>
>> CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
>> 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>
>> ---
>>   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 {
>
> You need __clk_get(clk) here, otherwise when you will be removing clocks
> you'll be dropping a reference that does not belong to you (as yiou have
> not taken it).

No, I don't ;)

pm_clk_add_clk is intended to be used with valid pointer on clk,
which means clk_get() has been called already. In our case:
	clk = of_clk_get(dev->of_node, i));
	ret = pm_clk_add_clk(dev, clk);

It's just a different way to fill list of clocks for device,
once pm_clk_add_clk() is called - PM clock framework will be the owner
of clock.

>
>> +		ce->clk = clk;
>>   	}
>>
>

regards,
-grygorii


  reply	other threads:[~2014-10-23 16:19 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-23 14:22 [PATCH v3 0/5] ARM: keystone: pm: switch to use generic pm domains Grygorii Strashko
2014-10-23 14:22 ` Grygorii Strashko
2014-10-23 14:22 ` Grygorii Strashko
2014-10-23 14:22 ` [PATCH v3 1/5] PM / clock_ops: Add pm_clk_add_clk() Grygorii Strashko
2014-10-23 14:22   ` Grygorii Strashko
2014-10-23 14:22   ` Grygorii Strashko
2014-10-23 15:49   ` Dmitry Torokhov
2014-10-23 15:49     ` Dmitry Torokhov
2014-10-23 16:18     ` Grygorii Strashko [this message]
2014-10-23 16:18       ` Grygorii Strashko
2014-10-23 16:18       ` Grygorii Strashko
2014-10-23 17:13       ` Dmitry Torokhov
2014-10-23 17:13         ` Dmitry Torokhov
2014-10-23 18:04         ` Grygorii Strashko
2014-10-23 18:04           ` Grygorii Strashko
2014-10-23 18:04           ` Grygorii Strashko
2014-10-23 14:22 ` [PATCH v3 2/5] PM / clock_ops: make __pm_clk_enable more generic Grygorii Strashko
2014-10-23 14:22   ` Grygorii Strashko
2014-10-23 14:22   ` Grygorii Strashko
2014-10-23 14:23 ` [PATCH v3 3/5] PM / clock_ops: add and enable clocks always if !CONFIG_PM_RUNTIME Grygorii Strashko
2014-10-23 14:23   ` Grygorii Strashko
2014-10-23 14:23   ` Grygorii Strashko
2014-10-23 14:23 ` [PATCH v3 4/5] ARM: keystone: pm: switch to use generic pm domains Grygorii Strashko
2014-10-23 14:23   ` Grygorii Strashko
2014-10-23 14:23   ` Grygorii Strashko
     [not found] ` <1414074182-25980-1-git-send-email-grygorii.strashko-l0cyMroinI0@public.gmane.org>
2014-10-23 14:23   ` [PATCH v3 5/5] ARM: dts: keystone: add generic pm controller node Grygorii Strashko
2014-10-23 14:23     ` Grygorii Strashko
2014-10-23 14:23     ` Grygorii Strashko
2014-10-24 18:25 ` [PATCH v3 0/5] ARM: keystone: pm: switch to use generic pm domains Santosh Shilimkar
2014-10-24 18:25   ` Santosh Shilimkar
     [not found]   ` <544A99B2.8080507-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-11-04 13:41     ` Grygorii Strashko
2014-11-04 13:41       ` Grygorii Strashko
2014-11-04 13:41       ` 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=54492A69.5070505@ti.com \
    --to=grygorii.strashko@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=geert+renesas@glider.be \
    --cc=grant.likely@secretlab.ca \
    --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.