From: Viresh Kumar <viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: Rafael Wysocki <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org>,
rob.herring-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
arnd.bergmann-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
nm-l0cyMroinI0@public.gmane.org,
broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
mike.turquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org
Cc: linaro-kernel-cunTk1MwBs8s++Sfvej+rw@public.gmane.org,
linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org,
Sudeep.Holla-5wv7dgnIgG8@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
viswanath.puttagunta-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
ta.omasab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
kesavan.abhilash-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org,
Viresh Kumar
<viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: [PATCH V4 1/3] OPP: Redefine bindings to overcome shortcomings
Date: Thu, 30 Apr 2015 17:37:59 +0530 [thread overview]
Message-ID: <d225e73f183e01fa0b71e4b9248b6a19a3f7d697.1430394884.git.viresh.kumar@linaro.org> (raw)
In-Reply-To: <cover.1430394884.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
In-Reply-To: <cover.1430394884.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Current OPP (Operating performance point) DT bindings are proven to be
insufficient at multiple instances.
The shortcomings we are trying to solve here:
- Getting clock sharing information between CPUs. Single shared clock vs
independent clock per core vs shared clock per cluster.
- Support for specifying current levels along with voltages.
- Support for multiple regulators.
- Support for turbo modes.
- Other per OPP settings: transition latencies, disabled status, etc.?
- Expandability of OPPs in future.
This patch introduces new bindings "operating-points-v2" to get these problems
solved. Refer to the bindings for more details.
Signed-off-by: Viresh Kumar <viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
---
Documentation/devicetree/bindings/power/opp.txt | 366 +++++++++++++++++++++++-
1 file changed, 362 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/power/opp.txt b/Documentation/devicetree/bindings/power/opp.txt
index 74499e5033fc..3b67a5c8d965 100644
--- a/Documentation/devicetree/bindings/power/opp.txt
+++ b/Documentation/devicetree/bindings/power/opp.txt
@@ -1,8 +1,366 @@
-* Generic OPP Interface
+Generic OPP (Operating Performance Points) Bindings
+----------------------------------------------------
-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.
+Devices work at voltage-current-frequency triplets and some implementations have
+the liberty of choosing these. These triplets are called Operating Performance
+Points aka OPPs. This document defines bindings for these OPPs applicable across
+wide range of devices. For illustration purpose, this document uses CPU as a
+device.
+
+
+* Property: operating-points-v2
+
+Devices supporting OPPs must set their "operating-points-v2" property with
+phandle to a OPP descriptor in their DT node. The OPP core will use this phandle
+to find the operating points for the device.
+
+
+* OPP Descriptor Node
+
+This describes the OPPs belonging to a device. This node can have following
+properties:
+
+Required properties:
+- compatible: Allow OPPs to express their compatibility. It should be:
+ "operating-points-v2".
+- OPP nodes: One or more OPP nodes describing voltage-current-frequency
+ triplets. Their name isn't significant but their phandle can be used to
+ reference an OPP.
+
+Optional properties:
+- shared-opp: Indicates that device nodes using this OPP descriptor's phandle
+ switch their DVFS state together, i.e. they share clock/voltage/current lines.
+ Missing property means devices have independent clock/voltage/current lines,
+ but they share OPP tables.
+
+
+* OPP Node
+
+This defines voltage-current-frequency triplets along with other related
+properties.
+
+Required properties:
+- opp-khz: Frequency in kHz
+
+Optional properties:
+- opp-microvolt: voltage in micro Volts. It can contain entries for multiple
+ regulators.
+
+ A single regulator's voltage is specified with an array of size one or three.
+ Single entry is for target voltage and three entries are for <target min max>
+ voltages.
+
+ Entries for multiple regulators must be present in the same order as
+ regulators are specified in device's DT node.
+
+- opp-microamp: current in micro Amperes. It can contain entries for multiple
+ regulators.
+
+ A single regulator's current is specified with an array of size one or three.
+ Single entry is for target current and three entries are for <target min max>
+ currents.
+
+ Entries for multiple regulators must be present in the same order as
+ regulators are specified in device's DT node. If few regulators don't provide
+ capability to configure current, then values for then should be marked as
+ zero.
+
+- clock-latency-ns: Specifies the maximum possible transition latency (in
+ nanoseconds) for switching to this OPP from any other OPP.
+- turbo-mode: Marks the OPP to be used only for turbo modes.
+- status: Marks the node enabled/disabled.
+
+Example 1: Single cluster Dual-core ARM cortex A9, switch DVFS states together.
+
+/ {
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu@0 {
+ compatible = "arm,cortex-a9";
+ reg = <0>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 0>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply0>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+
+ cpu@1 {
+ compatible = "arm,cortex-a9";
+ reg = <1>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 0>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply0>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+ };
+
+ cpu0_opp: opp0 {
+ compatible = "operating-points-v2";
+ shared-opp;
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000 975000 985000>;
+ opp-microamp = <70000 75000 85000>;
+ clock-latency-ns = <300000>;
+ };
+ entry01 {
+ opp-khz = <1100000>;
+ opp-microvolt = <980000 1000000 1010000>;
+ opp-microamp = <80000 81000 82000>;
+ clock-latency-ns = <310000>;
+ };
+ entry02 {
+ opp-khz = <1200000>;
+ opp-microvolt = <1025000>;
+ clock-latency-ns = <290000>;
+ turbo-mode;
+ };
+ };
+};
+
+Example 2: Single cluster, Quad-core Qualcom-krait, switches DVFS states
+independently.
+
+/ {
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu@0 {
+ compatible = "qcom,krait";
+ reg = <0>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 0>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply0>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+
+ cpu@1 {
+ compatible = "qcom,krait";
+ reg = <1>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 1>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply1>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+
+ cpu@2 {
+ compatible = "qcom,krait";
+ reg = <2>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 2>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply2>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+
+ cpu@3 {
+ compatible = "qcom,krait";
+ reg = <3>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 3>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply3>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+ };
+
+ cpu0_opp: opp0 {
+ compatible = "operating-points-v2";
+
+ /*
+ * Missing shared-opp property means CPUs switch DVFS states
+ * independently.
+ */
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000 975000 985000>;
+ opp-microamp = <70000 75000 85000>;
+ clock-latency-ns = <300000>;
+ };
+ entry01 {
+ opp-khz = <1100000>;
+ opp-microvolt = <980000 1000000 1010000>;
+ opp-microamp = <80000 81000 82000>;
+ clock-latency-ns = <310000>;
+ };
+ entry02 {
+ opp-khz = <1200000>;
+ opp-microvolt = <1025000>;
+ opp-microamp = <90000;
+ lock-latency-ns = <290000>;
+ turbo-mode;
+ };
+ };
+};
+
+Example 3: Dual-cluster, Dual-core per cluster. CPUs within a cluster switch
+DVFS state together.
+
+/ {
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu@0 {
+ compatible = "arm,cortex-a7";
+ reg = <0>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 0>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply0>;
+ operating-points-v2 = <&cluster0_opp>;
+ };
+
+ cpu@1 {
+ compatible = "arm,cortex-a7";
+ reg = <1>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 0>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply0>;
+ operating-points-v2 = <&cluster0_opp>;
+ };
+
+ cpu@100 {
+ compatible = "arm,cortex-a15";
+ reg = <100>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 1>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply1>;
+ operating-points-v2 = <&cluster1_opp>;
+ };
+
+ cpu@101 {
+ compatible = "arm,cortex-a15";
+ reg = <101>;
+ next-level-cache = <&L2>;
+ clocks = <&clk_controller 1>;
+ clock-names = "cpu";
+ opp-supply = <&cpu_supply1>;
+ operating-points-v2 = <&cluster1_opp>;
+ };
+ };
+
+ cluster0_opp: opp0 {
+ compatible = "operating-points-v2";
+ shared-opp;
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000 975000 985000>;
+ opp-microamp = <70000 75000 85000>;
+ clock-latency-ns = <300000>;
+ };
+ entry01 {
+ opp-khz = <1100000>;
+ opp-microvolt = <980000 1000000 1010000>;
+ opp-microamp = <80000 81000 82000>;
+ clock-latency-ns = <310000>;
+ };
+ entry02 {
+ opp-khz = <1200000>;
+ opp-microvolt = <1025000>;
+ opp-microamp = <90000>;
+ clock-latency-ns = <290000>;
+ turbo-mode;
+ };
+ };
+
+ cluster1_opp: opp1 {
+ compatible = "operating-points-v2";
+ shared-opp;
+
+ entry10 {
+ opp-khz = <1300000>;
+ opp-microvolt = <1045000 1050000 1055000>;
+ opp-microamp = <95000 100000 105000>;
+ clock-latency-ns = <400000>;
+ };
+ entry11 {
+ opp-khz = <1400000>;
+ opp-microvolt = <1075000>;
+ opp-microamp = <100000>;
+ clock-latency-ns = <400000>;
+ };
+ entry12 {
+ opp-khz = <1500000>;
+ opp-microvolt = <1010000 1100000 1110000>;
+ opp-microamp = <95000 100000 105000>;
+ clock-latency-ns = <400000>;
+ turbo-mode;
+ };
+ };
+};
+
+Example 4: Handling multiple regulators
+
+/ {
+ cpus {
+ cpu@0 {
+ compatible = "arm,cortex-a7";
+ ...
+
+ opp-supply = <&cpu_supply0>, <&cpu_supply1>, <&cpu_supply2>;
+ operating-points-v2 = <&cpu0_opp>;
+ };
+ };
+
+ cpu0_opp: opp0 {
+ compatible = "operating-points-v2";
+ shared-opp;
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000>, /* Supply 0 */
+ <960000>, /* Supply 1 */
+ <960000>; /* Supply 2 */
+ opp-microamp = <70000>, /* Supply 0 */
+ <70000>, /* Supply 1 */
+ <70000>; /* Supply 2 */
+ clock-latency-ns = <300000>;
+ };
+
+ /* OR */
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000 975000 985000>, /* Supply 0 */
+ <960000 965000 975000>, /* Supply 1 */
+ <960000 965000 975000>; /* Supply 2 */
+ opp-microamp = <70000 75000 85000>, /* Supply 0 */
+ <70000 75000 85000>, /* Supply 1 */
+ <70000 75000 85000>; /* Supply 2 */
+ clock-latency-ns = <300000>;
+ };
+
+ /* OR */
+
+ entry00 {
+ opp-khz = <1000000>;
+ opp-microvolt = <970000 975000 985000>, /* Supply 0 */
+ <960000 965000 975000>, /* Supply 1 */
+ <960000 965000 975000>; /* Supply 2 */
+ opp-microamp = <70000 75000 85000>, /* Supply 0 */
+ <0 0 0>, /* Supply 1 doesn't support current change */
+ <70000 75000 85000>; /* Supply 2 */
+ clock-latency-ns = <300000>;
+ };
+ };
+};
+
+
+Deprecated Bindings
+-------------------
Properties:
- operating-points: An array of 2-tuples items, and each item consists
--
2.3.0.rc0.44.ga94655d
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-04-30 12:07 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-30 12:07 [PATCH V4 0/3] OPP: Introduce OPP (V2) bindings Viresh Kumar
[not found] ` <cover.1430394884.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-04-30 12:07 ` Viresh Kumar [this message]
[not found] ` <d225e73f183e01fa0b71e4b9248b6a19a3f7d697.1430394884.git.viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-05-04 12:12 ` [PATCH V4 1/3] OPP: Redefine bindings to overcome shortcomings Mark Brown
2015-05-05 10:48 ` Viresh Kumar
2015-05-05 10:57 ` Mark Brown
[not found] ` <20150505105714.GA22845-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-05 11:43 ` Viresh Kumar
2015-05-05 17:12 ` Mark Brown
2015-05-06 6:53 ` Viresh Kumar
2015-05-07 5:52 ` Stephen Boyd
2015-05-07 11:02 ` Mark Brown
2015-05-07 21:18 ` Stephen Boyd
2015-05-07 22:18 ` Mark Brown
[not found] ` <20150507221842.GW22845-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-08 6:47 ` Viresh Kumar
2015-05-08 10:58 ` Mark Brown
2015-05-08 11:01 ` Viresh Kumar
2015-05-11 1:07 ` Nishanth Menon
2015-05-12 5:20 ` Viresh Kumar
2015-05-12 19:01 ` Michael Turquette
2015-05-12 19:14 ` Nishanth Menon
2015-05-12 19:41 ` Mark Brown
2015-05-12 19:57 ` Nishanth Menon
2015-05-13 11:54 ` Mark Brown
[not found] ` <20150513115422.GQ3066-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 14:24 ` Nishanth Menon
2015-05-13 15:07 ` Mark Brown
2015-05-13 15:43 ` Nishanth Menon
2015-05-07 12:13 ` Viresh Kumar
2015-05-07 21:30 ` Stephen Boyd
2015-05-08 6:49 ` Viresh Kumar
2015-05-11 1:02 ` Nishanth Menon
2015-05-12 5:16 ` Viresh Kumar
2015-05-12 16:04 ` Nishanth Menon
2015-05-13 5:05 ` Viresh Kumar
2015-05-13 15:00 ` Nishanth Menon
2015-05-13 15:16 ` Mark Brown
2015-05-13 16:14 ` Nishanth Menon
2015-05-13 16:21 ` Mark Brown
2015-05-13 16:34 ` Nishanth Menon
2015-05-12 16:19 ` Felipe Balbi
2015-05-13 4:45 ` Viresh Kumar
2015-05-12 21:42 ` Michael Turquette
2015-05-13 8:55 ` Viresh Kumar
2015-05-13 11:03 ` Mark Brown
2015-05-14 0:32 ` Michael Turquette
[not found] ` <CAKohpokeKtcJdrBcPZBBPR2zfJgpvuM_=wRaX5q1Uto2qx1oHQ@mail.gmail.com>
2015-05-15 14:15 ` Viresh Kumar
2015-05-15 15:43 ` Nishanth Menon
2015-05-15 17:27 ` Rob Herring
2015-05-21 6:02 ` Nishanth Menon
2015-05-22 14:04 ` Viresh Kumar
2015-05-22 16:04 ` Rob Herring
2015-05-22 17:42 ` Nishanth Menon
2015-05-26 5:25 ` Viresh Kumar
2015-05-20 0:51 ` Stephen Boyd
2015-05-20 2:07 ` Viresh Kumar
2015-05-20 19:39 ` Stephen Boyd
2015-05-21 4:33 ` Viresh Kumar
2015-05-25 11:59 ` Viresh Kumar
2015-04-30 12:08 ` [PATCH V4 2/3] OPP: Allow multiple OPP tables to be passed via DT Viresh Kumar
2015-05-12 16:09 ` Nishanth Menon
2015-05-13 4:41 ` Viresh Kumar
2015-05-20 0:52 ` Stephen Boyd
2015-04-30 12:08 ` [PATCH V4 3/3] OPP: Add 'opp-next' in operating-points-v2 bindings Viresh Kumar
2015-05-12 21:47 ` Michael Turquette
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=d225e73f183e01fa0b71e4b9248b6a19a3f7d697.1430394884.git.viresh.kumar@linaro.org \
--to=viresh.kumar-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=Sudeep.Holla-5wv7dgnIgG8@public.gmane.org \
--cc=arnd.bergmann-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=kesavan.abhilash-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=linaro-kernel-cunTk1MwBs8s++Sfvej+rw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mike.turquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=nm-l0cyMroinI0@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org \
--cc=rob.herring-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=santosh.shilimkar-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
--cc=sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=ta.omasab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=viswanath.puttagunta-QSEj5FYQhm4dnm+yROfE0A@public.gmane.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).