Bug 4152 - Acpi Thermal report always 40
Summary: Acpi Thermal report always 40
Status: REJECTED INVALID
Alias: None
Product: ACPI
Classification: Unclassified
Component: Power-Thermal (show other bugs)
Hardware: i386 Linux
: P2 normal
Assignee: Konstantin Karasyov
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-02-02 23:50 UTC by pcxz
Modified: 2006-03-15 03:00 UTC (History)
3 users (show)

See Also:
Kernel Version: 2.6.10 -> 2.6.11-rc3
Subsystem:
Regression: ---
Bisected commit-id:


Attachments
ACPI DSDT from Asus A8N-SLI Deluxe (25.62 KB, application/octet-stream)
2005-10-13 21:42 UTC, Robert Hancock
Details

Description pcxz 2005-02-02 23:50:01 UTC
Slackware 10.0 (Suse 9.2 x86_64) 
HP Pavilion t730.it 
 
Hi all, have another report, now have installed gkrellm2 and add Temperatures, 
with my surprise I have always 40
Comment 1 Len Brown 2005-08-17 10:30:35 UTC
This failure is against 2.6.10 - 2.6.11-rc3

Did it work properly before 2.6.10.
Does it work properly with newer kernels, such as 2.6.13?
Comment 2 Robert Hancock 2005-09-22 19:38:19 UTC
This happens for me in 2.6.13 on an Asus A8N-SLI Deluxe with Athlon 64 3500+ on
x86_64.

ACPI: Fan [FAN] (on)
ACPI: CPU0 (power states: C1[C1])
ACPI: Thermal Zone [THRM] (40 C)

The CPU temperature is definitely not always 40C.. It's possible that ACPI/BIOS
is reporting a bogus/fake value for this number..
Comment 3 Thomas Renninger 2005-10-13 00:44:27 UTC
This is probably a BIOS issue. 
I saw a lot machines with: 
if (something_checked){ 
     return 40 degrees statically 
} 
code in the DSDT. 
Could you post acpidmp output please. 
I expect that on some machines temperature is read out another way than through 
ACPI. (It's even on my workstation, also a x86_64...). 
This probably can be closed as invalid/won't fix, after reviewing DSDT. 
Comment 4 Robert Hancock 2005-10-13 21:42:44 UTC
Created attachment 6295 [details]
ACPI DSDT from Asus A8N-SLI Deluxe

Here is the DSDT from my Asus A8N-SLI Deluxe which always reports a temperature
of 40C in the thermal zone.

I'm not seeing any immediately obvious static return value in the decompiled
code, but I don't know AML very well :-)
Comment 5 Thomas Renninger 2005-10-14 02:33:24 UTC
Sorry, but it is quite obvious:

            Method (_TMP, 0, NotSerialized)
            {
                And (SENF, 0x01, Local6)
                If (LEqual (Local6, 0x01))
                {
                    Return (RTMP ())
                }
                Else
                {
                    Return (0x0B86)
                }
            }

Still it seems as if it does not go into the else path or temp should be 22 C?
0xB86 10/Kelvin = 2950 10/Kelvin = 295 Kelvin = 22 C
Have I calculated something wrong?

There is another possiblity:
The method RTMP does not return a temperature value at all in one case.
I have searched in kernel with which value temperature gets initialised, but it
seems to be in deeper stages than thermal.c?

So this is a wontfix/invalid.
However if you like we could remove two if clauses so that the code goes through
where the temperature is evaluated, ignoring some checks which I have no idea
what they are good for (on your own risk of course).
Comment 6 Robert Hancock 2005-10-14 18:05:34 UTC
Yeah, it does not go into the else path in that method - it seems it must go
into RTMP and see this code:

        If (LEqual (SSHU, 0x01))
        {
            Return (0x0C3C)
        }
        Else
        {
            Return (Local0)
        }

The SSHU bit is a field in a system memory operation region, if it is 1 then the
value of 40.2 degrees is always returned. Therefore I assume this must be what
is happening.

Actually Thomas it seems you already figured this out on the exact same board, lol:

http://lists.suse.com/archive/suse-amd64/2005-Feb/0287.html

This is with BIOS 1013, I see that 1014 is out but it is supposed to only
"support new CPUs" so it likely would make no difference here..

Who knows if this is the same cause as the original reporter, however. That
machine seems to have a SiS760 chipset, so it won't be an NVIDIA-specific issue.
Maybe it is Award that is writing this stuff?
Comment 7 Robert Hancock 2005-10-14 18:07:30 UTC
Actually, looking deeper it appears that Pavilion t730 has an K8S-LA board made
by Asus, so maybe it's just their fault :-)
Comment 8 Thomas Renninger 2005-10-15 15:59:44 UTC
I really like to know whether you get sane values if you tweak the code to go
into the else path...
If you use a SUSE system it's easy to modify and override the DSDT.
You find a description how to do that here:
http://powersave.sourceforge.net/powersave/DSDT.html#DSDT (15.2)
Not sure whether it was SUSE 9.2 or 9.3, the Goldmaster kernel had a bug in
overriding the DSDT. Just install the latest update kernel then (what you should
do anyways :) ).

Seems as if those DSDTs are skeletons for a lot of different mainboards/hardware
configurations. Seems as if they check for a specific hardware and if the bit is
set try to get the value from there..., but fixed values for temperature do
never make much sense and error or zero would be nicer...

Just an idea, but I could imagine this could be just fixed (unfortunately not in
kernel as the DSDT is broken) by throwing out the if statement and overriding
the DSDT through initrd.
Comment 9 Konstantin Karasyov 2005-11-18 08:12:15 UTC
It's possible that SSHU bit is set by BIOS - please check if your BIOS has any 
OS-related settings. 'Windows' could be safer.

Note You need to log in before you can comment on or make changes to this bug.