Re: [Nouveau] [PATCH] drm/therm/fan: add a fallback if no fan control is specified in the vbios
ping? On Mon, Oct 3, 2016 at 7:22 PM, Martin Peres wrote: > On 29/09/16 03:41, Martin Peres wrote: >> >> This seems to be absolutely necessary for a lot of NV40. >> >> Reported-by: gsgf on IRC/freenode >> Signed-off-by: Martin Peres > > > I of course forgot to tag this patch for stable. The thing has been > broken on some nv40 ... forever? > > > >> --- >> drm/nouveau/nvkm/subdev/therm/base.c | 22 +++--- >> 1 file changed, 19 insertions(+), 3 deletions(-) >> >> diff --git a/drm/nouveau/nvkm/subdev/therm/base.c >> b/drm/nouveau/nvkm/subdev/therm/base.c >> index 8894fee..df949fa 100644 >> --- a/drm/nouveau/nvkm/subdev/therm/base.c >> +++ b/drm/nouveau/nvkm/subdev/therm/base.c >> @@ -64,10 +64,9 @@ nvkm_therm_update_trip(struct nvkm_therm *therm) >> } >> static int >> -nvkm_therm_update_linear(struct nvkm_therm *therm) >> +nvkm_therm_compute_linear_duty(struct nvkm_therm *therm, u8 >> linear_min_temp, >> + u8 linear_max_temp) >> { >> - u8 linear_min_temp = therm->fan->bios.linear_min_temp; >> - u8 linear_max_temp = therm->fan->bios.linear_max_temp; >> u8 temp = therm->func->temp_get(therm); >> u16 duty; >> @@ -85,6 +84,21 @@ nvkm_therm_update_linear(struct nvkm_therm *therm) >> return duty; >> } >> +static int >> +nvkm_therm_update_linear(struct nvkm_therm *therm) >> +{ >> + u8 min = therm->fan->bios.linear_min_temp; >> + u8 max = therm->fan->bios.linear_max_temp; >> + return nvkm_therm_compute_linear_duty(therm, min, max); >> +} >> + >> +static int >> +nvkm_therm_update_linear_fallback(struct nvkm_therm *therm) >> +{ >> + u8 max = therm->bios_sensor.thrs_fan_boost.temp; >> + return nvkm_therm_compute_linear_duty(therm, 30, max); >> +} >> + >> static void >> nvkm_therm_update(struct nvkm_therm *therm, int mode) >> { >> @@ -119,6 +133,8 @@ nvkm_therm_update(struct nvkm_therm *therm, int mode) >> case NVBIOS_THERM_FAN_OTHER: >> if (therm->cstate) >> duty = therm->cstate; >> + else >> + duty = >> nvkm_therm_update_linear_fallback(therm); >> poll = false; >> break; >> } > > > > ___ > Nouveau mailing list > Nouveau@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/nouveau ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
Re: [Nouveau] [PATCH] drm/therm/fan: add a fallback if no fan control is specified in the vbios
On 29/09/16 03:41, Martin Peres wrote: This seems to be absolutely necessary for a lot of NV40. Reported-by: gsgf on IRC/freenode Signed-off-by: Martin Peres I of course forgot to tag this patch for stable. The thing has been broken on some nv40 ... forever? --- drm/nouveau/nvkm/subdev/therm/base.c | 22 +++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/drm/nouveau/nvkm/subdev/therm/base.c b/drm/nouveau/nvkm/subdev/therm/base.c index 8894fee..df949fa 100644 --- a/drm/nouveau/nvkm/subdev/therm/base.c +++ b/drm/nouveau/nvkm/subdev/therm/base.c @@ -64,10 +64,9 @@ nvkm_therm_update_trip(struct nvkm_therm *therm) } static int -nvkm_therm_update_linear(struct nvkm_therm *therm) +nvkm_therm_compute_linear_duty(struct nvkm_therm *therm, u8 linear_min_temp, + u8 linear_max_temp) { - u8 linear_min_temp = therm->fan->bios.linear_min_temp; - u8 linear_max_temp = therm->fan->bios.linear_max_temp; u8 temp = therm->func->temp_get(therm); u16 duty; @@ -85,6 +84,21 @@ nvkm_therm_update_linear(struct nvkm_therm *therm) return duty; } +static int +nvkm_therm_update_linear(struct nvkm_therm *therm) +{ + u8 min = therm->fan->bios.linear_min_temp; + u8 max = therm->fan->bios.linear_max_temp; + return nvkm_therm_compute_linear_duty(therm, min, max); +} + +static int +nvkm_therm_update_linear_fallback(struct nvkm_therm *therm) +{ + u8 max = therm->bios_sensor.thrs_fan_boost.temp; + return nvkm_therm_compute_linear_duty(therm, 30, max); +} + static void nvkm_therm_update(struct nvkm_therm *therm, int mode) { @@ -119,6 +133,8 @@ nvkm_therm_update(struct nvkm_therm *therm, int mode) case NVBIOS_THERM_FAN_OTHER: if (therm->cstate) duty = therm->cstate; + else + duty = nvkm_therm_update_linear_fallback(therm); poll = false; break; } ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
[Nouveau] [PATCH] drm/therm/fan: add a fallback if no fan control is specified in the vbios
This seems to be absolutely necessary for a lot of NV40. Reported-by: gsgf on IRC/freenode Signed-off-by: Martin Peres --- drm/nouveau/nvkm/subdev/therm/base.c | 22 +++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/drm/nouveau/nvkm/subdev/therm/base.c b/drm/nouveau/nvkm/subdev/therm/base.c index 8894fee..df949fa 100644 --- a/drm/nouveau/nvkm/subdev/therm/base.c +++ b/drm/nouveau/nvkm/subdev/therm/base.c @@ -64,10 +64,9 @@ nvkm_therm_update_trip(struct nvkm_therm *therm) } static int -nvkm_therm_update_linear(struct nvkm_therm *therm) +nvkm_therm_compute_linear_duty(struct nvkm_therm *therm, u8 linear_min_temp, + u8 linear_max_temp) { - u8 linear_min_temp = therm->fan->bios.linear_min_temp; - u8 linear_max_temp = therm->fan->bios.linear_max_temp; u8 temp = therm->func->temp_get(therm); u16 duty; @@ -85,6 +84,21 @@ nvkm_therm_update_linear(struct nvkm_therm *therm) return duty; } +static int +nvkm_therm_update_linear(struct nvkm_therm *therm) +{ + u8 min = therm->fan->bios.linear_min_temp; + u8 max = therm->fan->bios.linear_max_temp; + return nvkm_therm_compute_linear_duty(therm, min, max); +} + +static int +nvkm_therm_update_linear_fallback(struct nvkm_therm *therm) +{ + u8 max = therm->bios_sensor.thrs_fan_boost.temp; + return nvkm_therm_compute_linear_duty(therm, 30, max); +} + static void nvkm_therm_update(struct nvkm_therm *therm, int mode) { @@ -119,6 +133,8 @@ nvkm_therm_update(struct nvkm_therm *therm, int mode) case NVBIOS_THERM_FAN_OTHER: if (therm->cstate) duty = therm->cstate; + else + duty = nvkm_therm_update_linear_fallback(therm); poll = false; break; } -- 2.8.0 ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau