drm/nv40/therm: disable temperature reading if the bios misses some parameters
Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Martin Peres <martin.peres@labri.fr> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
13506e2ab4
commit
ad40d73ef5
|
@ -93,12 +93,10 @@ nv40_temp_get(struct nouveau_therm *therm)
|
||||||
} else
|
} else
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (sensor->slope_div == 0)
|
/* if the slope or the offset is unset, do no use the sensor */
|
||||||
sensor->slope_div = 1;
|
if (!sensor->slope_div || !sensor->slope_mult ||
|
||||||
if (sensor->offset_den == 0)
|
!sensor->offset_num || !sensor->offset_den)
|
||||||
sensor->offset_den = 1;
|
return -ENODEV;
|
||||||
if (sensor->slope_mult < 1)
|
|
||||||
sensor->slope_mult = 1;
|
|
||||||
|
|
||||||
core_temp = core_temp * sensor->slope_mult / sensor->slope_div;
|
core_temp = core_temp * sensor->slope_mult / sensor->slope_div;
|
||||||
core_temp = core_temp + sensor->offset_num / sensor->offset_den;
|
core_temp = core_temp + sensor->offset_num / sensor->offset_den;
|
||||||
|
|
|
@ -34,10 +34,6 @@ nouveau_therm_temp_set_defaults(struct nouveau_therm *therm)
|
||||||
{
|
{
|
||||||
struct nouveau_therm_priv *priv = (void *)therm;
|
struct nouveau_therm_priv *priv = (void *)therm;
|
||||||
|
|
||||||
priv->bios_sensor.slope_mult = 1;
|
|
||||||
priv->bios_sensor.slope_div = 1;
|
|
||||||
priv->bios_sensor.offset_num = 0;
|
|
||||||
priv->bios_sensor.offset_den = 1;
|
|
||||||
priv->bios_sensor.offset_constant = 0;
|
priv->bios_sensor.offset_constant = 0;
|
||||||
|
|
||||||
priv->bios_sensor.thrs_fan_boost.temp = 90;
|
priv->bios_sensor.thrs_fan_boost.temp = 90;
|
||||||
|
@ -60,11 +56,6 @@ nouveau_therm_temp_safety_checks(struct nouveau_therm *therm)
|
||||||
struct nouveau_therm_priv *priv = (void *)therm;
|
struct nouveau_therm_priv *priv = (void *)therm;
|
||||||
struct nvbios_therm_sensor *s = &priv->bios_sensor;
|
struct nvbios_therm_sensor *s = &priv->bios_sensor;
|
||||||
|
|
||||||
if (!priv->bios_sensor.slope_div)
|
|
||||||
priv->bios_sensor.slope_div = 1;
|
|
||||||
if (!priv->bios_sensor.offset_den)
|
|
||||||
priv->bios_sensor.offset_den = 1;
|
|
||||||
|
|
||||||
/* enforce a minimum hysteresis on thresholds */
|
/* enforce a minimum hysteresis on thresholds */
|
||||||
s->thrs_fan_boost.hysteresis = max_t(u8, s->thrs_fan_boost.hysteresis, 2);
|
s->thrs_fan_boost.hysteresis = max_t(u8, s->thrs_fan_boost.hysteresis, 2);
|
||||||
s->thrs_down_clock.hysteresis = max_t(u8, s->thrs_down_clock.hysteresis, 2);
|
s->thrs_down_clock.hysteresis = max_t(u8, s->thrs_down_clock.hysteresis, 2);
|
||||||
|
|
Loading…
Reference in New Issue