From: Sudeep KarkadaNagesha <Sudeep.KarkadaNagesha@arm.com>
To: Rob Herring <robherring2@gmail.com>
Cc: "cpufreq@vger.kernel.org" <cpufreq@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"rob.herring@calxeda.com" <rob.herring@calxeda.com>,
Pawel Moll <Pawel.Moll@arm.com>,
Mark Rutland <Mark.Rutland@arm.com>,
Stephen Warren <swarren@wwwdotorg.org>,
"Rafael J. Wysocki" <rjw@sisk.pl>, Nishanth Menon <nm@ti.com>
Subject: Re: [PATCH v2 1/5] PM / OPP: extend DT binding to specify phandle of another node for OPP
Date: Tue, 08 Oct 2013 13:55:16 +0100 [thread overview]
Message-ID: <525400B4.8060203@arm.com> (raw)
In-Reply-To: <5252DAD3.6040903@gmail.com>
On 07/10/13 17:01, Rob Herring wrote:
> On 10/01/2013 08:32 AM, Sudeep KarkadaNagesha wrote:
>> From: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
>>
>> If more than one similar devices share the same operating points(OPPs)
>> being in the same clock domain, currently we need to replicate the
>> OPP entries in all the nodes.
>>
>> This patch extends existing binding by adding a new property named
>> 'operating-points-phandle' to specify the phandle in any device node
>> pointing to another node which contains the actual OPP tuples.
>> This helps to avoid replication if multiple devices share the OPPs.
>>
>> Cc: Rob Herring <rob.herring@calxeda.com>
>> Cc: Pawel Moll <pawel.moll@arm.com>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Stephen Warren <swarren@wwwdotorg.org>
>> Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
>> Cc: Nishanth Menon <nm@ti.com>
>> Signed-off-by: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
>> ---
>> Documentation/devicetree/bindings/power/opp.txt | 161 ++++++++++++++++++++++--
>> 1 file changed, 149 insertions(+), 12 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/power/opp.txt b/Documentation/devicetree/bindings/power/opp.txt
>> index 74499e5..f59b878 100644
>> --- a/Documentation/devicetree/bindings/power/opp.txt
>> +++ b/Documentation/devicetree/bindings/power/opp.txt
>> @@ -4,22 +4,159 @@ SoCs have a standard set of tuples consisting of frequency and
>> voltage pairs that the device will support per voltage domain. These
>> are called Operating Performance Points or OPPs.
>>
>> -Properties:
>> +Required Properties:
>> - operating-points: An array of 2-tuples items, and each item consists
>> of frequency and voltage like <freq-kHz vol-uV>.
>> freq: clock frequency in kHz
>> vol: voltage in microvolt
>>
>> +- operating-points-phandle: phandle to the device tree node which contains
>> + the operating points tuples(recommended to be used if multiple
>> + devices are in the same clock domain and hence share OPPs, as it
>> + avoids replication of OPPs)
>> +
>> + operating-points and operating-points-phandle are mutually exclusive, only
>> + one of them can be present in any device node.
>> +
>> Examples:
>>
>> -cpu@0 {
>> - compatible = "arm,cortex-a9";
>> - reg = <0>;
>> - next-level-cache = <&L2>;
>> - operating-points = <
>> - /* kHz uV */
>> - 792000 1100000
>> - 396000 950000
>> - 198000 850000
>> - >;
>> -};
>> +1. A uniprocessor system (phandle not required)
>> +
>> + cpu0: cpu@0 {
>> + compatible = "arm,cortex-a9";
>> + reg = <0>;
>> + operating-points = <
>> + /* kHz uV */
>> + 792000 1100000
>> + 396000 950000
>> + 198000 850000
>> + >;
>> + };
>> +
>> +2a. Consider a SMP system with 4 CPUs in the same clock domain(no phandle)
>> + Some existing DTs describe homogenous SMP systems by only listing the
>> + OPPs in the cpu@0 node. For compatiblity with existing DTs, an
>> + operating system may handle this case specially.
>> +
>> + cpu0: cpu@0 {
>> + compatible = "arm,cortex-a9";
>> + reg = <0>;
>> + operating-points = <
>> + /* kHz uV */
>> + 792000 1100000
>> + 396000 950000
>> + 198000 850000
>> + >;
>> + };
>> +
>> + cpu1: cpu@1 {
>> + compatible = "arm,cortex-a9";
>> + reg = <1>;
>> + };
>> +
>> + cpu2: cpu@2 {
>> + compatible = "arm,cortex-a9";
>> + reg = <2>;
>> + };
>> +
>> + cpu3: cpu@3 {
>> + compatible = "arm,cortex-a9";
>> + reg = <3>;
>> + };
>> +
>> +2b. Consider a SMP system with 4 CPUs in the same clock domain(with phandle)
>> + If more than one device of same type share the same OPPs, for example
>> + all the CPUs on a SoC or in a single cluster on a SoC, then we can avoid
>> + replicating the OPPs in all the nodes. We can specify the phandle of
>> + the node which contains the OPP tuples instead.
>> +
>> + cpu0: cpu@0 {
>> + compatible = "arm,cortex-a9";
>> + reg = <0>;
>> + operating-points-phandle = <&cpu_opp>;
>> + };
>> +
>> + cpu1: cpu@1 {
>> + compatible = "arm,cortex-a9";
>> + reg = <1>;
>> + operating-points-phandle = <&cpu_opp>;
>> + };
>> +
>> + cpu2: cpu@2 {
>> + compatible = "arm,cortex-a9";
>> + reg = <2>;
>> + operating-points-phandle = <&cpu_opp>;
>> + };
>> +
>> + cpu3: cpu@3 {
>> + compatible = "arm,cortex-a9";
>> + reg = <3>;
>> + operating-points-phandle = <&cpu_opp>;
>> + };
>> +
>> + opps-table {
>> + cpu_opp: cpu_opp {
>> + operating-points = <
>> + /* kHz uV */
>> + 792000 1100000
>> + 396000 950000
>> + 198000 850000
>> + >;
>> + };
>> + ... /* other device OPP nodes */
>
> But this is a subnode of /cpus. IMO, OPPs should be located near what
> they control.
>
No, the idea was to group all the shared OPPs in a container node like clocks or
pinmux. So opps-table in above example need not be subnode of /cpus.
>
>> + }
>> +
>> +4. Consider an AMP(asymmetric multi-processor) sytem with 2 clusters of
>> + CPUs. Each cluster has 2 CPUs and all the CPUs within the cluster share
>> + the clock domain.
>> +
>> + cpu0: cpu@0 {
>> + compatible = "arm,cortex-a15";
>> + reg = <0>;
>> + operating-points-phandle = <&cluster0_opp>;
>> + };
>> +
>> + cpu1: cpu@1 {
>> + compatible = "arm,cortex-a15";
>> + reg = <1>;
>> + operating-points-phandle = <&cluster0_opp>;
>> + };
>> +
>> + cpu2: cpu@100 {
>> + compatible = "arm,cortex-a7";
>> + reg = <100>;
>> + operating-points-phandle = <&cluster1_opp>;
>> + };
>> +
>> + cpu3: cpu@101 {
>> + compatible = "arm,cortex-a7";
>> + reg = <101>;
>> + operating-points-phandle = <&cluster1_opp>;
>> + };
>> +
>> + opps-table {
>> + cluster0_opp: cluster0_opp {
>
> Why not use the cpu topology? Then the operating point can apply to
> cores based on the position in the topology. You don't even need a
> phandle in that case. You can look for OPPs in either a cpu node or in
> the topology.
>
Agreed but few thoughts behind this binding:
1. OPPs are not just cpu specific:
How do we share OPPs for 2 devices in the same clock domain ?
Also moving the OPP into cpu-topo makes parsing specific to cpu.
Currently the OPP library fetches the of_node from the device struct
which is applicable to any devices.
2. Should cpu topology(i.e. cpu-map) just contain the topology info ? and
phandles to these nodes should be used to setup any affinity ?
3. As part of RFC[1][2], it was also discussed that on some SoCs we need
multiple OPP profiles/options which it provides but only one of them can
be used based on the board design. phandle to OPP will also help resolve
that issue.
Let me know your thoughts.
Regards,
Sudeep
[1] http://www.spinics.net/lists/cpufreq/msg06556.html
[2] http://www.spinics.net/lists/cpufreq/msg06685.html
next prev parent reply other threads:[~2013-10-08 12:55 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-01 13:32 [PATCH v2 0/5] PM / OPP: updates to enable sharing OPPs info Sudeep KarkadaNagesha
[not found] ` <1380634382-15609-1-git-send-email-Sudeep.KarkadaNagesha-5wv7dgnIgG8@public.gmane.org>
2013-10-01 13:32 ` [PATCH v2 1/5] PM / OPP: extend DT binding to specify phandle of another node for OPP Sudeep KarkadaNagesha
2013-10-03 12:40 ` Nishanth Menon
[not found] ` <524D65A3.5090906-l0cyMroinI0@public.gmane.org>
2013-10-03 13:05 ` Sudeep KarkadaNagesha
2013-10-03 14:29 ` Nishanth Menon
2013-10-07 12:40 ` Sudeep KarkadaNagesha
2013-10-07 16:01 ` Rob Herring
2013-10-08 12:55 ` Sudeep KarkadaNagesha [this message]
2013-10-17 11:15 ` Sudeep KarkadaNagesha
2013-10-17 13:22 ` Rob Herring
2013-10-17 17:22 ` Sudeep KarkadaNagesha
2013-10-17 18:36 ` Nishanth Menon
2013-10-18 8:40 ` Lorenzo Pieralisi
2013-10-01 13:33 ` [PATCH v2 3/5] PM / OPP: check for existing OPP list when initialising from device tree Sudeep KarkadaNagesha
2013-10-03 4:54 ` Viresh Kumar
[not found] ` <1380634382-15609-4-git-send-email-Sudeep.KarkadaNagesha-5wv7dgnIgG8@public.gmane.org>
2013-10-03 14:25 ` Nishanth Menon
2013-10-01 13:33 ` [PATCH v2 4/5] cpufreq: arm_big_little_dt: enhance OPP error checking Sudeep KarkadaNagesha
2013-10-03 4:55 ` Viresh Kumar
[not found] ` <1380634382-15609-5-git-send-email-Sudeep.KarkadaNagesha-5wv7dgnIgG8@public.gmane.org>
2013-10-03 14:26 ` Nishanth Menon
2013-10-01 13:32 ` [PATCH v2 2/5] PM / OPP: add support to specify phandle of another node for OPP Sudeep KarkadaNagesha
[not found] ` <1380634382-15609-3-git-send-email-Sudeep.KarkadaNagesha-5wv7dgnIgG8@public.gmane.org>
2013-10-01 16:46 ` Sudeep KarkadaNagesha
[not found] ` <524AFC52.8080201-5wv7dgnIgG8@public.gmane.org>
2013-10-03 14:20 ` Nishanth Menon
2013-10-03 15:39 ` Sudeep KarkadaNagesha
2013-10-01 13:33 ` [PATCH v2 5/5] cpufreq: arm_big_little_dt: return success if OPP list already exists Sudeep KarkadaNagesha
[not found] ` <1380634382-15609-6-git-send-email-Sudeep.KarkadaNagesha-5wv7dgnIgG8@public.gmane.org>
2013-10-03 4:54 ` Viresh Kumar
2013-10-16 23:12 ` [PATCH v2 0/5] PM / OPP: updates to enable sharing OPPs info Rafael J. Wysocki
2013-10-17 17:26 ` Sudeep KarkadaNagesha
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=525400B4.8060203@arm.com \
--to=sudeep.karkadanagesha@arm.com \
--cc=Mark.Rutland@arm.com \
--cc=Pawel.Moll@arm.com \
--cc=cpufreq@vger.kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=nm@ti.com \
--cc=rjw@sisk.pl \
--cc=rob.herring@calxeda.com \
--cc=robherring2@gmail.com \
--cc=swarren@wwwdotorg.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).