Martin Peres
2016-Sep-29 00:41 UTC
[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 <martin.peres at free.fr> --- 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
Martin Peres
2016-Oct-03 23:22 UTC
[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 <martin.peres at free.fr>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; > }
Ilia Mirkin
2017-Feb-11 00:32 UTC
[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 <martin.peres at free.fr> 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 <martin.peres at free.fr> > > > 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 at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/nouveau
Apparently Analagous Threads
- [PATCH] drm/therm/fan: add a fallback if no fan control is specified in the vbios
- [PATCH] drm/nouveau: Don't disable polling in fallback mode
- [RFC PATCH 01/29] therm: split return code and value in nvkm_get_temp
- [PATCH] drm/nouveau: Don't disable polling in fallback mode
- [PATCH AUTOSEL 4.20 36/42] drm/nouveau: Don't disable polling in fallback mode