mlxsw: reg: Extend MTMP register with new threshold field
Extend Management Temperature (MTMP) register with new field specifying the maximum temperature threshold. Extend mlxsw_reg_mtmp_unpack() function with two extra arguments, providing high and maximum temperature thresholds. For modules, these thresholds correspond to critical and emergency thresholds that are read from the module's EEPROM. Signed-off-by: Mykola Kostenok <c_mykolak@nvidia.com> Acked-by: Vadim Pasternak <vadimp@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0521a262f0
commit
314dbb19f9
@ -142,7 +142,7 @@ int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int module,
|
||||
err = mlxsw_reg_query(core, MLXSW_REG(mtmp), mtmp_pl);
|
||||
if (err)
|
||||
return err;
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &module_temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &module_temp, NULL, NULL, NULL, NULL);
|
||||
if (!module_temp) {
|
||||
*temp = 0;
|
||||
return 0;
|
||||
|
@ -72,7 +72,7 @@ static ssize_t mlxsw_hwmon_temp_show(struct device *dev,
|
||||
dev_err(mlxsw_hwmon->bus_info->dev, "Failed to query temp sensor\n");
|
||||
return err;
|
||||
}
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL, NULL, NULL);
|
||||
return sprintf(buf, "%d\n", temp);
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ static ssize_t mlxsw_hwmon_temp_max_show(struct device *dev,
|
||||
dev_err(mlxsw_hwmon->bus_info->dev, "Failed to query temp sensor\n");
|
||||
return err;
|
||||
}
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, NULL, &temp_max, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, NULL, &temp_max, NULL, NULL, NULL);
|
||||
return sprintf(buf, "%d\n", temp_max);
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ static int mlxsw_hwmon_module_temp_get(struct device *dev,
|
||||
dev_err(dev, "Failed to query module temperature\n");
|
||||
return err;
|
||||
}
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, p_temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, p_temp, NULL, NULL, NULL, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ static int mlxsw_thermal_get_temp(struct thermal_zone_device *tzdev,
|
||||
dev_err(dev, "Failed to query temp sensor\n");
|
||||
return err;
|
||||
}
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL, NULL, NULL);
|
||||
if (temp > 0)
|
||||
mlxsw_thermal_tz_score_update(thermal, tzdev, thermal->trips,
|
||||
temp);
|
||||
@ -442,7 +442,7 @@ static int mlxsw_thermal_module_temp_get(struct thermal_zone_device *tzdev,
|
||||
*p_temp = (int) temp;
|
||||
return 0;
|
||||
}
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL, NULL, NULL);
|
||||
*p_temp = temp;
|
||||
|
||||
if (!temp)
|
||||
@ -560,7 +560,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL);
|
||||
mlxsw_reg_mtmp_unpack(mtmp_pl, &temp, NULL, NULL, NULL, NULL);
|
||||
if (temp > 0)
|
||||
mlxsw_thermal_tz_score_update(thermal, tzdev, tz->trips, temp);
|
||||
|
||||
|
@ -9463,6 +9463,14 @@ MLXSW_ITEM32(reg, mtmp, sensor_index, 0x00, 0, 12);
|
||||
((s16)((GENMASK(15, 0) + (v_) + 1) \
|
||||
* 125)); })
|
||||
|
||||
/* reg_mtmp_max_operational_temperature
|
||||
* The highest temperature in the nominal operational range. Reading is in
|
||||
* 0.125 Celsius degrees units.
|
||||
* In case of module this is SFF critical temperature threshold.
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32(reg, mtmp, max_operational_temperature, 0x04, 16, 16);
|
||||
|
||||
/* reg_mtmp_temperature
|
||||
* Temperature reading from the sensor. Reading is in 0.125 Celsius
|
||||
* degrees units.
|
||||
@ -9541,7 +9549,9 @@ static inline void mlxsw_reg_mtmp_pack(char *payload, u16 sensor_index,
|
||||
}
|
||||
|
||||
static inline void mlxsw_reg_mtmp_unpack(char *payload, int *p_temp,
|
||||
int *p_max_temp, char *sensor_name)
|
||||
int *p_max_temp, int *p_temp_hi,
|
||||
int *p_max_oper_temp,
|
||||
char *sensor_name)
|
||||
{
|
||||
s16 temp;
|
||||
|
||||
@ -9553,6 +9563,14 @@ static inline void mlxsw_reg_mtmp_unpack(char *payload, int *p_temp,
|
||||
temp = mlxsw_reg_mtmp_max_temperature_get(payload);
|
||||
*p_max_temp = MLXSW_REG_MTMP_TEMP_TO_MC(temp);
|
||||
}
|
||||
if (p_temp_hi) {
|
||||
temp = mlxsw_reg_mtmp_temperature_threshold_hi_get(payload);
|
||||
*p_temp_hi = MLXSW_REG_MTMP_TEMP_TO_MC(temp);
|
||||
}
|
||||
if (p_max_oper_temp) {
|
||||
temp = mlxsw_reg_mtmp_max_operational_temperature_get(payload);
|
||||
*p_max_oper_temp = MLXSW_REG_MTMP_TEMP_TO_MC(temp);
|
||||
}
|
||||
if (sensor_name)
|
||||
mlxsw_reg_mtmp_sensor_name_memcpy_from(payload, sensor_name);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user