Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Nov 2007 20:19:31 -0500
From:      "Alexandre \"Sunny\" Kovalenko" <alex.kovalenko@verizon.net>
To:        Sean Bruno <sbruno@miralink.com>
Cc:        freebsd-acpi@FreeBSD.org
Subject:   Re: Temperature sensor is absurd
Message-ID:  <1195694371.57740.24.camel@RabbitsDen>
In-Reply-To: <4744B812.6010602@miralink.com>
References:  <4741D35B.1010509@miralink.com>  <4741EF2F.3060708@miralink.com> <1195660760.56779.28.camel@RabbitsDen> <4744B812.6010602@miralink.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Wed, 2007-11-21 at 14:58 -0800, Sean Bruno wrote:
> Alexandre "Sunny" Kovalenko wrote:
> > On Mon, 2007-11-19 at 12:16 -0800, Sean Bruno wrote:
> >   
> >> Sean Bruno wrote:
> >>     
> >>> Using RELENG_6(updated) on a Shuttle xPC SD30G2, I am seeing the 
> >>> following error message repeating on the console:
> >>>    acpi_tz0: _TMP value is absurd, ignored (-73.0C)
> >>>
> >>> The temperature reported by the BIOS is ~31C for the CPU and ~32C for 
> >>> the System.
> >>>
> >>> I agree that -73C is "absurd" for sure.  The system has the latest 
> >>> BIOS(rev 7).   What should I look at to repair this condition?
> >>>
> >>> I have dumped the ACPI tables
> >>> http://consultcsg.com/shuttle.asl
> >>>       
> > This chunk is somewhat suspicious:
> >
> > Method (RTMP, 0, NotSerialized)
> >     {
> >         Store (GBYT (0x29), Local0)
> >         FindSetLeftBit (Local0, Local1)
> >         If (LEqual (Local1, 0x08))
> >         {
> >             And (Local0, 0x7F, Local0)
> >             Multiply (Local0, 0x0A, Local0)
> >             Subtract (0x0AAC, Local0, Local0)
> >         }
> >         Else
> >         {
> >             Multiply (Local0, 0x0A, Local0)
> >             Add (0x0AAC, Local0, Local0)
> >         }
> >
> >         If (LEqual (SSHU, 0x01))
> >         {
> >             Return (0x0C3C)
> >         }
> >         Else
> >         {
> >             Return (Local0)
> >         }
> >     }
> >
> > Let's say GBYT(29) returned 0xc9, then first branch of the If kicks in and 
> > 0xc9 & 0x7f -> 0x49
> > 0x49 * 0xa -> 0x2da
> > 0xAAC - 0x2da -> 0x7d2
> >
> > 0x7d2 is 200.2K or -73C in ACPI reckoning.
> >
> > Unfortunately, I have no idea why GBYT(0x29) would return value with the bit 0x80 set and what the real 
> > special processing should have been. You can experiment by changing Subtract to Add and trying to see 
> > whether your temperature makes any sense, but this is pretty much wild guess.
> >
> > As usual, if you are playing with the thermal subsystem, I would recommend putting laptop on the cooling
> > pad and taking out the battery. Latter will allow you to shut machine down on the short notice by pulling
> > the power cord out.
> >   
> I fired up an install of Windows XP to use the Shuttle "monitoring" 
> software to see what it was doing.  There appear to be three different 
> temperature settings to query:  CPU, System and Motherboard.  CPU and 
> System are valid (~31C) but Motherboard returns N/A in the Shuttle 
> monitoring app.
I really could not speak to how this utility is working and where does
it take values it reports back to you. According to your ASL, there is
one ACPI thermal zone, with one temperature reporting method (_TMP).
This method could, in turn, walk down three possible paths:
1a. call RTMP() method, we have discussed previously, which either 
    returns some value it reads from somewhere
1b. or returns fixed value, equivalent to 40C
2. return fixed value, equivalent to 21.8C
> 
> 
> I note that there is some other kind of temperature monitor available:
> 
>         Method (STMP, 2, NotSerialized)
Apart from the suggestive method name and placement in the ThermalZone,
I don't know that it is relevant. It is not being called by anything,
that I can tell, and it is not mentioned in ACPI Specification.
>             {
>                 Store (Arg1, DW00)
>                 If (Arg0)
>                 {
>                     STHY (DB00, DB01, DW00)
>                 }
>                 Else
>                 {
>                     STOS (DB00, DB01, DW00)
> 
>                 }
> 
> 
> 
> I assume that these are the two valid value that I would want to gather 
> for this motherboard.  Since they appear to be non-standard, is there a 
> quirk in the acpi code that I can try to get them returned for the 
> temperature?
If you are willing to override your ASL on startup (very easily done
with FreeBSD) and not afraid of some fairly basic programming (using
pretty obscure programming language ;), you can do practically anything
you want. On one of the laptops, I have owned in the past, I have
created full complement of _ACx/_ALx objects complete with the
appropriate FAN devices. However, I was lucky to stumble upon pretty
self-explanatory fan control code in my ASL. YMMV.

In addition to cooling pad and running without battery, I would also
recommend reading relevant portions of the Handbook and Chapter 12
("Thermal management") of the ACPI specification.
> 
> Sean

-- 
Alexandre "Sunny" Kovalenko




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1195694371.57740.24.camel>