All of lore.kernel.org
 help / color / mirror / Atom feed
From: emilio@elopez.com.ar (Emilio López)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] clk: respect the clock dependencies in of_clk_init
Date: Fri, 07 Feb 2014 13:16:36 -0300	[thread overview]
Message-ID: <52F506E4.8070900@elopez.com.ar> (raw)
In-Reply-To: <52F4F7EF.7090900@free-electrons.com>

Hi Gregory,

El 07/02/14 12:12, Gregory CLEMENT escribi?:
> On 07/02/2014 16:00, Emilio L?pez wrote:
>> El 07/02/14 11:49, Gregory CLEMENT escribi?:
>>> On 07/02/2014 15:43, Ezequiel Garcia wrote:
>>>> On Fri, Feb 07, 2014 at 09:24:30AM -0500, Jason Cooper wrote:
>>>>> On Fri, Feb 07, 2014 at 10:06:08AM -0300, Emilio L?pez wrote:
>>>>>
>>>>> [snip a great explanation]
>>>>>
>>>>> Guys, can I get some Tested-by's on this?
>>>>>
>>>>
>>>> In case someone missed Emilio's comment about it, I gave his oneliner
>>>> a test on A370 Reference Design. It worked just as well as Sebastian's.
>>>
>>> Well ok it's working but this patch is not better than Sebastian, it is
>>> even worth. I don't think it is a good idea at all to totally ignore the
>>> information given by the device tree.
>>
>> With a bit more work, you can replace the clk_get magic with a call to
>> of_clk_get_parent_name() or similar to be able to keep overriding stuff
>> from DT. This way it would completely match the behaviour on
>> mvebu_coreclk_setup (default to "tclk", allow overriding with DT).
>>
>
> I think you didn't have a look on our implementation:

I did, several times in fact.

> the name of the clock
> are created by the driver during the initialization.

The name of the clock is always "tclk", as hardcoded on the driver, 
unless overridden via clock-output-names from DT (see 
mvebu_coreclk_setup). Currently none of your DT that I can see does 
this, so in practice it's always "tclk".

> That's why we need that
> the parent clock are initialized before the gating clock.

You don't really *need* that. The driver just does that because it may 
have been convenient at the time and it worked. Defaulting to "tclk" on 
mvebu_clk_gating_setup and overriding it if it turns out it has some 
other name on the DT (just like on mvebu_coreclk_setup!) should work as 
well, and doesn't require complex, bloaty, dependency management.

Rough, untested patch below, so you get the idea.

Cheers,

Emilio



---
  drivers/clk/mvebu/common.c | 13 +++++++------
  1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c
index 25ceccf..730625b 100644
--- a/drivers/clk/mvebu/common.c
+++ b/drivers/clk/mvebu/common.c
@@ -119,19 +119,20 @@ void __init mvebu_clk_gating_setup(struct 
device_node *np,
  				   const struct clk_gating_soc_desc *desc)
  {
  	struct clk_gating_ctrl *ctrl;
-	struct clk *clk;
  	void __iomem *base;
-	const char *default_parent = NULL;
+	struct of_phandle_args clkspec;
+	const char *default_parent = "tclk";
  	int n;

  	base = of_iomap(np, 0);
  	if (WARN_ON(!base))
  		return;

-	clk = of_clk_get(np, 0);
-	if (!IS_ERR(clk)) {
-		default_parent = __clk_get_name(clk);
-		clk_put(clk);
+	if (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", 0, 
&clkspec)) {
+		of_property_read_string_index(clkspec.np, "clock-output-names",
+					      clkspec.args_count ? clkspec.args[0] : 0,
+					      &default_parent);
+		of_node_put(clkspec.np);
  	}

  	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
-- 
1.8.5.3

WARNING: multiple messages have this Message-ID (diff)
From: "Emilio López" <emilio@elopez.com.ar>
To: Gregory CLEMENT <gregory.clement@free-electrons.com>,
	Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
	Jason Cooper <jason@lakedaemon.net>
Cc: Mike Turquette <mturquette@linaro.org>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Andrew Lunn <andrew@lunn.ch>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Subject: Re: [PATCH] clk: respect the clock dependencies in of_clk_init
Date: Fri, 07 Feb 2014 13:16:36 -0300	[thread overview]
Message-ID: <52F506E4.8070900@elopez.com.ar> (raw)
In-Reply-To: <52F4F7EF.7090900@free-electrons.com>

Hi Gregory,

El 07/02/14 12:12, Gregory CLEMENT escribió:
> On 07/02/2014 16:00, Emilio López wrote:
>> El 07/02/14 11:49, Gregory CLEMENT escribió:
>>> On 07/02/2014 15:43, Ezequiel Garcia wrote:
>>>> On Fri, Feb 07, 2014 at 09:24:30AM -0500, Jason Cooper wrote:
>>>>> On Fri, Feb 07, 2014 at 10:06:08AM -0300, Emilio López wrote:
>>>>>
>>>>> [snip a great explanation]
>>>>>
>>>>> Guys, can I get some Tested-by's on this?
>>>>>
>>>>
>>>> In case someone missed Emilio's comment about it, I gave his oneliner
>>>> a test on A370 Reference Design. It worked just as well as Sebastian's.
>>>
>>> Well ok it's working but this patch is not better than Sebastian, it is
>>> even worth. I don't think it is a good idea at all to totally ignore the
>>> information given by the device tree.
>>
>> With a bit more work, you can replace the clk_get magic with a call to
>> of_clk_get_parent_name() or similar to be able to keep overriding stuff
>> from DT. This way it would completely match the behaviour on
>> mvebu_coreclk_setup (default to "tclk", allow overriding with DT).
>>
>
> I think you didn't have a look on our implementation:

I did, several times in fact.

> the name of the clock
> are created by the driver during the initialization.

The name of the clock is always "tclk", as hardcoded on the driver, 
unless overridden via clock-output-names from DT (see 
mvebu_coreclk_setup). Currently none of your DT that I can see does 
this, so in practice it's always "tclk".

> That's why we need that
> the parent clock are initialized before the gating clock.

You don't really *need* that. The driver just does that because it may 
have been convenient at the time and it worked. Defaulting to "tclk" on 
mvebu_clk_gating_setup and overriding it if it turns out it has some 
other name on the DT (just like on mvebu_coreclk_setup!) should work as 
well, and doesn't require complex, bloaty, dependency management.

Rough, untested patch below, so you get the idea.

Cheers,

Emilio



---
  drivers/clk/mvebu/common.c | 13 +++++++------
  1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c
index 25ceccf..730625b 100644
--- a/drivers/clk/mvebu/common.c
+++ b/drivers/clk/mvebu/common.c
@@ -119,19 +119,20 @@ void __init mvebu_clk_gating_setup(struct 
device_node *np,
  				   const struct clk_gating_soc_desc *desc)
  {
  	struct clk_gating_ctrl *ctrl;
-	struct clk *clk;
  	void __iomem *base;
-	const char *default_parent = NULL;
+	struct of_phandle_args clkspec;
+	const char *default_parent = "tclk";
  	int n;

  	base = of_iomap(np, 0);
  	if (WARN_ON(!base))
  		return;

-	clk = of_clk_get(np, 0);
-	if (!IS_ERR(clk)) {
-		default_parent = __clk_get_name(clk);
-		clk_put(clk);
+	if (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", 0, 
&clkspec)) {
+		of_property_read_string_index(clkspec.np, "clock-output-names",
+					      clkspec.args_count ? clkspec.args[0] : 0,
+					      &default_parent);
+		of_node_put(clkspec.np);
  	}

  	ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
-- 
1.8.5.3

  reply	other threads:[~2014-02-07 16:16 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-04 22:59 [PATCH] clk: respect the clock dependencies in of_clk_init Gregory CLEMENT
2014-02-04 22:59 ` Gregory CLEMENT
2014-02-05  5:09 ` Jason Cooper
2014-02-05  5:09   ` Jason Cooper
2014-02-05  8:45 ` Boris BREZILLON
2014-02-05  8:45   ` Boris BREZILLON
2014-02-05  9:48 ` [PATCH] clk: add strict of_clk_init dependency check Boris BREZILLON
2014-02-05  9:48   ` Boris BREZILLON
2014-02-05 14:48   ` Gregory CLEMENT
2014-02-05 14:48     ` Gregory CLEMENT
2014-02-05 15:05     ` Gregory CLEMENT
2014-02-05 15:05       ` Gregory CLEMENT
2014-02-05 15:07       ` Boris BREZILLON
2014-02-05 15:07         ` Boris BREZILLON
2014-02-05 23:11 ` [PATCH] clk: respect the clock dependencies in of_clk_init Sebastian Hesselbarth
2014-02-05 23:11   ` Sebastian Hesselbarth
2014-02-07 13:06 ` Emilio López
2014-02-07 13:06   ` Emilio López
2014-02-07 14:24   ` Jason Cooper
2014-02-07 14:24     ` Jason Cooper
2014-02-07 14:43     ` Ezequiel Garcia
2014-02-07 14:43       ` Ezequiel Garcia
2014-02-07 14:49       ` Gregory CLEMENT
2014-02-07 14:49         ` Gregory CLEMENT
2014-02-07 15:00         ` Emilio López
2014-02-07 15:00           ` Emilio López
2014-02-07 15:12           ` Gregory CLEMENT
2014-02-07 15:12             ` Gregory CLEMENT
2014-02-07 16:16             ` Emilio López [this message]
2014-02-07 16:16               ` Emilio López
2014-02-07 18:10               ` Gregory CLEMENT
2014-02-07 18:10                 ` Gregory CLEMENT
2014-02-07 18:17                 ` Emilio López
2014-02-07 18:17                   ` Emilio López
2014-02-07 23:15         ` Sebastian Hesselbarth
2014-02-07 23:15           ` Sebastian Hesselbarth

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=52F506E4.8070900@elopez.com.ar \
    --to=emilio@elopez.com.ar \
    --cc=linux-arm-kernel@lists.infradead.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.