From: Eduardo Valentin <eduardo.valentin@ti.com>
To: amit daniel kachhap <amit.daniel@samsung.com>
Cc: Eduardo Valentin <eduardo.valentin@ti.com>,
linux-pm@vger.kernel.org, Zhang Rui <rui.zhang@intel.com>,
linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
Kukjin Kim <kgene.kim@samsung.com>,
jonghwa3.lee@samsung.com
Subject: Re: [PATCH V6 16/30] thermal: exynos: Make the zone handling use trip information
Date: Fri, 21 Jun 2013 10:35:57 -0400 [thread overview]
Message-ID: <51C464CD.7070401@ti.com> (raw)
In-Reply-To: <CADGdYn66wqkJcce=4nThkQtZtgt_SdUz1pzuoWz2qHc0cnmXTQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 8204 bytes --]
On 21-06-2013 08:30, amit daniel kachhap wrote:
> Hi
>
> On Thu, Jun 20, 2013 at 4:33 AM, Eduardo Valentin
> <eduardo.valentin@ti.com> wrote:
>> On 17-06-2013 02:46, Amit Daniel Kachhap wrote:
>>> This code simplifies the zone handling to use the trip information passed
>>> by the TMU driver and not the hardcoded macros. This also helps in adding
>>> more zone support.
>>>
>>> Acked-by: Kukjin Kim <kgene.kim@samsung.com>
>>> Acked-by: Jonghwa Lee <jonghwa3.lee@samsung.com>
>>> Signed-off-by: Amit Daniel Kachhap <amit.daniel@samsung.com>
>>> ---
>>> drivers/thermal/samsung/exynos_thermal_common.c | 61 +++++++++++++----------
>>> drivers/thermal/samsung/exynos_thermal_common.h | 3 +-
>>> drivers/thermal/samsung/exynos_tmu.c | 5 ++-
>>> 3 files changed, 40 insertions(+), 29 deletions(-)
>>>
>>> diff --git a/drivers/thermal/samsung/exynos_thermal_common.c b/drivers/thermal/samsung/exynos_thermal_common.c
>>> index 86d39aa..2873ca3 100644
>>> --- a/drivers/thermal/samsung/exynos_thermal_common.c
>>> +++ b/drivers/thermal/samsung/exynos_thermal_common.c
>>> @@ -78,17 +78,22 @@ static int exynos_set_mode(struct thermal_zone_device *thermal,
>>> static int exynos_get_trip_type(struct thermal_zone_device *thermal, int trip,
>>> enum thermal_trip_type *type)
>>> {
>>> - switch (GET_ZONE(trip)) {
>>> - case MONITOR_ZONE:
>>> - case WARN_ZONE:
>>> - *type = THERMAL_TRIP_ACTIVE;
>>> - break;
>>> - case PANIC_ZONE:
>>> - *type = THERMAL_TRIP_CRITICAL;
>>> - break;
>>> - default:
>>> + struct exynos_thermal_zone *th_zone = thermal->devdata;
>>> + int max_trip = th_zone->sensor_conf->trip_data.trip_count;
>>> + int trip_type;
>>> +
>>> + if (trip < 0 || trip >= max_trip)
>>> return -EINVAL;
>>> - }
>>> +
>>> + trip_type = th_zone->sensor_conf->trip_data.trip_type[trip];
>>> +
>>> + if (trip_type == SW_TRIP)
>>> + *type = THERMAL_TRIP_CRITICAL;
>>> + else if (trip_type == THROTTLE_ACTIVE)
>>> + *type = THERMAL_TRIP_ACTIVE;
>>> + else if (trip_type == THROTTLE_PASSIVE)
>>> + *type = THERMAL_TRIP_PASSIVE;
>>> +
>>> return 0;
>>> }
>>>
>>> @@ -97,8 +102,9 @@ static int exynos_get_trip_temp(struct thermal_zone_device *thermal, int trip,
>>> unsigned long *temp)
>>> {
>>> struct exynos_thermal_zone *th_zone = thermal->devdata;
>>> + int max_trip = th_zone->sensor_conf->trip_data.trip_count;
>>>
>>> - if (trip < GET_TRIP(MONITOR_ZONE) || trip > GET_TRIP(PANIC_ZONE))
>>> + if (trip < 0 || trip >= max_trip)
>>> return -EINVAL;
>>>
>>> *temp = th_zone->sensor_conf->trip_data.trip_val[trip];
>>> @@ -112,10 +118,10 @@ static int exynos_get_trip_temp(struct thermal_zone_device *thermal, int trip,
>>> static int exynos_get_crit_temp(struct thermal_zone_device *thermal,
>>> unsigned long *temp)
>>> {
>>> - int ret;
>>> - /* Panic zone */
>>> - ret = exynos_get_trip_temp(thermal, GET_TRIP(PANIC_ZONE), temp);
>>> - return ret;
>>> + struct exynos_thermal_zone *th_zone = thermal->devdata;
>>> + int max_trip = th_zone->sensor_conf->trip_data.trip_count;
>>> + /* Get the temp of highest trip*/
>>> + return exynos_get_trip_temp(thermal, max_trip - 1, temp);
>>> }
>>>
>>> /* Bind callback functions for thermal zone */
>>> @@ -340,19 +346,22 @@ int exynos_register_thermal(struct thermal_sensor_conf *sensor_conf)
>>> return -ENOMEM;
>>>
>>> th_zone->sensor_conf = sensor_conf;
>>> - cpumask_set_cpu(0, &mask_val);
>>> - th_zone->cool_dev[0] = cpufreq_cooling_register(&mask_val);
>>> - if (IS_ERR(th_zone->cool_dev[0])) {
>>> - pr_err("Failed to register cpufreq cooling device\n");
>>> - ret = -EINVAL;
>>> - goto err_unregister;
>>> + if (sensor_conf->cooling_data.freq_clip_count > 0) {
>>> + cpumask_set_cpu(0, &mask_val);
>>> + th_zone->cool_dev[0] = cpufreq_cooling_register(&mask_val);
>>
>> Did you mean th_zone->cool_dev[th_zone->cool_dev_size] ?
> Yes.
>>
>> I think the logic behind the allocation of these cpufreq cooling devices
>> needs to be revisited. You always assigned to cool_dev[0], but you
>> always iterate the array until cool_dev_size. Remember that
>> cool_dev_size now is per th_zone, not global.
> I have kept an array of cooling devices to add other type of cooling
> devices in the same thermal zone in future. For current use case
> although it does not make sense and only one cpufreq cooling device is
> present
I would at least put a TODO mark. This code can easily evolve to a bug.
What it would be better is to have a proper flag/way to say how you want
to do the cooling on a specific TMU. Now you rely on the fact that you
either cool with cpufreq if freq table is present or you don't cool.
This is not scalable to what you are planing to do.
>>
>>> + if (IS_ERR(th_zone->cool_dev[0])) {
>>> + pr_err("Failed to register cpufreq cooling device\n");
>>> + ret = -EINVAL;
>>> + goto err_unregister;
>>> + }
>>> + th_zone->cool_dev_size++;
>>> }
>>> - th_zone->cool_dev_size++;
>>>
>>> - th_zone->therm_dev = thermal_zone_device_register(sensor_conf->name,
>>> - EXYNOS_ZONE_COUNT, 0, th_zone, &exynos_dev_ops, NULL, 0,
>>> - sensor_conf->trip_data.trigger_falling ?
>>> - 0 : IDLE_INTERVAL);
>>> + th_zone->therm_dev = thermal_zone_device_register(
>>> + sensor_conf->name, sensor_conf->trip_data.trip_count,
>>> + 0, th_zone, &exynos_dev_ops, NULL, 0,
>>> + sensor_conf->trip_data.trigger_falling ? 0 :
>>> + IDLE_INTERVAL);
>>>
>>> if (IS_ERR(th_zone->therm_dev)) {
>>> pr_err("Failed to register thermal zone device\n");
>>> diff --git a/drivers/thermal/samsung/exynos_thermal_common.h b/drivers/thermal/samsung/exynos_thermal_common.h
>>> index 1e9a326..dd0077e 100644
>>> --- a/drivers/thermal/samsung/exynos_thermal_common.h
>>> +++ b/drivers/thermal/samsung/exynos_thermal_common.h
>>> @@ -42,8 +42,6 @@
>>> #define GET_ZONE(trip) (trip + 2)
>>> #define GET_TRIP(zone) (zone - 2)
>>>
>>> -#define EXYNOS_ZONE_COUNT 3
>>> -
>>> enum trigger_type {
>>> THROTTLE_ACTIVE = 1,
>>> THROTTLE_PASSIVE,
>>> @@ -68,6 +66,7 @@ struct freq_clip_table {
>>> };
>>> struct thermal_trip_point_conf {
>>> int trip_val[MAX_TRIP_COUNT];
>>> + int trip_type[MAX_TRIP_COUNT];
>>> int trip_count;
>>> unsigned char trigger_falling;
>>> };
>>> diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
>>> index 40e0cfd..acbd295 100644
>>> --- a/drivers/thermal/samsung/exynos_tmu.c
>>> +++ b/drivers/thermal/samsung/exynos_tmu.c
>>> @@ -509,9 +509,12 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>>> pdata->trigger_enable[1] + pdata->trigger_enable[2]+
>>> pdata->trigger_enable[3];
>>>
>>> - for (i = 0; i < exynos_sensor_conf.trip_data.trip_count; i++)
>>> + for (i = 0; i < exynos_sensor_conf.trip_data.trip_count; i++) {
>>> exynos_sensor_conf.trip_data.trip_val[i] =
>>> pdata->threshold + pdata->trigger_levels[i];
>>> + exynos_sensor_conf.trip_data.trip_type[i] =
>>> + pdata->trigger_type[i];
>>> + }
>>>
>>> exynos_sensor_conf.trip_data.trigger_falling = pdata->threshold_falling;
>>>
>>>
>>
>>
>> --
>> You have got to be excited about what you are doing. (L. Lamport)
>>
>> Eduardo Valentin
>>
>
>
--
You have got to be excited about what you are doing. (L. Lamport)
Eduardo Valentin
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]
next prev parent reply other threads:[~2013-06-21 14:36 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-17 6:46 [PATCH V6 00/30] thermal: exynos: Re-structure driver and add support for exynos5440 Amit Daniel Kachhap
2013-06-17 6:46 ` [PATCH V6 01/30] thermal: exynos: Moving exynos thermal files into samsung directory Amit Daniel Kachhap
2013-06-19 18:46 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 02/30] thermal: exynos: Use ARCH_HAS_BANDGAP config to know the supported soc's Amit Daniel Kachhap
2013-06-19 18:46 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 03/30] thermal: exynos: Remove un-necessary CPU_THERMAL dependency Amit Daniel Kachhap
2013-06-19 18:48 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 04/30] thermal: exynos: Bifurcate exynos thermal common and tmu controller code Amit Daniel Kachhap
2013-06-19 18:45 ` Eduardo Valentin
2013-06-21 1:50 ` amit daniel kachhap
2013-06-21 14:30 ` Eduardo Valentin
2013-06-19 19:01 ` Eduardo Valentin
2013-06-21 2:48 ` amit daniel kachhap
2013-06-21 14:23 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 05/30] thermal: exynos: Rename exynos_thermal.c to exynos_tmu.c Amit Daniel Kachhap
2013-06-17 6:46 ` [PATCH V6 06/30] thermal: exynos: Move exynos_thermal.h from include/* to driver/* folder Amit Daniel Kachhap
2013-06-19 19:18 ` Eduardo Valentin
2013-06-19 19:20 ` Eduardo Valentin
2013-06-21 4:34 ` amit daniel kachhap
2013-06-21 4:33 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 07/30] thermal: exynos: Bifurcate exynos tmu driver and configuration data Amit Daniel Kachhap
2013-06-19 19:35 ` Eduardo Valentin
2013-06-19 19:43 ` Eduardo Valentin
2013-06-21 5:06 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 08/30] thermal: exynos: Add missing definations and code cleanup Amit Daniel Kachhap
2013-06-19 19:55 ` Eduardo Valentin
2013-06-21 2:01 ` amit daniel kachhap
2013-06-21 14:31 ` Eduardo Valentin
2013-06-24 3:57 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 09/30] thermal: exynos: Add extra entries in the tmu platform data Amit Daniel Kachhap
2013-06-19 20:19 ` Eduardo Valentin
2013-06-19 20:52 ` Eduardo Valentin
2013-06-21 8:50 ` amit daniel kachhap
2013-06-21 14:26 ` Eduardo Valentin
2013-06-21 6:39 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 10/30] thermal: exynos: Move register definitions from driver to data file Amit Daniel Kachhap
2013-06-19 21:02 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 11/30] thermal: exynos: Support thermal tripping Amit Daniel Kachhap
2013-06-19 22:23 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 12/30] thermal: exynos: Fix to clear only the generated interrupts Amit Daniel Kachhap
2013-06-19 22:26 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 13/30] thermal: exynos: Add support for instance based register/unregister Amit Daniel Kachhap
2013-06-19 22:40 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 14/30] thermal: exynos: Modify private_data to appropriate name driver_data Amit Daniel Kachhap
2013-06-19 22:44 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 15/30] thermal: exynos: Return success even if no cooling data supplied Amit Daniel Kachhap
2013-06-19 22:54 ` Eduardo Valentin
2013-06-19 23:04 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 16/30] thermal: exynos: Make the zone handling use trip information Amit Daniel Kachhap
2013-06-19 23:03 ` Eduardo Valentin
2013-06-21 12:30 ` amit daniel kachhap
2013-06-21 14:35 ` Eduardo Valentin [this message]
2013-06-17 6:46 ` [PATCH V6 17/30] thermal: exynos: Remove non DT based support Amit Daniel Kachhap
2013-06-19 23:09 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 18/30] thermal: exynos: Add support to handle many instances of TMU Amit Daniel Kachhap
2013-06-19 23:27 ` Eduardo Valentin
2013-06-21 12:46 ` amit daniel kachhap
2013-06-21 14:28 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 19/30] thermal: exynos: Add TMU features to check instead of using SOC type Amit Daniel Kachhap
2013-06-19 23:35 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 20/30] thermal: exynos: use device resource management infrastructure Amit Daniel Kachhap
2013-06-19 23:42 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 21/30] ARM: dts: thermal: exynos4: Add documentation for Exynos SoC thermal bindings Amit Daniel Kachhap
2013-06-19 23:45 ` Eduardo Valentin
2013-06-21 14:34 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 22/30] thermal: exynos: Add support to access common register for multistance Amit Daniel Kachhap
2013-06-19 23:53 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 23/30] thermal: exynos: Add driver support for exynos5440 TMU sensor Amit Daniel Kachhap
2013-06-20 2:06 ` Eduardo Valentin
2013-06-21 15:17 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 24/30] thermal: exynos: Add thermal configuration data " Amit Daniel Kachhap
2013-06-20 2:18 ` Eduardo Valentin
2013-06-21 15:19 ` amit daniel kachhap
2013-06-21 15:21 ` amit daniel kachhap
2013-06-17 6:46 ` [PATCH V6 25/30] thermal: exynos: Fix to set the second point correction value Amit Daniel Kachhap
2013-06-20 2:22 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 26/30] thermal: exynos: Add hardware mode thermal calibration support Amit Daniel Kachhap
2013-06-20 2:30 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 27/30] Documentation: thermal: Explain the exynos thermal driver model Amit Daniel Kachhap
2013-06-20 2:32 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 28/30] thermal: exynos: Support for TMU regulator defined at device tree Amit Daniel Kachhap
2013-06-20 2:33 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 29/30] ARM: dts: Add device tree node for exynos5440 TMU controller Amit Daniel Kachhap
2013-06-20 2:37 ` Eduardo Valentin
2013-06-17 6:46 ` [PATCH V6 30/30] arm: exynos: enable ARCH_HAS_BANDGAP Amit Daniel Kachhap
2013-06-19 18:47 ` 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=51C464CD.7070401@ti.com \
--to=eduardo.valentin@ti.com \
--cc=amit.daniel@samsung.com \
--cc=jonghwa3.lee@samsung.com \
--cc=kgene.kim@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=rui.zhang@intel.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).