From: Scott Wood <oss@buserror.net> Date: 2016-06-16 06:21:24
From: Scott Wood <redacted>
Commit fc4a05d4b0eb ("clk: Remove unused provider APIs") removed
__clk_get_num_parents() and clk_hw_get_parent_by_index(), leaving only
true provider API versions that operate on struct clk_hw.
qoriq-cpufreq needs these functions in order to determine the options
it has for calling clk_set_parent() and thus populate the cpufreq
table, so revive them as legitimate consumer APIs.
Signed-off-by: Scott Wood <redacted>
---
v2: Add missing 'static inline' to stub functions.
v3: no changes
drivers/clk/clk.c | 19 +++++++++++++++++++
include/linux/clk.h | 31 +++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
From: Scott Wood <oss@buserror.net> Date: 2016-06-16 06:21:25
From: Scott Wood <redacted>
Get the CPU clock's potential parent clocks from the clock interface
itself, rather than manually parsing the clocks property to find a
phandle, looking at the clock-names property of that, and assuming that
those are valid parent clocks for the cpu clock.
This is necessary now that the clocks are generated based on the clock
driver's knowledge of the chip rather than a fragile device-tree
description of the mux options.
We can now rely on the clock driver to ensure that the mux only exposes
options that are valid. The cpufreq driver was currently being overly
conservative in some cases -- for example, the "min_cpufreq =
get_bus_freq()" restriction only applies to chips with erratum
A-004510, and whether the freq_mask used on p5020 is needed depends on
the actual frequencies of the PLLs (FWIW, p5040 has a similar
limitation but its .freq_mask was zero) -- and the frequency mask
mechanism made assumptions about particular parent clock indices that
are no longer valid.
Signed-off-by: Scott Wood <redacted>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
---
v2: no changes
v3: Remove the now-unused pnode and the call to of_node_put()
drivers/cpufreq/qoriq-cpufreq.c | 141 ++++++++++++----------------------------
1 file changed, 41 insertions(+), 100 deletions(-)
@@ -37,53 +37,20 @@ struct cpu_data {structthermal_cooling_device*cdev;};+/*+*Don'tusecpufreqonthisSoC--usedwhentheSoCwouldhaveotherwise+*matchedamoregenericcompatible.+*/+#define SOC_BLACKLIST 1+/***structsoc_data-SoCspecificdata-*@freq_mask:maskthedisallowedfrequencies-*@flag:uniqueflags+*@flags:SOC_xxx*/structsoc_data{-u32freq_mask[4];-u32flag;-};--#define FREQ_MASK 1-/* see hardware specification for the allowed frqeuencies */-staticconststructsoc_datasdata[]={-{/* used by p2041 and p3041 */-.freq_mask={0x8,0x8,0x2,0x2},-.flag=FREQ_MASK,-},-{/* used by p5020 */-.freq_mask={0x8,0x2},-.flag=FREQ_MASK,-},-{/* used by p4080, p5040 */-.freq_mask={0},-.flag=0,-},+u32flags;};-/*-*theminimumallowedcorefrequency,inHz-*forchassisv1.0,>=platformfrequency-*forchassisv2.0,>=platformfrequency/2-*/-staticu32min_cpufreq;-staticconstu32*fmask;--#if defined(CONFIG_ARM)-staticintget_cpu_physical_id(intcpu)-{-returntopology_core_id(cpu);-}-#else-staticintget_cpu_physical_id(intcpu)-{-returnget_hard_smp_processor_id(cpu);-}-#endif-staticu32get_bus_freq(void){structdevice_node*soc;
@@ -112,37 +80,28 @@ static struct device_node *cpu_to_clk_node(int cpu)if(!np)returnNULL;-clk_np=of_parse_phandle(np,"clocks",0);-if(!clk_np)-returnNULL;-+clk=of_clk_get(np,0);of_node_put(np);--returnclk_np;+returnclk;}/* traverse cpu nodes to get cpu mask of sharing clock wire */staticvoidset_affected_cpus(structcpufreq_policy*policy){-structdevice_node*np,*clk_np;structcpumask*dstp=policy->cpus;+structclk*clk;inti;-np=cpu_to_clk_node(policy->cpu);-if(!np)-return;-for_each_present_cpu(i){-clk_np=cpu_to_clk_node(i);-if(!clk_np)+clk=cpu_to_clk(i);+if(IS_ERR(clk)){+pr_err("%s: no clock for cpu %d\n",__func__,i);continue;+}-if(clk_np==np)+if(clk_is_match(policy->clk,clk))cpumask_set_cpu(i,dstp);--of_node_put(clk_np);}-of_node_put(np);}/* reduce the duplicated frequencies in frequency table */
@@ -221,17 +180,12 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_policy *policy)gotoerr_nomem2;}-pnode=of_parse_phandle(np,"clocks",0);-if(!pnode){-pr_err("%s: could not get clock information\n",__func__);-gotoerr_nomem2;-}+count=clk_get_num_parents(policy->clk);-count=of_property_count_strings(pnode,"clock-names");data->pclk=kcalloc(count,sizeof(structclk*),GFP_KERNEL);if(!data->pclk){pr_err("%s: no memory\n",__func__);-gotoerr_node;+gotoerr_nomem2;}table=kcalloc(count+1,sizeof(*table),GFP_KERNEL);
@@ -240,23 +194,11 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_policy *policy)gotoerr_pclk;}-if(fmask)-mask=fmask[get_cpu_physical_id(cpu)];-else-mask=0x0;-for(i=0;i<count;i++){-clk=of_clk_get(pnode,i);+clk=clk_get_parent_by_index(policy->clk,i);data->pclk[i]=clk;freq=clk_get_rate(clk);-/*-*theclockisvalidifitsfrequencyisnotmasked-*andlargethanminimumallowedfrequency.-*/-if(freq<min_cpufreq||(mask&(1<<i)))-table[i].frequency=CPUFREQ_ENTRY_INVALID;-else-table[i].frequency=freq/1000;+table[i].frequency=freq/1000;table[i].driver_data=i;}freq_table_redup(table,count);
@@ -282,18 +224,13 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_policy *policy)policy->cpuinfo.transition_latency=u64temp+1;of_node_put(np);-of_node_put(pnode);-return0;err_nomem1:kfree(table);err_pclk:kfree(data->pclk);-err_node:-of_node_put(pnode);err_nomem2:-policy->driver_data=NULL;kfree(data);err_np:of_node_put(np);
@@ -357,12 +294,20 @@ static struct cpufreq_driver qoriq_cpufreq_driver = {.attr=cpufreq_generic_attr,};+staticconststructsoc_datablacklist={+.flags=SOC_BLACKLIST,+};+staticconststructof_device_idnode_matches[]__initconst={-{.compatible="fsl,p2041-clockgen",.data=&sdata[0],},-{.compatible="fsl,p3041-clockgen",.data=&sdata[0],},-{.compatible="fsl,p5020-clockgen",.data=&sdata[1],},-{.compatible="fsl,p4080-clockgen",.data=&sdata[2],},-{.compatible="fsl,p5040-clockgen",.data=&sdata[2],},+/* e6500 cannot use cpufreq due to erratum A-008083 */+{.compatible="fsl,b4420-clockgen",&blacklist},+{.compatible="fsl,b4860-clockgen",&blacklist},+{.compatible="fsl,t2080-clockgen",&blacklist},+{.compatible="fsl,t4240-clockgen",&blacklist},++{.compatible="fsl,ls1021a-clockgen",},+{.compatible="fsl,p4080-clockgen",},+{.compatible="fsl,qoriq-clockgen-1.0",},{.compatible="fsl,qoriq-clockgen-2.0",},{}};
@@ -380,16 +325,12 @@ static int __init qoriq_cpufreq_init(void)match=of_match_node(node_matches,np);data=match->data;-if(data){-if(data->flag)-fmask=data->freq_mask;-min_cpufreq=get_bus_freq();-}else{-min_cpufreq=get_bus_freq()/2;-}of_node_put(np);+if(data&&data->flags&SOC_BLACKLIST)+return-ENODEV;+ret=cpufreq_register_driver(&qoriq_cpufreq_driver);if(!ret)pr_info("Freescale QorIQ CPU frequency scaling driver\n");
Hi,
This patch is acked by clock maintainer. If no comments from anyone else, w=
e will merge it in next week.
Thanks,
Yuantian
-----Original Message-----
From: Scott Wood [mailto:oss@buserror.net]
Sent: Thursday, June 16, 2016 2:21 PM
To: Russell King <linux@armlinux.org.uk>; Michael Turquette
[off-list ref]; Stephen Boyd [off-list ref];
Viresh Kumar [off-list ref]; Rafael J. Wysocki
[off-list ref]
Cc: linux-clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yuantian Tang [off-list ref]; Yang-Leo Li
[off-list ref]; Xiaofeng Ren [off-list ref]; Scott Wood
[off-list ref]
Subject: [PATCH v3 1/2] clk: Add consumer APIs for discovering possible
parent clocks
=20
From: Scott Wood <redacted>
=20
Commit fc4a05d4b0eb ("clk: Remove unused provider APIs") removed
__clk_get_num_parents() and clk_hw_get_parent_by_index(), leaving only
true provider API versions that operate on struct clk_hw.
=20
qoriq-cpufreq needs these functions in order to determine the options it =
has
for calling clk_set_parent() and thus populate the cpufreq table, so revi=
ve
quoted hunk
them as legitimate consumer APIs.
=20
Signed-off-by: Scott Wood <redacted>
---
v2: Add missing 'static inline' to stub functions.
=20
v3: no changes
=20
drivers/clk/clk.c | 19 +++++++++++++++++++
include/linux/clk.h | 31 +++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
=20
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index d584004..d61a3fe=
struct clk *clk_get_parent(struct clk *clk);
=20
/**
+ * clk_get_parent_by_index - get a possible parent clock by index
+ * @clk: clock source
+ * @index: index into the array of possible parents of this clock
+ *
+ * Returns struct clk corresponding to the requested possible
+ * parent clock source, or NULL.
+ */
+struct clk *clk_get_parent_by_index(struct clk *clk,
+ unsigned int index);
+
+/**
+ * clk_get_num_parents - get number of possible parents
+ * @clk: clock source
+ *
+ * Returns the number of possible parents of this clock,
+ * which can then be enumerated using clk_get_parent_by_index().
+ */
+unsigned int clk_get_num_parents(struct clk *clk);
+
+/**
* clk_get_sys - get a clock based upon the device name
* @dev_id: device name
* @con_id: connection ID
From: Rafael J. Wysocki <hidden> Date: 2016-06-30 02:24:29
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 9:47 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.org.uk>;
Michael Turquette [off-list ref]; Stephen Boyd
[off-list ref]; Viresh Kumar [off-list ref]; linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng Ren
[off-list ref]; Scott Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering possible
parent clocks
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:
quoted
Hi,
This patch is acked by clock maintainer. If no comments from anyone else,
we will merge it in next week.
There is a cpufreq commit depending on it. Are you going to handle that one
too?
That one has been acked by cpufreq maintainer. You can get this from patch comments.
I know that it has been ACKed.
My question is whether or not you are going to apply it along the [1/2].
If not, it will have to be deferred until the [1/2] is merged and then applied
which may not be desirable.
Thanks,
Rafael
From: Scott Wood <hidden> Date: 2016-06-30 05:46:42
On 06/29/2016 10:02 PM, Yuantian Tang wrote:=0A=
quoted
-----Original Message-----=0A=
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]=0A=
Sent: Thursday, June 30, 2016 10:24 AM=0A=
To: Yuantian Tang <redacted>=0A=
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.org.uk>;=
=0A=
quoted
Michael Turquette [off-list ref]; Stephen Boyd=0A=
[off-list ref]; Viresh Kumar [off-list ref]; linux-=
=0A=
quoted
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-=0A=
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng Ren=0A=
[off-list ref]; Scott Wood [off-list ref]=0A=
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering possi=
ble=0A=
quoted
parent clocks=0A=
=0A=
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:=0A=
quoted
quoted
-----Original Message-----=0A=
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]=0A=
Sent: Thursday, June 30, 2016 9:47 AM=0A=
To: Yuantian Tang <redacted>=0A=
Cc: Scott Wood <oss@buserror.net>; Russell King=0A=
[off-list ref]; Michael Turquette=0A=
[off-list ref]; Stephen Boyd [off-list ref];=0A=
Viresh Kumar [off-list ref]; linux- clk@vger.kernel.org;=0A=
linux-pm@vger.kernel.org; linuxppc- dev@lists.ozlabs.org; Yang-Leo=0A=
Li [off-list ref]; Xiaofeng Ren [off-list ref]; Scott=0A=
Wood [off-list ref]=0A=
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering=0A=
possible parent clocks=0A=
=0A=
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:=0A=
quoted
Hi,=0A=
=0A=
This patch is acked by clock maintainer. If no comments from=0A=
anyone else,=0A=
we will merge it in next week.=0A=
=0A=
There is a cpufreq commit depending on it. Are you going to handle=0A=
that one too?=0A=
=0A=
That one has been acked by cpufreq maintainer. You can get this from=0A=
patch comments.=0A=
=0A=
I know that it has been ACKed.=0A=
=0A=
My question is whether or not you are going to apply it along the [1/2].=
=0A=
quoted
=0A=
If not, it will have to be deferred until the [1/2] is merged and then a=
pplied=0A=
quoted
which may not be desirable.=0A=
=0A=
I hope we can apply both at same time. Seems Scott has a few concerns.=0A=
=0A=
What you think about this patch? Can you apply it?=0A=
If you have applied this patch, then I can push CPUfreq maintainer to app=
ly another one which will be delayed.=0A=
=0A=
My only concern was getting an ack for this patch (1/2) -- did I miss it=0A=
somewhere?=0A=
=0A=
-Scott=0A=
=0A=
From: Rafael J. Wysocki <hidden> Date: 2016-06-30 13:29:06
On Thursday, June 30, 2016 05:46:42 AM Scott Wood wrote:
On 06/29/2016 10:02 PM, Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 10:24 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.org.uk>;
Michael Turquette [off-list ref]; Stephen Boyd
[off-list ref]; Viresh Kumar [off-list ref]; linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng Ren
[off-list ref]; Scott Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering possible
parent clocks
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 9:47 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King
[off-list ref]; Michael Turquette
[off-list ref]; Stephen Boyd [off-list ref];
Viresh Kumar [off-list ref]; linux- clk@vger.kernel.org;
linux-pm@vger.kernel.org; linuxppc- dev@lists.ozlabs.org; Yang-Leo
Li [off-list ref]; Xiaofeng Ren [off-list ref]; Scott
Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible parent clocks
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:
quoted
Hi,
This patch is acked by clock maintainer. If no comments from
anyone else,
we will merge it in next week.
There is a cpufreq commit depending on it. Are you going to handle
that one too?
That one has been acked by cpufreq maintainer. You can get this from
patch comments.
I know that it has been ACKed.
My question is whether or not you are going to apply it along the [1/2].
If not, it will have to be deferred until the [1/2] is merged and then applied
which may not be desirable.
I hope we can apply both at same time. Seems Scott has a few concerns.
What you think about this patch? Can you apply it?
If you have applied this patch, then I can push CPUfreq maintainer to apply another one which will be delayed.
My only concern was getting an ack for this patch (1/2) -- did I miss it
somewhere?
OK, so who's going to apply the series?
Thanks,
Rafael
From: Scott Wood <oss@buserror.net> Date: 2016-07-01 06:55:46
On Thu, 2016-06-30 at 15:29 +0200, Rafael J. Wysocki wrote:
On Thursday, June 30, 2016 05:46:42 AM Scott Wood wrote:
quoted
On 06/29/2016 10:02 PM, Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 10:24 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.org.uk
quoted
;
Michael Turquette [off-list ref]; Stephen Boyd
[off-list ref]; Viresh Kumar [off-list ref]; linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng Ren
[off-list ref]; Scott Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible
parent clocks
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 9:47 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King
[off-list ref]; Michael Turquette
[off-list ref]; Stephen Boyd [off-list ref];
Viresh Kumar [off-list ref]; linux- clk@vger.kernel.org
;
linux-pm@vger.kernel.org; linuxppc- dev@lists.ozlabs.org; Yang-Leo
Li [off-list ref]; Xiaofeng Ren [off-list ref];
Scott
Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible parent clocks
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:
quoted
Hi,
This patch is acked by clock maintainer. If no comments from
anyone else,
we will merge it in next week.
There is a cpufreq commit depending on it. Are you going to
handle
that one too?
That one has been acked by cpufreq maintainer. You can get this from
patch comments.
I know that it has been ACKed.
My question is whether or not you are going to apply it along the
[1/2].
If not, it will have to be deferred until the [1/2] is merged and then
applied
which may not be desirable.
I hope we can apply both at same time. Seems Scott has a few concerns.
What you think about this patch? Can you apply it?
If you have applied this patch, then I can push CPUfreq maintainer to
apply another one which will be delayed.
My only concern was getting an ack for this patch (1/2) -- did I miss it
somewhere?
From: Rafael J. Wysocki <hidden> Date: 2016-07-01 20:53:44
On Friday, July 01, 2016 01:55:46 AM Scott Wood wrote:
On Thu, 2016-06-30 at 15:29 +0200, Rafael J. Wysocki wrote:
quoted
On Thursday, June 30, 2016 05:46:42 AM Scott Wood wrote:
quoted
On 06/29/2016 10:02 PM, Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 10:24 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.org.uk
quoted
;
Michael Turquette [off-list ref]; Stephen Boyd
[off-list ref]; Viresh Kumar [off-list ref]; linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng Ren
[off-list ref]; Scott Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible
parent clocks
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 9:47 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King
[off-list ref]; Michael Turquette
[off-list ref]; Stephen Boyd [off-list ref];
Viresh Kumar [off-list ref]; linux- clk@vger.kernel.org
;
linux-pm@vger.kernel.org; linuxppc- dev@lists.ozlabs.org; Yang-Leo
Li [off-list ref]; Xiaofeng Ren [off-list ref];
Scott
Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible parent clocks
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:
quoted
Hi,
This patch is acked by clock maintainer. If no comments from
anyone else,
we will merge it in next week.
There is a cpufreq commit depending on it. Are you going to
handle
that one too?
That one has been acked by cpufreq maintainer. You can get this from
patch comments.
I know that it has been ACKed.
My question is whether or not you are going to apply it along the
[1/2].
If not, it will have to be deferred until the [1/2] is merged and then
applied
which may not be desirable.
I hope we can apply both at same time. Seems Scott has a few concerns.
What you think about this patch? Can you apply it?
If you have applied this patch, then I can push CPUfreq maintainer to
apply another one which will be delayed.
My only concern was getting an ack for this patch (1/2) -- did I miss it
somewhere?
OK, so who's going to apply the series?
Ideally it should go via the cpufreq tree.
OK, I'll apply both, then.
Who exactly has ACKed the [1/2] from the clk side?
Thanks,
Rafael
From: Scott Wood <oss@buserror.net> Date: 2016-07-01 20:57:22
On Fri, 2016-07-01 at 22:53 +0200, Rafael J. Wysocki wrote:
On Friday, July 01, 2016 01:55:46 AM Scott Wood wrote:
quoted
On Thu, 2016-06-30 at 15:29 +0200, Rafael J. Wysocki wrote:
quoted
On Thursday, June 30, 2016 05:46:42 AM Scott Wood wrote:
quoted
On 06/29/2016 10:02 PM, Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 10:24 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King <linux@armlinux.or
g.uk
quoted
;
Michael Turquette [off-list ref]; Stephen Boyd
[off-list ref]; Viresh Kumar [off-list ref];
linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yang-Leo Li [off-list ref]; Xiaofeng
Ren
[off-list ref]; Scott Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for discovering
possible
parent clocks
On Thursday, June 30, 2016 01:47:09 AM Yuantian Tang wrote:
quoted
quoted
-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
Sent: Thursday, June 30, 2016 9:47 AM
To: Yuantian Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Russell King
[off-list ref]; Michael Turquette
[off-list ref]; Stephen Boyd [off-list ref]
;
Viresh Kumar [off-list ref]; linux- clk@vger.kernel
.org
;
linux-pm@vger.kernel.org; linuxppc- dev@lists.ozlabs.org;
Yang-Leo
Li [off-list ref]; Xiaofeng Ren [off-list ref];
Scott
Wood [off-list ref]
Subject: Re: [PATCH v3 1/2] clk: Add consumer APIs for
discovering
possible parent clocks
On Wednesday, June 29, 2016 05:50:26 AM Yuantian Tang wrote:
quoted
Hi,
This patch is acked by clock maintainer. If no comments from
anyone else,
we will merge it in next week.
There is a cpufreq commit depending on it. Are you going to
handle
that one too?
That one has been acked by cpufreq maintainer. You can get this
from
patch comments.
I know that it has been ACKed.
My question is whether or not you are going to apply it along the
[1/2].
If not, it will have to be deferred until the [1/2] is merged and
then
applied
which may not be desirable.
I hope we can apply both at same time. Seems Scott has a few
concerns.
What you think about this patch? Can you apply it?
If you have applied this patch, then I can push CPUfreq maintainer
to
apply another one which will be delayed.
My only concern was getting an ack for this patch (1/2) -- did I miss
it
somewhere?
OK, so who's going to apply the series?
Ideally it should go via the cpufreq tree.
OK, I'll apply both, then.
Who exactly has ACKed the [1/2] from the clk side?
That's the problem. I'm not sure what ACK Yuantian is referring to. The last
I've heard from a clock maintainer was https://lkml.org/lkml/2015/9/18/816 des
pite repeated attempts to get Russell King to respond as clock API maintainer.
-Scott
@@ -221,17 +180,12 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_po=
licy *policy)
goto err_nomem2;
}
=
- pnode =3D of_parse_phandle(np, "clocks", 0);
- if (!pnode) {
- pr_err("%s: could not get clock information\n", __func__);
- goto err_nomem2;
- }
+ count =3D clk_get_num_parents(policy->clk);
We already have of_clk_get_parent_count. This is found in
clk-provider.h, which doesn't fit perfectly here since the cpufreq
driver is not a clock provider, but instead a consumer.
quoted hunk
@@ -240,23 +194,11 @@ static int qoriq_cpufreq_cpu_init(struct cpufreq_po=
licy *policy)
goto err_pclk;
}
=
- if (fmask)
- mask =3D fmask[get_cpu_physical_id(cpu)];
- else
- mask =3D 0x0;
-
for (i =3D 0; i < count; i++) {
- clk =3D of_clk_get(pnode, i);
+ clk =3D clk_get_parent_by_index(policy->clk, i);
data->pclk[i] =3D clk;
freq =3D clk_get_rate(clk);
- /*
- * the clock is valid if its frequency is not masked
- * and large than minimum allowed frequency.
- */
- if (freq < min_cpufreq || (mask & (1 << i)))
- table[i].frequency =3D CPUFREQ_ENTRY_INVALID;
- else
- table[i].frequency =3D freq / 1000;
+ table[i].frequency =3D freq / 1000;
Hmm, so you change cpu clock rate by selecting different clock sources
from a cpu clock mux, right? I wonder if you can just have a child mux
clock that selects parents from .set_rate (via a .determine_rate
callback)? Then you could just call clk_set_rate() on your cpu mux clock
and maybe skip most of the stuff this driver does?
Regards,
Mike
devm_clk_get() is a wrapper around clk_get() which is not the same as
of_clk_get(). What device would you pass to devm_clk_get(), and what name
would you pass?
quoted
@@ -221,17 +180,12 @@ static int qoriq_cpufreq_cpu_init(struct
cpufreq_policy *policy)
goto err_nomem2;
}
- pnode = of_parse_phandle(np, "clocks", 0);
- if (!pnode) {
- pr_err("%s: could not get clock information\n", __func__);
- goto err_nomem2;
- }
+ count = clk_get_num_parents(policy->clk);
We already have of_clk_get_parent_count. This is found in
clk-provider.h, which doesn't fit perfectly here since the cpufreq
driver is not a clock provider, but instead a consumer.
It's also a device tree function, and the clock parents in question aren't in
the device tree.
quoted
@@ -240,23 +194,11 @@ static int qoriq_cpufreq_cpu_init(struct
cpufreq_policy *policy)
goto err_pclk;
}
- if (fmask)
- mask = fmask[get_cpu_physical_id(cpu)];
- else
- mask = 0x0;
-
for (i = 0; i < count; i++) {
- clk = of_clk_get(pnode, i);
+ clk = clk_get_parent_by_index(policy->clk, i);
data->pclk[i] = clk;
freq = clk_get_rate(clk);
- /*
- * the clock is valid if its frequency is not masked
- * and large than minimum allowed frequency.
- */
- if (freq < min_cpufreq || (mask & (1 << i)))
- table[i].frequency = CPUFREQ_ENTRY_INVALID;
- else
- table[i].frequency = freq / 1000;
+ table[i].frequency = freq / 1000;
Hmm, so you change cpu clock rate by selecting different clock sources
from a cpu clock mux, right?
Yes. You'd think such a simple thing would be more straightforward.
I wonder if you can just have a child mux
clock that selects parents from .set_rate (via a .determine_rate
callback)? Then you could just call clk_set_rate() on your cpu mux clock
and maybe skip most of the stuff this driver does?
"Most of the stuff this driver does" is dealing with the cpufreq subsystem
(ask the cpufreq maintainers why it requires so much boilerplate), associating
clock muxes with cpus, etc. It is also not obvious to me how to use
determine_rate() or that the end result would be any simpler or better. It
seems like the implementation would just be reimplementing logic that already
exists in cpufreq, and the cpufreq driver would still need to be able to get a
list of possible frequencies, because cpufreq wants a table of them.
After nearly a year of non-response to these patches[1], a request to
completely rearchitect this driver[2] just to avoid exposing a couple
straightforward informational functions to clock consumers[3] was not quite
what I was hoping for. What is wrong with clock consumers being able to query
the parent list, given that clock consumers have the ability to request a
particular parent?
-Scott
[1] Original versions:
http://www.spinics.net/lists/linux-clk/msg03069.htmlhttp://www.spinics.net/lists/linux-clk/msg03070.html
[2] The only reason I'm touching this driver at all is because it currently
makes bad assumptions about clock provider internals (and clock provider
device tree structure) that are broken by the new bindings enabled by
commit 0dfc86b3173fee ("clk: qoriq: Move chip-specific knowledge into
driver").
[3] I initially discussed adding consumer APIs for this patchset in
http://lkml.iu.edu/hypermail/linux/kernel/1509.2/02728.html
devm_clk_get() is a wrapper around clk_get() which is not the same as
of_clk_get(). =C2=A0What device would you pass to devm_clk_get(), and wha=
t name
would you pass?
I'm fuzzy on whether or not you get a struct device from a cpufreq
driver. If so, then that would be the one to use. I would hope that
cpufreq drivers model cpus as devices, but I'm really not sure without
looking into the code.
Regards,
Mike
=
quoted
quoted
=
quoted
quoted
@@ -221,17 +180,12 @@ static int qoriq_cpufreq_cpu_init(struct
We already have of_clk_get_parent_count. This is found in
clk-provider.h, which doesn't fit perfectly here since the cpufreq
driver is not a clock provider, but instead a consumer.
=
It's also a device tree function, and the clock parents in question aren'=
t in
the device tree.
=
quoted
quoted
@@ -240,23 +194,11 @@ static int qoriq_cpufreq_cpu_init(struct
Hmm, so you change cpu clock rate by selecting different clock sources
from a cpu clock mux, right?
=
Yes. =C2=A0You'd think such a simple thing would be more straightforward.
=
quoted
I wonder if you can just have a child mux
clock that selects parents from .set_rate (via a .determine_rate
callback)? Then you could just call clk_set_rate() on your cpu mux clock
and maybe skip most of the stuff this driver does?
=
"Most of the stuff this driver does" is dealing with the cpufreq subsystem
(ask the cpufreq maintainers why it requires so much boilerplate), associ=
ating
clock muxes with cpus, etc. =C2=A0It is also not obvious to me how to use
determine_rate() or that the end result would be any simpler or better. =
=C2=A0It
seems like the implementation would just be reimplementing logic that alr=
eady
exists in cpufreq, and the cpufreq driver would still need to be able to =
get a
list of possible frequencies, because cpufreq wants a table of them.
=
After nearly a year of non-response to these patches[1], a request to
completely rearchitect this driver[2] just to avoid exposing a couple
straightforward informational functions to clock consumers[3] was not qui=
te
what I was hoping for. =C2=A0What is wrong with clock consumers being abl=
e to query
the parent list, given that clock consumers have the ability to request a
particular parent?
=
[2] The only reason I'm touching this driver at all is because it current=
ly
makes bad assumptions about clock provider internals (and clock provider
device tree structure) that are broken by the new bindings enabled by
commit=C2=A00dfc86b3173fee ("clk: qoriq: Move chip-specific knowledge into
driver").
=
devm_clk_get() is a wrapper around clk_get() which is not the same as
of_clk_get(). What device would you pass to devm_clk_get(), and what name
would you pass?
I'm fuzzy on whether or not you get a struct device from a cpufreq
driver. If so, then that would be the one to use. I would hope that
cpufreq drivers model cpus as devices, but I'm really not sure without
looking into the code.
It's not the cpufreq code that provides it, but get_cpu_device() could be
used.
Do you have any comments on the first patch of this set?
-Scott
On Tue, Jul 19, 2016 at 10:02 PM, Yuantian Tang [off-list ref] wrote:
PING.
Regards,
Yuantian
quoted
-----Original Message-----
From: Scott Wood [mailto:oss@buserror.net]
Sent: Saturday, July 09, 2016 5:07 AM
To: Michael Turquette <mturquette@baylibre.com>; Russell King
[off-list ref]; Stephen Boyd [off-list ref]; Viresh
Kumar [off-list ref]; Rafael J. Wysocki [off-list ref]
Cc: linux-clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yuantian Tang [off-list ref]; Yang-Leo Li
[off-list ref]; Xiaofeng Ren [off-list ref]
Subject: Re: [PATCH v3 2/2] cpufreq: qoriq: Don't look at clock
implementation details
On Thu, 2016-07-07 at 19:26 -0700, Michael Turquette wrote:
quoted
Quoting Scott Wood (2016-07-06 21:13:23)
quoted
On Wed, 2016-07-06 at 18:30 -0700, Michael Turquette wrote:
devm_clk_get() is a wrapper around clk_get() which is not the same
as of_clk_get(). What device would you pass to devm_clk_get(), and
what name would you pass?
I'm fuzzy on whether or not you get a struct device from a cpufreq
driver. If so, then that would be the one to use. I would hope that
cpufreq drivers model cpus as devices, but I'm really not sure without
looking into the code.
It's not the cpufreq code that provides it, but get_cpu_device() could be
used.
Do you have any comments on the first patch of this set?
Any action on this patch? This patch is still a dependency for
cpufreq to work on all QorIQ platforms.
Regards,
Leo
-----Original Message-----
From: Leo Li [mailto:pku.leo@gmail.com]
Sent: Friday, February 03, 2017 2:12 AM
To: Y.T. Tang <redacted>
Cc: Scott Wood <oss@buserror.net>; Michael Turquette
[off-list ref]; Russell King [off-list ref];
Stephen Boyd [off-list ref]; Viresh Kumar
[off-list ref]; Rafael J. Wysocki [off-list ref]; linux-
clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Leo Li [off-list ref]; X.F. Ren
[off-list ref]
Subject: Re: [PATCH v3 2/2] cpufreq: qoriq: Don't look at clock
implementation details
On Tue, Jul 19, 2016 at 10:02 PM, Yuantian Tang [off-list ref]
wrote:
quoted
PING.
Regards,
Yuantian
quoted
-----Original Message-----
From: Scott Wood [mailto:oss@buserror.net]
Sent: Saturday, July 09, 2016 5:07 AM
To: Michael Turquette <mturquette@baylibre.com>; Russell King
[off-list ref]; Stephen Boyd [off-list ref];
Viresh
quoted
quoted
Kumar [off-list ref]; Rafael J. Wysocki
[off-list ref]
Cc: linux-clk@vger.kernel.org; linux-pm@vger.kernel.org; linuxppc-
dev@lists.ozlabs.org; Yuantian Tang [off-list ref];
Yang-Leo Li [off-list ref]; Xiaofeng Ren
[off-list ref]
Subject: Re: [PATCH v3 2/2] cpufreq: qoriq: Don't look at clock
implementation details
On Thu, 2016-07-07 at 19:26 -0700, Michael Turquette wrote:
quoted
Quoting Scott Wood (2016-07-06 21:13:23)
quoted
On Wed, 2016-07-06 at 18:30 -0700, Michael Turquette wrote:
devm_clk_get() is a wrapper around clk_get() which is not the
same as of_clk_get(). What device would you pass to
devm_clk_get(), and what name would you pass?
I'm fuzzy on whether or not you get a struct device from a cpufreq
driver. If so, then that would be the one to use. I would hope
that cpufreq drivers model cpus as devices, but I'm really not
sure without looking into the code.
It's not the cpufreq code that provides it, but get_cpu_device()
could be used.
Do you have any comments on the first patch of this set?
Any action on this patch? This patch is still a dependency for cpufreq to work
on all QorIQ platforms.
This patch can be accepted on condition that the attached patch is accepted.
But unfortunately, the attached patch has been sent for a really long time and no feedback.
Regards,
Yuantian