diff options
author | Zbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com> | 2021-05-20 01:55:31 +0300 |
---|---|---|
committer | Jae Hyun Yoo <jae.hyun.yoo@intel.com> | 2021-07-14 20:10:33 +0300 |
commit | daa38b60c11308c0869d34f337188df8f277211b (patch) | |
tree | d5b8bfea075806a42f41daeb5a248f6a1df83b80 | |
parent | afa31118717f755478cbdff0047a6b3bcfddba27 (diff) | |
download | linux-daa38b60c11308c0869d34f337188df8f277211b.tar.xz |
hwmon: peci: timestamps for sensors correction
This patch makes timestaps catching to happen just after PECI
transaction. It makes reading more accurate since PECI request can hang
while waiting in PECI driver queue.
Change-Id: I1a356caa59148a5cebcfcdf89211038bfadb40d3
Signed-off-by: Zbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com>
-rw-r--r-- | drivers/hwmon/peci-cpupower.c | 13 | ||||
-rw-r--r-- | drivers/hwmon/peci-dimmpower.c | 8 |
2 files changed, 5 insertions, 16 deletions
diff --git a/drivers/hwmon/peci-cpupower.c b/drivers/hwmon/peci-cpupower.c index 18efa000525b..bed3f6d9ad46 100644 --- a/drivers/hwmon/peci-cpupower.c +++ b/drivers/hwmon/peci-cpupower.c @@ -171,7 +171,6 @@ peci_cpupower_get_power_limit(void *ctx, struct peci_sensor_conf *sensor_conf, { struct peci_cpupower *priv = (struct peci_cpupower *)ctx; union peci_package_power_limit_low power_limit; - ulong jif; int ret; if (!peci_sensor_need_update_with_time(sensor_data, @@ -187,18 +186,16 @@ peci_cpupower_get_power_limit(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } - jif = jiffies; ret = peci_cpupower_read_cpu_pkg_pwr_lim_low(priv->mgr, &power_limit); if (ret) { dev_dbg(priv->dev, "not able to read power limit\n"); return ret; } + peci_sensor_mark_updated(sensor_data); sensor_data->value = peci_pcs_xn_to_munits(power_limit.bits.pwr_lim_1, priv->units.bits.pwr_unit); - peci_sensor_mark_updated_with_time(sensor_data, jif); - dev_dbg(priv->dev, "raw power limit %u, unit %u, power limit %d\n", power_limit.bits.pwr_lim_1, priv->units.bits.pwr_unit, sensor_data->value); @@ -301,7 +298,6 @@ peci_cpupower_read_max_power(void *ctx, struct peci_sensor_conf *sensor_conf, { struct peci_cpupower *priv = (struct peci_cpupower *)ctx; union peci_package_power_info_low power_info; - ulong jif; int ret; if (!peci_sensor_need_update_with_time(sensor_data, @@ -317,17 +313,16 @@ peci_cpupower_read_max_power(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } - jif = jiffies; ret = peci_cpupower_read_cpu_pkg_pwr_info_low(priv->mgr, &power_info); if (ret) { dev_dbg(priv->dev, "not able to read package power info\n"); return ret; } + peci_sensor_mark_updated(sensor_data); sensor_data->value = peci_pcs_xn_to_munits(power_info.bits.pkg_tdp, priv->units.bits.pwr_unit); - peci_sensor_mark_updated_with_time(sensor_data, jif); dev_dbg(priv->dev, "raw max power %u, unit %u, max power %dmW\n", power_info.bits.pkg_tdp, priv->units.bits.pwr_unit, @@ -342,7 +337,6 @@ peci_cpupower_read_min_power(void *ctx, struct peci_sensor_conf *sensor_conf, { struct peci_cpupower *priv = (struct peci_cpupower *)ctx; union peci_package_power_info_low power_info; - ulong jif; int ret; if (!peci_sensor_need_update_with_time(sensor_data, @@ -358,16 +352,15 @@ peci_cpupower_read_min_power(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } - jif = jiffies; ret = peci_cpupower_read_cpu_pkg_pwr_info_low(priv->mgr, &power_info); if (ret) { dev_dbg(priv->dev, "not able to read package power info\n"); return ret; } + peci_sensor_mark_updated(sensor_data); sensor_data->value = peci_pcs_xn_to_munits(power_info.bits.pkg_min_pwr, priv->units.bits.pwr_unit); - peci_sensor_mark_updated_with_time(sensor_data, jif); dev_dbg(priv->dev, "raw min power %u, unit %u, min power %dmW\n", power_info.bits.pkg_min_pwr, priv->units.bits.pwr_unit, diff --git a/drivers/hwmon/peci-dimmpower.c b/drivers/hwmon/peci-dimmpower.c index 4005fa87f829..19b771b079ec 100644 --- a/drivers/hwmon/peci-dimmpower.c +++ b/drivers/hwmon/peci-dimmpower.c @@ -152,7 +152,6 @@ peci_dimmpower_get_power_limit(void *ctx, struct peci_sensor_conf *sensor_conf, { struct peci_dimmpower *priv = (struct peci_dimmpower *)ctx; union peci_dram_power_limit power_limit; - ulong jif; int ret; if (!peci_sensor_need_update_with_time(sensor_data, @@ -168,16 +167,15 @@ peci_dimmpower_get_power_limit(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } - jif = jiffies; ret = peci_dimmpower_read_dram_power_limit(priv->mgr, &power_limit); if (ret) { dev_dbg(priv->dev, "not able to read power limit\n"); return ret; } + peci_sensor_mark_updated(sensor_data); sensor_data->value = peci_pcs_xn_to_munits(power_limit.bits.pp_pwr_lim, priv->units.bits.pwr_unit); - peci_sensor_mark_updated_with_time(sensor_data, jif); dev_dbg(priv->dev, "raw power limit %u, unit %u, power limit %d\n", power_limit.bits.pp_pwr_lim, priv->units.bits.pwr_unit, @@ -246,7 +244,6 @@ peci_dimmpower_read_max_power(void *ctx, struct peci_sensor_conf *sensor_conf, { struct peci_dimmpower *priv = (struct peci_dimmpower *)ctx; union peci_dram_power_info_low power_info; - ulong jif; int ret; if (!peci_sensor_need_update_with_time(sensor_data, @@ -262,7 +259,6 @@ peci_dimmpower_read_max_power(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } - jif = jiffies; ret = peci_pcs_read(priv->mgr, PECI_MBX_INDEX_DDR_PWR_INFO_LOW, PECI_PCS_PARAM_ZERO, &power_info.value); if (ret) { @@ -270,9 +266,9 @@ peci_dimmpower_read_max_power(void *ctx, struct peci_sensor_conf *sensor_conf, return ret; } + peci_sensor_mark_updated(sensor_data); sensor_data->value = peci_pcs_xn_to_munits(power_info.bits.tdp, priv->units.bits.pwr_unit); - peci_sensor_mark_updated_with_time(sensor_data, jif); dev_dbg(priv->dev, "raw max power %u, unit %u, max power %dmW\n", power_info.bits.tdp, priv->units.bits.pwr_unit, |