powercap: DTPM: Fix unneeded conversions to micro-Watts
authorLukasz Luba <lukasz.luba@arm.com>
Mon, 27 Nov 2023 09:28:19 +0000 (09:28 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 28 Nov 2023 14:15:14 +0000 (15:15 +0100)
The power values coming from the Energy Model are already in uW.

The PowerCap and DTPM frameworks operate on uW, so all places should
just use the values from the EM.

Fix the code by removing all of the conversion to uW still present in it.

Fixes: ae6ccaa65038 (PM: EM: convert power field to micro-Watts precision and align drivers)
Cc: 5.19+ <stable@vger.kernel.org> # v5.19+
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
[ rjw: Changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/powercap/dtpm_cpu.c
drivers/powercap/dtpm_devfreq.c

index 2ff7717530bf85ad100d4dc7af2c725bf57eba16..8a2f18fa3faf510bed9e140815e45fe7306eeac4 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/of.h>
 #include <linux/pm_qos.h>
 #include <linux/slab.h>
-#include <linux/units.h>
 
 struct dtpm_cpu {
        struct dtpm dtpm;
@@ -104,8 +103,7 @@ static u64 get_pd_power_uw(struct dtpm *dtpm)
                if (pd->table[i].frequency < freq)
                        continue;
 
-               return scale_pd_power_uw(pd_mask, pd->table[i].power *
-                                        MICROWATT_PER_MILLIWATT);
+               return scale_pd_power_uw(pd_mask, pd->table[i].power);
        }
 
        return 0;
@@ -122,11 +120,9 @@ static int update_pd_power_uw(struct dtpm *dtpm)
        nr_cpus = cpumask_weight(&cpus);
 
        dtpm->power_min = em->table[0].power;
-       dtpm->power_min *= MICROWATT_PER_MILLIWATT;
        dtpm->power_min *= nr_cpus;
 
        dtpm->power_max = em->table[em->nr_perf_states - 1].power;
-       dtpm->power_max *= MICROWATT_PER_MILLIWATT;
        dtpm->power_max *= nr_cpus;
 
        return 0;
index 91276761a31d94581abece9e0095febff4d166ea..612c3b59dd5bef6409be8ff95803d38f39e2c90d 100644 (file)
@@ -39,10 +39,8 @@ static int update_pd_power_uw(struct dtpm *dtpm)
        struct em_perf_domain *pd = em_pd_get(dev);
 
        dtpm->power_min = pd->table[0].power;
-       dtpm->power_min *= MICROWATT_PER_MILLIWATT;
 
        dtpm->power_max = pd->table[pd->nr_perf_states - 1].power;
-       dtpm->power_max *= MICROWATT_PER_MILLIWATT;
 
        return 0;
 }
@@ -54,13 +52,10 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)
        struct device *dev = devfreq->dev.parent;
        struct em_perf_domain *pd = em_pd_get(dev);
        unsigned long freq;
-       u64 power;
        int i;
 
        for (i = 0; i < pd->nr_perf_states; i++) {
-
-               power = pd->table[i].power * MICROWATT_PER_MILLIWATT;
-               if (power > power_limit)
+               if (pd->table[i].power > power_limit)
                        break;
        }
 
@@ -68,7 +63,7 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)
 
        dev_pm_qos_update_request(&dtpm_devfreq->qos_req, freq);
 
-       power_limit = pd->table[i - 1].power * MICROWATT_PER_MILLIWATT;
+       power_limit = pd->table[i - 1].power;
 
        return power_limit;
 }
@@ -110,7 +105,7 @@ static u64 get_pd_power_uw(struct dtpm *dtpm)
                if (pd->table[i].frequency < freq)
                        continue;
 
-               power = pd->table[i].power * MICROWATT_PER_MILLIWATT;
+               power = pd->table[i].power;
                power *= status.busy_time;
                power >>= 10;