Temperature sensing on Linux with Ryzen & Asus

My Raven server is all set up, with one glaring exception: temperature sensing.Raven uses an AMD Ryzen 1700X CPU, which was just released in Q1 2017. That CPU sits in an Asus Prime X-370-PRO motherboard, which has functioned well for me (under the latest firmware with EPU OFF; early revisions had stability issues). I know this stuff is new, so software support needs some time to catch up here. Adding to the delay is Asus’ lack of official Linux support; Raven runs unRAID, a fork of Slackware. Still, although my case has plenty of fans, and I do have temperatures from the six hard drives in the case, I figured it was high time to get some actual motherboard readings!

Until today, I could not get any output from lm-sensors whatsoever. I tried loading various kernel drivers (modprobe it87, etc…) to no avail. However, there was one ray of hope from sensors-detect: 

Do you want to scan for Super I/O sensors? (YES/no):
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... Yes
Found unknown chip with ID 0x8665
 (logical device 4 has address 0x290, could be sensors)

I happened upon this Github thread, which suggested I run the key command:

modprobe it87 force_id=0x8628

This tricks sensors into believing it knows that unknown sensor chip. Apparently the id value can be any of these, YMMV: 0x8622, 0x8628, 0x8728, and 0x8732.

Now, running sensors results in:

it8628-isa-0290
Adapter: ISA adapter
in0: +1.45 V (min = +0.85 V, max = +2.87 V)
in1: +2.74 V (min = +0.83 V, max = +0.62 V)
in2: +2.15 V (min = +1.70 V, max = +2.29 V)
in3: +2.21 V (min = +0.19 V, max = +0.56 V)
in4: +0.04 V (min = +1.38 V, max = +0.83 V)
in5: +0.04 V (min = +1.12 V, max = +2.98 V)
in6: +0.04 V (min = +1.16 V, max = +1.43 V)
3VSB: +3.58 V (min = +1.97 V, max = +5.52 V)
Vbat: +3.43 V
in11: +0.40 V
fan1: 904 RPM (min = 11 RPM)
fan3: 857 RPM (min = 22 RPM)
fan5: 0 RPM (min = -1 RPM) ALARM
temp1: +43.0°C (low = -29.0°C, high = -86.0°C) sensor = thermistor
temp2: +30.0°C (low = -33.0°C, high = -17.0°C) sensor = thermistor
temp3: +33.0°C (low = +124.0°C, high = +63.0°C) sensor = thermistor
temp4: +33.0°C
temp6: +33.0°C
intrusion0: ALARM

Voltages (which are apparently incorrect; remember we tricked sensors into thinking it was dealing with a different chip), fan RRMs, and temps!

To load this “trick” at each boot, create the following files as root:

# /etc/modules-load.d/it87.conf
# Load it87 for Ryzen motherboard and CPU sensors
it87

# /etc/modprobe.d/it87.conf
options it87 force_id=0x8628

This will both load the it87 kernel module and apply the chip id “trick.” 

 

Useful links:

https://askubuntu.com/questions/912413/is-there-a-temperature-sensing-utility-for-linux-that-will-read-a-ryzen-1700-cpu/921049

Leave a Reply

Your email address will not be published. Required fields are marked *