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@linux.intel.com>2021-10-20 01:10:39 +0300
commitc9df367e279ae4e94038c955771ece9d324a42d9 (patch)
tree3636e2d1daa21f143c1481fca61a485ddbdc1420
parent82b4607830605d3c39994df300a8f74255668bac (diff)
downloadlinux-c9df367e279ae4e94038c955771ece9d324a42d9.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,