]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
thermal: devfreq_cooling: Fix perf state when calculate dfc res_util
authorYe Zhang <ye.zhang@rock-chips.com>
Thu, 21 Mar 2024 10:21:00 +0000 (18:21 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:37 +0000 (16:19 +0200)
commit a26de34b3c77ae3a969654d94be49e433c947e3b upstream.

The issue occurs when the devfreq cooling device uses the EM power model
and the get_real_power() callback is provided by the driver.

The EM power table is sorted ascending,can't index the table by cooling
device state,so convert cooling state to performance state by
dfc->max_state - dfc->capped_state.

Fixes: 615510fe13bd ("thermal: devfreq_cooling: remove old power model and use EM")
Cc: 5.11+ <stable@vger.kernel.org> # 5.11+
Signed-off-by: Ye Zhang <ye.zhang@rock-chips.com>
Reviewed-by: Dhruva Gole <d-gole@ti.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/thermal/devfreq_cooling.c

index d38a80adec7339fb9be1b291d45e949f0588dfb5..5be79b5d788e5a106716f0ef9c556425c6e68205 100644 (file)
@@ -199,7 +199,7 @@ static int devfreq_cooling_get_requested_power(struct thermal_cooling_device *cd
 
                res = dfc->power_ops->get_real_power(df, power, freq, voltage);
                if (!res) {
-                       state = dfc->capped_state;
+                       state = dfc->max_state - dfc->capped_state;
                        dfc->res_util = dfc->em_pd->table[state].power;
                        dfc->res_util *= SCALE_ERROR_MITIGATION;