| From 4a6795d3016b0e66862cdc82464cc0e2911698a6 Mon Sep 17 00:00:00 2001 |
| From: Finley Xiao <finley.xiao@rock-chips.com> |
| Date: Fri, 19 Jun 2020 17:08:25 +0800 |
| Subject: [PATCH] thermal/drivers/cpufreq_cooling: Fix wrong frequency |
| converted from power |
| |
| commit 371a3bc79c11b707d7a1b7a2c938dc3cc042fffb upstream. |
| |
| The function cpu_power_to_freq is used to find a frequency and set the |
| cooling device to consume at most the power to be converted. For example, |
| if the power to be converted is 80mW, and the em table is as follow. |
| struct em_cap_state table[] = { |
| /* KHz mW */ |
| { 1008000, 36, 0 }, |
| { 1200000, 49, 0 }, |
| { 1296000, 59, 0 }, |
| { 1416000, 72, 0 }, |
| { 1512000, 86, 0 }, |
| }; |
| The target frequency should be 1416000KHz, not 1512000KHz. |
| |
| Fixes: 349d39dc5739 ("thermal: cpu_cooling: merge frequency and power tables") |
| Cc: <stable@vger.kernel.org> # v4.13+ |
| Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com> |
| Acked-by: Viresh Kumar <viresh.kumar@linaro.org> |
| Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org> |
| Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> |
| Link: https://lore.kernel.org/r/20200619090825.32747-1-finley.xiao@rock-chips.com |
| Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| [PG: use v5.4.x-stable version instead of mainline.] |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c |
| index 4c5db59a619b..a4baa5d21ecd 100644 |
| --- a/drivers/thermal/cpu_cooling.c |
| +++ b/drivers/thermal/cpu_cooling.c |
| @@ -264,11 +264,11 @@ static u32 cpu_power_to_freq(struct cpufreq_cooling_device *cpufreq_cdev, |
| int i; |
| struct freq_table *freq_table = cpufreq_cdev->freq_table; |
| |
| - for (i = 1; i <= cpufreq_cdev->max_level; i++) |
| - if (power > freq_table[i].power) |
| + for (i = 0; i < cpufreq_cdev->max_level; i++) |
| + if (power >= freq_table[i].power) |
| break; |
| |
| - return freq_table[i - 1].frequency; |
| + return freq_table[i].frequency; |
| } |
| |
| /** |
| -- |
| 2.27.0 |
| |