Thinkpad Thermals

Alexandre "Sunny" Kovalenko Alex.Kovalenko at verizon.net
Tue Mar 8 18:30:21 PST 2005


On Mon, 2005-03-07 at 02:18 -0500, Jesse Guardiani wrote:
> Jesse Guardiani wrote:
> 
> > Kevin Oberman wrote:
> 
> [...]
> 
> >>> Is 66C acceptable temp for a laptop? It's definitely a better temp, but
> >>> It would really stink if my 1.2ghz had to be run at just 800mhz all the
> >>> time to avoid cooking things.
> >> 
> >> Once again, I can't define "acceptable". It is not so hot as to be
> >> frightening, but it does sound like it's running warmer than I would
> >> expect. Dust? Blocked air intake/outlet?
> > 
> > Absolutely not. I just replaced the motherboard myself. It took 2 hours.
> > I was very careful to examine the heatsink for blockage or excessive dust.
> > It's clean, and the fan spins freely.
> > 
> > 
> >> Those can real impact thermals. And, of course, fan problems can be
> >> a big issue.
> > 
> > I'm starting to think that my fan should be running, but isn't. The
> > whole purpose of this post is to see if I can figure out what went wrong
> > last year when my GPU cooked. If the fan should be running, but isn't,
> > then that certainly gives me a place to start.
> 
> OK, I can't find any fan speed settings in the BIOS. I have LCD settings, CPU
> settings, and performance profiles, but nothing for fan speed. I think the fan
> is running, as I can hear a faint humming from the vent port, even when the
> HDD is sleeping. I can't feel any air on my hand though.
> 
> Where should I start looking to tweak this thing via ACPI?
> 

First, you might want to see if your ASL defines any thermal levels and
what the values are. Since I am unfamiliar with Linux way of doing these
things (and this is FreeBSD mailing list ;), I would use FreeBSD way and
you will have to do the mapping.

On my laptop (with hacked ASL) output of 

	sysctl hw.acpi.thermal

is as follows

	hw.acpi.thermal.min_runtime: 10
	hw.acpi.thermal.polling_rate: 10
	hw.acpi.thermal.tz0.temperature: 48.0C
	hw.acpi.thermal.tz0.active: -1
	hw.acpi.thermal.tz0.thermal_flags: 0
	hw.acpi.thermal.tz0._PSV: 90.0C
	hw.acpi.thermal.tz0._HOT: -1
	hw.acpi.thermal.tz0._CRT: 110.0C
	hw.acpi.thermal.tz0._ACx: 75.0C 70.0C 55.0C -1 -1 -1 -1 -1 -1 -1

Important to your research is '_ACx' line above. It states temperatures
that would trigger change in the cooling levels. In my case, they simply
change speed of both fans simultaneously.

If such line has some sensible values in it and you would like to change
them one way or another, you will have to extract your ASL (see ACPI
section of the handbook), find something that looks like 

Method(_AC0) { Return (KELV(0x4B)) }

and change value it returns. Actual value must be in 1/10th of Kelvin,
so 0C becomes 2733. Remember that lover ACx number corresponds to the
higher temperature. In my case AC0 is set to 75C, AC1 to 70C and AC2 to
55C.                     

In my ASL, following method is used to make Kelvin numbers:

   Method (KELV, 1, NotSerialized)
   {
     Store (Arg0, Local1)
     Multiply (0x0A, Local1, Local1)
     Add (Local1, 0x0AAC, Local1)
     Return (Local1)
   }

If your ASL does not provide thermal levels, with some luck you might
find your fan control directives tucked somewhere else. In my case
(Averatec 3150H) they were called from method responsible for reporting
of the current temperature (_TMP). If you can find them, it would be
pretty simple to cobble together set of _ACx levels. If you are at that
point, let me know and I will send you my ASL before and after the
change so you can see what is involved. Good example of building _ACx
level and corresponding objects exist in thermal section of the ACPI
specification, which IMHO is well written and worth reading prior to
attempting any ASL modifications.

Finally, way to check whether fan is running is to stick small strip of
paper through the fan grill ;)

HTH,
-- 
Alexandre "Sunny" Kovalenko (Олександр Коваленко)



More information about the freebsd-mobile mailing list