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
Possibly Parallel Threads
- [PATCH] drm/therm/fan: add a fallback if no fan control is specified in the vbios
- [RFC PATCH 00/13] Thermal throttling
- [PATCH 00/32] Updated State of my clk patches
- [RFC PATCH 00/29] Current State of my clk patches
- [PATCH] drm/nouveau: Don't disable polling in fallback mode