thermal: exynos: boost: Automatic enable/disable of BOOST feature (at Exynos4412)
authorLukasz Majewski <l.majewski@samsung.com>
Fri, 20 Dec 2013 14:24:55 +0000 (15:24 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 17 Jan 2014 01:00:45 +0000 (02:00 +0100)
This patch provides auto disable/enable operation for boost. It uses already
present thermal infrastructure to provide BOOST hysteresis.
The TMU data is modified to work properly with or without BOOST.
Hence, the two first trip points with corresponding clip frequencies are
adjusted.

The first one is reduced from 85 to 70 degrees and the clip frequency is
increased to 1.4 GHz from 800 MHz. This trip point is in fact responsible
for providing BOOST hysteresis. When temperature exceeds 70 deg, the maximal
non BOOST frequency for Exynos4412 is imposed.

Since the first trigger level has been "stolen" for BOOST, the second one
needs to be a compromise for the previously used two for non BOOST
configuration. The 95 deg with modified clip freq (to 400 MHz) should provide
a good balance between cooling down the overheated device and throughput on
an acceptable level.

Two last trigger levels are not modified since, they cause platform shutdown
on emergency overheat to happen.

The third trip point passage results in SW managed shut down of the system.
If the last trip point is crossed, the PMU HW generates the power off
signal.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
Acked-by: Eduardo Valentin <eduardo.valentin@ti.com>
Reviewed-by: Zhang Rui <rui.zhang@intel.com>
[rjw: Changelog]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/samsung/exynos_tmu_data.c

index 073c292baa53e12d0bc7c6aef2a8956a81ea4a6d..476b768c633e93f115943e143e07eedf11c7ab46 100644 (file)
@@ -131,8 +131,8 @@ static const struct exynos_tmu_registers exynos4412_tmu_registers = {
 
 #define EXYNOS4412_TMU_DATA \
        .threshold_falling = 10, \
-       .trigger_levels[0] = 85, \
-       .trigger_levels[1] = 103, \
+       .trigger_levels[0] = 70, \
+       .trigger_levels[1] = 95, \
        .trigger_levels[2] = 110, \
        .trigger_levels[3] = 120, \
        .trigger_enable[0] = true, \
@@ -155,12 +155,12 @@ static const struct exynos_tmu_registers exynos4412_tmu_registers = {
        .second_point_trim = 85, \
        .default_temp_offset = 50, \
        .freq_tab[0] = { \
-               .freq_clip_max = 800 * 1000, \
-               .temp_level = 85, \
+               .freq_clip_max = 1400 * 1000, \
+               .temp_level = 70, \
        }, \
        .freq_tab[1] = { \
-               .freq_clip_max = 200 * 1000, \
-               .temp_level = 103, \
+               .freq_clip_max = 400 * 1000, \
+               .temp_level = 95, \
        }, \
        .freq_tab_count = 2, \
        .registers = &exynos4412_tmu_registers, \