author | Tao Zeng <tao.zeng@amlogic.com> | 2015-09-23 04:46:23 (GMT) |
---|---|---|
committer | Tao Zeng <tao.zeng@amlogic.com> | 2015-09-23 06:57:51 (GMT) |
commit | 7549cf4dd03b0c2bd16a9455152a7d1b251d422b (patch) | |
tree | e018bf2442dbf77b0a42a80ec4f2f9ffe76236b5 | |
parent | 75a30bf9c036ce178e388ce8bc781cd025c8b889 (diff) | |
download | thermal-7549cf4dd03b0c2bd16a9455152a7d1b251d422b.zip thermal-7549cf4dd03b0c2bd16a9455152a7d1b251d422b.tar.gz thermal-7549cf4dd03b0c2bd16a9455152a7d1b251d422b.tar.bz2 |
PD#113199: fix bug of gpu core can't reduce.
change ratio between gpu frequent steps and gpu core steps.
if this ratio is not correct, it will cause core/freq can't
reduce when temperature is high.
Change-Id: If6615951f5995fc40928cca63e96b6b6e287ffe5
-rw-r--r-- | amlogic_thermal.h | 1 | ||||
-rw-r--r-- | amlogic_thermal.o_shipped | 274 | ||||
-rw-r--r-- | amlogic_thermal_module.c | 10 |
3 files changed, 148 insertions, 137 deletions
diff --git a/amlogic_thermal.h b/amlogic_thermal.h index 6f6d256..ec60ac4 100644 --- a/amlogic_thermal.h +++ b/amlogic_thermal.h @@ -106,5 +106,6 @@ void *aml_get_cdevdata(struct thermal_cooling_device *cdev); void aml_set_cdev_update(struct thermal_cooling_device *cdev, bool update); void aml_cdev_lockop(struct thermal_cooling_device *cdev, bool lock); void aml_cdev_get_cur_state(struct thermal_cooling_device *cdev, unsigned long *ret); +int gpu_get_freq_level(int freq); #endif /* __AMLOGIC_THERMAL_H__ */ diff --git a/amlogic_thermal.o_shipped b/amlogic_thermal.o_shipped index 6c0a6ab..7ead449 100644 --- a/amlogic_thermal.o_shipped +++ b/amlogic_thermal.o_shipped @@ -1,19 +1,20 @@ -ELF +ELF €¹àªA €¹C -€¹C -@¹ˆ@¹! - - +€¹C +@¹ˆ@¹! + + ‡* -! - -‡* - - +¥ + +‡* + + - + + @@ -24,158 +25,157 @@ - - + + - + " Œ -8 -_= - - +8 +Y= + + - + - - - - - + + + + + - - - + + + - - + + - - - - - -•" + + + + + +•" 2'Z% - -Ý - -— -Ò -> - -M -M -X -X -^ - -j -:; - - - - - - - - - - - - - - s !z #"!!/11"0v .>=5",0!L=LÕ + +Ý + +— +Ò + +G +G +G +H +X +Y +Y +H +X + +Y +Y +j +:; + + + + + + + + + + + + + s !z #"!!/11"0v .>=5",0!L=LÕ ÓAÞÝ -ÔÓAÖÕAÞÝ +ÔÓAÖÕAÞÝ ž A
C“”•–—˜W ÔÓAÖÕAØ×AÞÝ -
AÔÓAÖÕAÞÝ +
AÔÓAÖÕAÞÝ ˜ ™šI -
AÔÓAÖÕAØ×AÚÙAÞÝ - +
AÔÓAÖÕAØ×AÚÙAÞÝ + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - -F - -N - -$ - -& - - -- -0 - - - - - - -? - - - -f - -A -h - - - - - - - - - + + + + + + + + + + + + + + +$ +& + +6 -u - +9 + + + + + +? + + + + + + + + +e + + +G + + + + + + + + + + + + diff --git a/amlogic_thermal_module.c b/amlogic_thermal_module.c index 3965d06..afd2cac 100644 --- a/amlogic_thermal_module.c +++ b/amlogic_thermal_module.c @@ -69,6 +69,7 @@ EXPORT_SYMBOL(freq_update_flag); static struct aml_virtual_thermal_device cpu_virtual_thermal = {}; static struct aml_virtual_thermal_device gpu_virtual_thermal = {}; static unsigned int report_interval[4] = {}; +static int (*gpu_freq_level)(int ) = NULL; /* CPU Zone information */ #define PANIC_ZONE 4 @@ -206,6 +207,13 @@ static int amlogic_get_crit_temp(struct thermal_zone_device *thermal, return ret; } +int gpu_get_freq_level(int freq) +{ + if (gpu_freq_level) + return gpu_freq_level(freq); + else + return -1; +} /* Bind callback functions for thermal zone */ static int amlogic_bind(struct thermal_zone_device *thermal, @@ -252,6 +260,8 @@ static int amlogic_bind(struct thermal_zone_device *thermal, ret = -EINVAL; pr_info("invalidate pointer %p\n",gpufreq_dev->get_gpu_freq_level); goto out; + } else { + gpu_freq_level = gpufreq_dev->get_gpu_freq_level; } pdata->tmp_trip[i].gpu_lower_level=gpufreq_dev->get_gpu_freq_level(pdata->tmp_trip[i].gpu_upper_freq); pdata->tmp_trip[i].gpu_upper_level=gpufreq_dev->get_gpu_freq_level(pdata->tmp_trip[i].gpu_lower_freq); |