devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomasz Figa <tomasz.figa@gmail.com>
To: Eduardo Valentin <eduardo.valentin@ti.com>
Cc: swarren@wwwdotorg.org, pawel.moll@arm.com, mark.rutland@arm.com,
	ian.campbell@citrix.com, rob.herring@calxeda.com,
	linux@roeck-us.net, rui.zhang@intel.com, wni@nvidia.com,
	grant.likely@linaro.org, durgadoss.r@intel.com,
	linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
	lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv9 02/20] thermal: introduce device tree parser
Date: Thu, 14 Nov 2013 14:40:12 +0100	[thread overview]
Message-ID: <25668725.sMcoUCgCKk@flatron> (raw)
In-Reply-To: <5284B478.8090503@ti.com>

On Thursday 14 of November 2013 07:31:04 Eduardo Valentin wrote:
> On 13-11-2013 12:57, Tomasz Figa wrote:
> > Hi Eduardo,
> > 
> 
> Hello Tomaz
> 
> > On Tuesday 12 of November 2013 15:46:04 Eduardo Valentin wrote:
> >> This patch introduces a device tree bindings for
> >> describing the hardware thermal behavior and limits.
> >> Also a parser to read and interpret the data and feed
> >> it in the thermal framework is presented.
> > [snip]
> >> diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt b/Documentation/devicetree/bindings/thermal/thermal.txt
> >> new file mode 100644
> >> index 0000000..59f5bd2
> >> --- /dev/null
> >> +++ b/Documentation/devicetree/bindings/thermal/thermal.txt
> >> @@ -0,0 +1,586 @@
> > [snip]
> >> +* Cooling device nodes
> >> +
> >> +Cooling devices are nodes providing control on power dissipation. There
> >> +are essentially two ways to provide control on power dissipation. First
> >> +is by means of regulating device performance, which is known as passive
> >> +cooling. A typical passive cooling is a CPU that has dynamic voltage and
> >> +frequency scaling (DVFS), and uses lower frequencies as cooling states.
> >> +Second is by means of activating devices in order to remove
> >> +the dissipated heat, which is known as active cooling, e.g. regulating
> >> +fan speeds. In both cases, cooling devices shall have a way to determine
> >> +the state of cooling in which the device is.
> >> +
> >> +Required properties:
> >> +- cooling-min-state:	An integer indicating the smallest
> >> +  Type: unsigned	cooling state accepted. Typically 0.
> >> +  Size: one cell
> > 
> > Could you explain (just in a reply) what a cooling state is and what are
> > the min and max values used for?
> 
> Cooling state is an unsigned integer which represents heat control that
> a cooling device implies.

OK. So you have a cooling device and it can have multiple cooling states,
like a cooling fan that has multiple speed levels. Did I understand this
correctly?

IMHO this should be also explained in the documentation above, possibly
with one or two examples.

> 
> > 
> >> +
> >> +- cooling-max-state:	An integer indicating the largest
> >> +  Type: unsigned	cooling state accepted.
> >> +  Size: one cell
> >> +
> >> +- #cooling-cells:	Used to provide cooling device specific information
> >> +  Type: unsigned	while referring to it. Must be at least 2, in order
> >> +  Size: one cell      	to specify minimum and maximum cooling state used
> >> +			in the reference. The first cell is the minimum
> >> +			cooling state requested and the second cell is
> >> +			the maximum cooling state requested in the reference.
> >> +			See Cooling device maps section below for more details
> >> +			on how consumers refer to cooling devices.
> >> +
> >> +* Trip points
> >> +
> >> +The trip node is a node to describe a point in the temperature domain
> >> +in which the system takes an action. This node describes just the point,
> >> +not the action.
> >> +
> >> +Required properties:
> >> +- temperature:		An integer indicating the trip temperature level,
> >> +  Type: signed		in millicelsius.
> >> +  Size: one cell
> >> +
> >> +- hysteresis:		A low hysteresis value on temperature property (above).
> >> +  Type: unsigned	This is a relative value, in millicelsius.
> >> +  Size: one cell
> > 
> > What about replacing temperature and hysteresis with a single temperature
> > property that can be either one cell for 0 hysteresis or two cells to
> > specify lower and upper range of temperatures?
> 
> What is the problem with using two properties? I think we loose
> representation by gluing two properties into one just because one cell.

Ranges is the representation widely used in other bindings. In addition
I believe a range is more representative - when reading a DTS you don't
need to think whether the hysteresis is in temperature units, percents or
something else and also is less ambiguous, because you have clearly
defined lower and upper bounds in one place.

> 
> > 
> >> +
> >> +- type:			a string containing the trip type. Supported values are:
> >> +	"active":	A trip point to enable active cooling
> >> +	"passive":	A trip point to enable passive cooling
> > 
> > The two above seem to be implying action, as opposed to the general
> > comment about trip points.
> 
> They do not imply action, they specify type of trip.

For me "A trip point to enable active cooling" means that when this trip
point is crossed, active cooling must be enabled. What is it if not
implying action?

> 
> > 
> >> +	"hot":		A trip point to notify emergency
> >> +	"critical":	Hardware not reliable.
> >> +  Type: string
> >> +
> > [snip]
> >> +* Examples
> >> +
> >> +Below are several examples on how to use thermal data descriptors
> >> +using device tree bindings:
> >> +
> >> +(a) - CPU thermal zone
> >> +
> >> +The CPU thermal zone example below describes how to setup one thermal zone
> >> +using one single sensor as temperature source and many cooling devices and
> >> +power dissipation control sources.
> >> +
> >> +#include <dt-bindings/thermal/thermal.h>
> >> +
> >> +cpus {
> >> +	/*
> >> +	 * Here is an example of describing a cooling device for a DVFS
> >> +	 * capable CPU. The CPU node describes its four OPPs.
> >> +	 * The cooling states possible are 0..3, and they are
> >> +	 * used as OPP indexes. The minimum cooling state is 0, which means
> >> +	 * all four OPPs can be available to the system. The maximum
> >> +	 * cooling state is 3, which means only the lowest OPPs (198MHz@0.85V)
> >> +	 * can be available in the system.
> >> +	 */
> >> +	cpu0: cpu@0 {
> >> +		...
> >> +		operating-points = <
> >> +			/* kHz    uV */
> >> +			970000  1200000
> >> +			792000  1100000
> >> +			396000  950000
> >> +			198000  850000
> >> +		>;
> >> +		cooling-min-state = <0>;
> >> +		cooling-max-state = <3>;
> >> +		#cooling-cells = <2>; /* min followed by max */
> > 
> > I believe you don't need the min- and max-state properties here then. Your
> > thermal core can simply query the cpufreq driver (which would be a cooling
> > device here) about the range of states it supports
> 
> This binding is not supposed to be aware of cpufreq, which is Linux
> specific implementation.

I didn't say anything about making the binding aware of cpufreq, but
instead about getting rid of redundancy of data, that can be provided
by respective drivers anyway.

> 
> Besides, the cpufreq layer is populated by data already specified in DT.
> .
> > 
> >> +	};
> >> +	...
> >> +};
> >> +
> >> +&i2c1 {
> >> +	...
> >> +	/*
> >> +	 * A simple fan controller which supports 10 speeds of operation
> >> +	 * (represented as 0-9).
> >> +	 */
> >> +	fan0: fan@0x48 {
> >> +		...
> >> +		cooling-min-state = <0>;
> >> +		cooling-max-state = <9>;
> > 
> > This is similar. The fan driver will probaby know about available
> > fan speed levels and be able to report the range of states to thermal
> > core.
> 
> Then we loose also the flexibility to assign cooling states to trip
> points, as described in this binding.

I don't think you got my point correctly.

Let's say you have a CPU, which has 4 operating points. You don't need
to specify that min state is 0 and max state is 4, because it is implied
by the list of operating points.

Same goes for a fan controller that has, let's say, an 8-bit PWM duty
cycle register, which in turn allows 256 different speed states. This
implies that min state for it is 0 and max state 255 and you don't need
to specify this in DT.

Now, both a CPU and fan controller will have their thermal drivers, which
can report to the thermal core what ranges of cooling states they support,
which again makes it wrong to specify such data in DT.

Best regards,
Tomasz


  reply	other threads:[~2013-11-14 13:40 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-12 19:46 [PATCHv5 00/20] device thermal limits represented in device tree nodes (v5) Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 01/20] thermal: allow registering without .get_temp Eduardo Valentin
2013-11-12 19:46 ` [PATCHv9 02/20] thermal: introduce device tree parser Eduardo Valentin
     [not found]   ` <1384285582-16933-3-git-send-email-eduardo.valentin-l0cyMroinI0@public.gmane.org>
2013-11-13 16:57     ` Tomasz Figa
2013-11-14 11:31       ` Eduardo Valentin
2013-11-14 13:40         ` Tomasz Figa [this message]
2013-11-15 13:19           ` Eduardo Valentin
2013-11-21 14:57             ` Tomasz Figa
2013-11-21 15:48               ` Eduardo Valentin
2013-11-21 16:32                 ` Tomasz Figa
2013-11-22 12:33                   ` Eduardo Valentin
     [not found]                     ` <528F4F1E.60903-l0cyMroinI0@public.gmane.org>
2013-11-25 15:31                       ` Mark Rutland
     [not found]                         ` <20131125153118.GG32081-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2013-11-25 15:40                           ` Eduardo Valentin
2013-11-25 15:41                         ` Eduardo Valentin
2013-11-25 15:14               ` Mark Rutland
2013-11-25 15:34                 ` Eduardo Valentin
2013-11-15  8:07   ` [lm-sensors] " Jean Delvare
2013-11-18  6:04     ` Zhang Rui
2013-11-18 14:45       ` Eduardo Valentin
2013-11-19 14:43         ` Jean Delvare
2013-11-25 15:37   ` Mark Rutland
     [not found]     ` <20131125153721.GH32081-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2013-11-25 15:47       ` Eduardo Valentin
2013-12-31 10:17   ` Wei Ni
     [not found]     ` <52C299A8.4010108-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2014-01-07  2:48       ` Wei Ni
     [not found]         ` <52CB6AE2.2090002-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2014-01-07 11:17           ` Eduardo Valentin
2014-01-08  3:19             ` Wei Ni
2014-01-08  3:24               ` Hu Yaohui
     [not found]                 ` <CAHqbYQvchi3QSgcitUtguFyOJtXhFt5OjcoiSDZnPg9ZyiN4cg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-01-08  4:16                   ` Wei Ni
2014-01-02  2:55   ` Wei Ni
2014-01-02  3:03     ` Wei Ni
2014-01-02  2:59   ` Wei Ni
2014-01-02 17:50     ` Matthew Longnecker
2014-01-06 13:51       ` Mark Rutland
2014-01-06 14:54         ` Eduardo Valentin
2014-01-07  2:44           ` Wei Ni
2014-01-07 12:02             ` Mark Rutland
2014-01-13 21:29             ` Eduardo Valentin
2014-01-14  2:54               ` Wei Ni
2014-01-14 18:48                 ` Eduardo Valentin
2014-01-13 15:37       ` Eduardo Valentin
2014-01-02 17:35   ` Matthew Longnecker
     [not found]     ` <52C5A344.2060908-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2014-01-06 18:52       ` Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 03/20] thermal: core: introduce thermal_of_cooling_device_register Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 04/20] thermal: cpu_cooling: introduce of_cpufreq_cooling_register Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 05/20] cpufreq: cpufreq-cpu0: add dt node parsing for cooling device properties Eduardo Valentin
2013-11-14 13:17   ` Eduardo Valentin
2013-11-14 22:04     ` Rafael J. Wysocki
2013-11-15  4:41   ` viresh kumar
2014-01-12 14:31   ` Zhang, Rui
2014-01-13 15:08     ` Eduardo Valentin
2014-01-14 19:07     ` Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 06/20] hwmon: lm75: expose to thermal fw via DT nodes Eduardo Valentin
2013-11-15  7:43   ` Jean Delvare
2013-11-18 14:27     ` Eduardo Valentin
2013-11-18 16:25       ` Guenter Roeck
2013-11-18 16:40         ` Eduardo Valentin
2013-11-19  9:39       ` Jean Delvare
2013-11-22 14:37         ` Eduardo Valentin
2013-11-23 18:38           ` Jean Delvare
2013-11-12 19:46 ` [PATCHv5 07/20] hwmon: tmp102: " Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 08/20] thermal: ti-soc-thermal: use thermal DT infrastructure Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 09/20] arm: dts: add omap4 CPU thermal data Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 10/20] arm: dts: add omap4430 " Eduardo Valentin
2013-11-20 12:32   ` Pavel Machek
2013-11-21 15:36     ` Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 11/20] arm: dts: add omap4460 " Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 12/20] arm: dts: add cooling properties on omap4430 cpu node Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 13/20] arm: dts: add cooling properties on omap4460 " Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 14/20] arm: dts: add omap5 GPU thermal data Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 15/20] arm: dts: add omap5 CORE " Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 16/20] arm: dts: add omap5 " Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 17/20] arm: dts: add cooling properties on omap5 cpu node Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 18/20] arm: dts: make OMAP443x bandgap node to belong to OCP Eduardo Valentin
2013-11-12 19:46 ` [PATCHv5 19/20] arm: dts: make OMAP4460 " Eduardo Valentin
     [not found] ` <1384285582-16933-1-git-send-email-eduardo.valentin-l0cyMroinI0@public.gmane.org>
2013-11-12 19:46   ` [PATCHv5 20/20] MAINTAINERS: add maintainer entry for thermal bindings Eduardo Valentin
2013-11-12 19:59     ` Olof Johansson
2013-11-12 20:14       ` Eduardo Valentin
2013-11-13  9:42         ` Mark Rutland
2013-11-13 12:17           ` Eduardo Valentin
2013-11-13 14:46           ` Eduardo Valentin
2013-11-14 13:30           ` [PATCHv6 20/20] MAINTAINERS: add thermal bindings entry in thermal domain Eduardo Valentin

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=25668725.sMcoUCgCKk@flatron \
    --to=tomasz.figa@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=durgadoss.r@intel.com \
    --cc=eduardo.valentin@ti.com \
    --cc=grant.likely@linaro.org \
    --cc=ian.campbell@citrix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=lm-sensors@lm-sensors.org \
    --cc=mark.rutland@arm.com \
    --cc=pawel.moll@arm.com \
    --cc=rob.herring@calxeda.com \
    --cc=rui.zhang@intel.com \
    --cc=swarren@wwwdotorg.org \
    --cc=wni@nvidia.com \
    /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).