Difference between revisions of "Thermal Sensors"

From ThinkWiki
Jump to: navigation, search
(ThinkPad {{T43}}, {{T43p}}: 0xC0 on T43 monitors Ethernet chip)
(Utilities for viewing temperatures: zolnott.de links to an ad/spy/crapware site)
Line 73: Line 73:
 
* [http://www.elliptique.net/~ken/kima/ Kima] is a KDE applet that can display the 8 first ACPI sensors as well as the HDAPS sensor.
 
* [http://www.elliptique.net/~ken/kima/ Kima] is a KDE applet that can display the 8 first ACPI sensors as well as the HDAPS sensor.
 
* [http://www.kraus.tk/projects/IBMDoK/ IBMDoK], another KDE applet. Shows 4 specific sensors (out of up to 11). So far only tested at the {{T60}}.
 
* [http://www.kraus.tk/projects/IBMDoK/ IBMDoK], another KDE applet. Shows 4 specific sensors (out of up to 11). So far only tested at the {{T60}}.
* [http://www.zolnott.de/software/applications/ibm-acpi-applet-for-gnome-210-and-higher.html IBM ACPI applet] is a small gnome panel applet which shows the fan speed and thermal informations.
 
 
* There is an [http://munin.projects.linpro.no/wiki/plugin-ibm_acpi ibm_acpi plugin] for [http://munin.projects.linpro.no/ Munin].
 
* There is an [http://munin.projects.linpro.no/wiki/plugin-ibm_acpi ibm_acpi plugin] for [http://munin.projects.linpro.no/ Munin].
 
* [http://sensors-applet.sourceforge.net/ GNOME Sensors Applet] supports ibm_acpi.
 
* [http://sensors-applet.sourceforge.net/ GNOME Sensors Applet] supports ibm_acpi.

Revision as of 20:57, 15 March 2008

This page summarizes known information about the locations and properties of thermal sensors on ThinkPad laptops.

Accessing the sensors

Basic ACPI system temperature sensors

The primary means of accessing the thermal sensors is through the ibm-acpi module. Up to Linux 2.6.19, ibm-acpi supported only 8 sensors, but since Linux 2.6.20-rc2, up to 16 sensors are supported. When the module is loaded, the sensors (some of which may be inactive) are shown in /proc/acpi/ibm/thermal:

# cat /proc/acpi/ibm/thermal
temperatures: 44 41 33 42 33 -128 30 -128

A value of -128 (i.e., 0x80 hex) means the sensor is not connected. For example, above the two -128 values belong to the UltraBay battery, which is not plugged in.

If the ThinkPad supports the extended sensor set, eight more values will be displayed:

# cat /proc/acpi/ibm/thermal
temperatures: 44 41 33 42 33 -128 30 -128 48 50 49 -128 -128 -128 -128 -128

Patch for accessing the extra ACPI sensors through thermal

If you don't use a recent-enough ibm-acpi, you can patch it to make the extra 3 sensors show up on /proc/acpi/ibm/thermal just like the 8 basic sensors, apply the ibm_acpi-extra-thermal.patch (download) kernel patch to ibm-acpi.

Then:

# cat /proc/acpi/ibm/thermal
temperatures: 44 41 33 42 33 -128 30 -128 40 48 43

If you apply this patch in conjunction with tp-fancontrol, you'll need tp-fancontrol 0.2.9 or newer.

Accessing the thermal sensors through ecdump

Load ibm-acpi with the experimental=1 option, and parse /proc/acpi/ibm/ecdump. The 8 basic sensors are on offsets 0x78-0x7f, and the extended sensors (if supported) are on offsets 0xc0-0xc7.

To read the first three extended sensors:

# perl -ne 'm/^EC 0xc0: .(..) .(..) .(..) / or next; print hex($1)." ".hex($2)." ".hex($3)."\n"' < /proc/acpi/ibm/ecdump
40 48 43

Future models might provide additional extra sensors beyond those three. To see all candidates:

# perl -ne 'print join(" ",map(hex,m/\w+/g))."\n" if s/^EC 0xc0://' < /proc/acpi/ibm/ecdump
40 48 43 128 128 128 128 128 0 0 0 0 0 0 0 0
ATTENTION!
ecdump is not a playground, and even just reading it causes side-effects to the ThinkPad. The ibm-acpi maintainer wants to make it clear that he considers it a very dumb idea to use ecdump constantly in a script

HDAPS temperature sensor

The Active Protection System accelerometer also reports a temperature, which is identical to one of the ACPI sensors. The corresponding sensor is actually not inside the HDAPS chip, but fairly close.

# cat /sys/bus/platform/drivers/hdaps/hdaps/temp1
41

Harddisks SMART temperature sensor

The system hard disk temperature can be read through the disk's SMART interface:

# smartctl -A /dev/hda | grep Temperature
194 Temperature_Celsius 0x0022 145 097 000 Old_age Always - 31

Or, for SATA-equipped models running a recent Linux kernel (see Problems with SATA and Linux):

# smartctl -A -d ata /dev/sda | grep Temperature
194 Temperature_Celsius 0x0022 145 097 000 Old_age Always - 31

When the UltraBay Slim HDD Adapter or UltraBay Slim SATA HDD Adapter are used, the second hard disk will typically provide another temperature readout via its SMART interface, analogously to the above.

Reading this sensor will typically cause a drive spin-up and head unload.

Hitachi harddisks SENSE CONDITION temperature sensor

Recent Hitachi disks provide a non-standard SENSE CONDITION command which reads the disk temperature without causing a spin-up or head load. The reported value is the same as when using SMART. This can be invoked, e.g., using # hdparm -H, or the relevant code in tp-fancontrol (download). When using the libata driver, this requires kernel >= 2.6.19-rc1.

Utilities for viewing temperatures

The following utilities display the ThinkPad-specific thermal sensor readouts:

  • The above shell commands.
  • The "Sensors" builtin of GKrellM can show 6 specific ACPI sensors (out of up to 11).
  • Kima is a KDE applet that can display the 8 first ACPI sensors as well as the HDAPS sensor.
  • IBMDoK, another KDE applet. Shows 4 specific sensors (out of up to 11). So far only tested at the T60.
  • There is an ibm_acpi plugin for Munin.
  • GNOME Sensors Applet supports ibm_acpi.

Sensor locations

This information is model specific.

ThinkPad A31

Found by Milos Popovic using cooling spray to cool down components on a completely removed, running motherboard, to locate the sensors. Also reported here.

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU
0x79        2                    Battery        (this one heats up when on battery power)
0x7A        3                    Power          (sensor near power diodes and CPU; heats up when high power consumption, has crosstalk from CPU)
0x7B        4                    Ultrabay 2000 battery?
0x7C        5                    Northbridge    (sensor next to Northbridge, also somewhat near GPU)
0x7D        6                    PCMCIA/ambient (sensor is a National Semiconductor LM75 Digital Temperature Sensor/Thermal Watchdog chip
                                                 next to the 9-pin VGA connector; sits right under PCMCIA slots but doesn't touch)
0x7E        7                    Battery        (this one stays near ambient temperature, even when on battery power)
0x7F        8                    Ultrabay 2000 battery?
0xC0        none                 zero
0xC1        none                 zero
0xC2        none                 zero

The following photos (resolution reduced for server space) show the locations found for the listed temperature sensors.


Photos (click to see full size)
ThinkPad A31 sensor locations on top of motherboard.
ThinkPad A31 sensor locations on bottom of motherboard.

On this A31 systemboard (FRU 26P8398), there is a Maxim MAX1668 5-channel remote/local temperature sensor (4 remote + 1 self temperature) on top of the systemboard, and a National Semiconductor LM75 single-channel "digital temperature sensor and thermal watchdog" chip. It would appear that the LM75 has the ability to hard shutdown the processor (without software intervention) if its temperature exceeds a given threshold. I'm not sure if it is wired for this, nor whether the Thinkpad changes the threshold temperature from the chip's power-up default of 80°C. A software application with drivers on the LM75 webpage is available that claims to allow direct access to the thermal sensor chip (this hasn't been tried, but could be useful in other models to determine if this sensor is somewhere on the MB, and which register it corresponds to). The MAX1668's self-temperature reading does not appear anywhere in the above temperature registers; it's not clear whether it is read at all, and whether it is to be found elsewhere in the EC memory. These two chips (LM75 and MAX1668) account for some of the sensors.

ThinkPad R51

The ibm-acpi documentation includes the report by Thomas Gruber:

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU
0x79        2                    Mini-PCI
0x7A        3                    HDD
0x7B        4                    GPU
0x7C        5                    System battery
0x7D        6                    UltraBay battery
0x7E        7                    System battery
0x7F        8                    UltraBay battery
0xC0        none                 ?
0xC1        none                 ?
0xC2        none                 ?

ThinkPad T40

The location of one of the sensors is identified here.

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU
0x79        2                    System board under rear left corner of Mini-PCI module
0x7A        3                    ?
0x7B        4                    GPU
0x7C        5                    Battery
0x7D        6                    n/a
0x7E        7                    Battery
0x7F        8                    n/a
0xC0        none                 n/a
0xC1        none                 n/a
0xC2        none                 n/a

ThinkPad T43, T43p

Found by Shmidoax using cooling spray to cool down components and observe the effect on the sensors.

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU
0x79        2                    Between PCMCIA slot and CPU (same as HDAPS module)
0x7A        3                    PCMCIA slot
0x7B        4                    GPU
0x7C        5                    System battery (front left = charging circuit)
0x7D        6                    UltraBay battery?
0x7E        7                    System battery (rear right)
0x7F        8                    UltraBay battery?
0xC0        none                 Bus between Northbridge and DRAM; Ethernet chip
0xC1        none                 Southbridge, WLAN and clock generator (under Mini-PCI card, under touchpad)
0xC2        none                 Power circuitry, on underside of system board under F2 key

Photos (click to see full size)
ThinkPad T43 sensor locations
ThinkPad T43 sensor locations detail
ThinkPad T43/p 26xx Embedded Controller Renesas H8S/2161BV

ThinkPad T60

Found by Marco Kraus for use in IBMDok.

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU 0
0x79        2                    HDD
0x7A        3                    HDD
0x7B        4                    GPU
0x7C        5                    Battery
0x7D        6                    n/a
0x7E        7                    Battery
0x7F        8                    n/a
0xC0        none                 ?
0xC1        none                 ?
0xC2        none                 ?

The CPU thermal sensors seem to be exposed in both /proc/acpi/thermal_zone/THM0/temperature and /proc/acpi/thermal_zone/THM1/temperature, though the latter curiously seems to exist only in this file and nowhere in /proc/acpi/ibm/ecdump.

ThinkPad X31

I figured these out by myself (BDKMPSS), as there are just a few available, this wasn't a huge problem. I verified my presumptions with a contactless thermometer.

EC offset   Index in "thermal"   Location (estimated)
0x78        1                    CPU
0x79        2                    n/a
0x7A        3                    GPU?
0x7B        4                    near or the ICH4M Southbrige, on the back of the Motherboard
0x7C        5                    Battery
0x7D        6                    Extended-Life-Battery; may also UltraBay battery
0x7E        7                    Battery
0x7F        8                    Extended-Life-Battery; may also UltraBay battery
0xC0        none                 n/a
0xC1        none                 n/a
0xC2        none                 n/a

0x7A "GPU?" is pretty hot and seems like the GPU, but as the Chipset and the GPU are cooled with the same heatsink it is difficult to separate them without roasting the machine. However the left and GPU side of the heatsink is much closer to the shown value than the right Chipset side.