summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com>2021-05-20 01:55:31 +0300
committerJae Hyun Yoo <jae.hyun.yoo@intel.com>2021-07-14 20:10:33 +0300
commitdaa38b60c11308c0869d34f337188df8f277211b (patch)
treed5b8bfea075806a42f41daeb5a248f6a1df83b80
parentafa31118717f755478cbdff0047a6b3bcfddba27 (diff)
downloadlinux-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.c13
-rw-r--r--drivers/hwmon/peci-dimmpower.c8
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,