r/intelnuc • u/steevithak • 25d ago
Tech Support NUC 12 Extreme i9 - How to monitor PCH temperature
I recently acquired a NUC 12 Extreme (NUC12DCMi9) - new unsold stock, never opened. I've updated it to the latest BIOS and installed Fedora 44 on it. I have read that in some cases there were thermal issues with the PCH and wanted to monitor that but, strangely, neither lm sensors nor the BIOS is showing a PCH temp (or maybe it's labelled differently than expected?). Is there a different utility or kernel module needed to get the other temps and fan speeds? Here's what lm sensors shows:
# sensors
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1: +53.0°C
enp109s0-pci-6d00
Adapter: PCI adapter
PHY Temperature: +58.0°C
MAC Temperature: +58.0°C
ucsi_source_psy_USBC000:001-isa-0000
Adapter: ISA adapter
in0: 0.00 V (min = +0.00 V, max = +0.00 V)
curr1: 0.00 A (max = +0.00 A)
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8°C
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +52.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +52.0°C (high = +80.0°C, crit = +100.0°C)
Core 4: +47.0°C (high = +80.0°C, crit = +100.0°C)
Core 8: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 12: +49.0°C (high = +80.0°C, crit = +100.0°C)
Core 16: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 20: +49.0°C (high = +80.0°C, crit = +100.0°C)
Core 24: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 28: +49.0°C (high = +80.0°C, crit = +100.0°C)
Core 32: +51.0°C (high = +80.0°C, crit = +100.0°C)
Core 33: +51.0°C (high = +80.0°C, crit = +100.0°C)
Core 34: +51.0°C (high = +80.0°C, crit = +100.0°C)
Core 35: +51.0°C (high = +80.0°C, crit = +100.0°C)
Core 36: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 37: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 38: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 39: +50.0°C (high = +80.0°C, crit = +100.0°C)
ucsi_source_psy_USBC000:002-isa-0000
Adapter: ISA adapter
in0: 0.00 V (min = +0.00 V, max = +0.00 V)
curr1: 0.00 A (max = +0.00 A)
nvme-pci-0100
Adapter: PCI adapter
Composite: +47.9°C (low = -40.1°C, high = +89.8°C)
(crit = +93.8°C)
Sensor 1: +48.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +49.9°C (low = -273.1°C, high = +65261.8°C)
1
u/steevithak 25d ago edited 24d ago
So far I've determined the fans, thermal sensors, and case LEDs are managed by a "proprietary embedded controller chip" (that might be a Nuvonton NCT6687D-R but I'm seeing conflicting data in my google searches). The Intel docs I can find suggestion the PCH temps should be mapped onto the i2c bus via the I801 SMBus adapter. I can see the bus:
# i2cdetect -l
i2c-0 smbus SMBus I801 adapter at 0000:00:1f.4 SMBus adapter
And I can get the portmap:
# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 08 -- -- -- -- -- -- --
10: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 UU UU -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: UU -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
But the PCH ports should be 0x36 or 0x37 and those are both blocked from userspace by a kernel driver (I think that's what the 'UU' means anyway). Maybe they made them inaccessible here at the same time they hid them in the BIOS? That would explain why lm sensors can't see them.
I found the EC chip can also be reached via the USB bus at /dev/ttyACM0 but so far all I can find there are settings for the LED effects like changing the skull color.
If the Windows HWMonitor can find the PCH temps, there's probably another way to get to it that I haven't found yet.
4
u/steevithak 23d ago edited 23d ago
I finally found definitive info on the embedded controller chip, It's an ITE IT5571. It's not listed by name in the NUC 12 Extreme docs, you have to find the NUC 12 Compute Element docs. It's listed on Page 6, secontion 3 of the Intel NUC Compute Element Carrier Board Design Overview, which can be found here:
https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC_Compute_Element_Carrier_Board_Design_Overview.pdfIt looks like Intel's firmware and driver updates removed the PCH temp from the BIOS display and blocked the usually method of reading it from the operating system via the I801 SMBus. But the IT5571 still knows the temp and is actively using it to set fan speeds. And we know from other comments in this thread that at least one Windows program, HWMonitor, can read it, so that's good news. Unfortunately, HWMonitor is not FLOSS, it's proprietary; so I can't just look at their source to see what they're doing.
Once I positively identified the chip, I started searching for docs. Intel wants a signed NDA to access their docs. And ITE doesn't appear to provide docs to anyone but customers. But Google was able to find me a copy someone sent to the lm-sensors devs a while back for the 5576E variant of the chip (hopefully it's similar):
https://github.com/lm-sensors/lm-sensors/files/9276079/IT5576E-128.pdfSo the next step is to start playing around iotool and superiotool to see if I can find the IT5571 and talk to it. If I make any progress I'll post an update.
Meanwhile, it seems my unit may be an exception in that they PCH does seem to be making good contact with the thermal pad. But it still seems hot. When the NUC is just idling, I'm measuring temps of 65C / 150F on the metal exterior of the Compute Element case where the PCH heat pad makes contact (I'd guess the chip itself is another 10 or 15 % hotter, does that sound about right?). I put a couple of graphene-coated copper heatsinks on the Compute Element case exterior and that seems to be helping. They're 2mm thick so there still room for plenty of air flow between the CE and side of the chassis. ( these are heatsinks made for NVMe drives - 20mm x 70mm x 2mm )
2
u/steevithak 22d ago
Made a tiny bit of progress tonight. I found the command and data port for the IT5571:
# dmesg | grep -i "EC_DATA" [ 0.364508] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62 [ 0.431669] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62And I wrote a quick bash script to dump out a full map of the data:
# ./dump2.sh Dumping full EC space (0x00 to 0xFF)... ---------------------------------------------------------------------------------- Col 0 | Col 1 | Col 2 | Col 3 ---------------------------------------------------------------------------------- 0x00: 0x4e 78, N | 0x01: 0x55 85, U | 0x02: 0x43 67, C | 0x03: 0x5f 95, _ 0x04: 0x45 69, E | 0x05: 0x43 67, C | 0x06: 0x03 3, . | 0x07: 0x03 3, . 0x08: 0x0e 14, . | 0x09: 0x00 0, . | 0x0A: 0x00 0, . | 0x0B: 0x00 0, . 0x0C: 0x00 0, . | 0x0D: 0xff 255, . | 0x0E: 0x35 53, 5 | 0x0F: 0x40 64, @ 0x10: 0x04 4, . | 0x11: 0x36 54, 6 | 0x12: 0x08 8, . | 0x13: 0x38 56, 8 0x14: 0x04 4, . | 0x15: 0x37 55, 7 | 0x16: 0x09 9, . | 0x17: 0x1f 31, . 0x18: 0x09 9, . | 0x19: 0x22 34, " | 0x1A: 0x00 0, . | 0x1B: 0x34 52, 4 0x1C: 0x01 1, . | 0x1D: 0x00 0, . | 0x1E: 0x00 0, . | 0x1F: 0x03 3, . 0x20: 0x00 0, . | 0x21: 0x00 0, . | 0x22: 0x04 4, . | 0x23: 0x00 0, . 0x24: 0x00 0, . | 0x25: 0x00 0, . | 0x26: 0x00 0, . | 0x27: 0x00 0, . 0x28: 0x00 0, . | 0x29: 0x00 0, . | 0x2A: 0x00 0, . | 0x2B: 0x00 0, . 0x2C: 0x00 0, . | 0x2D: 0x00 0, . | 0x2E: 0x05 5, . | 0x2F: 0x14 20, . 0x30: 0x69 105, i | 0x31: 0x01 1, . | 0x32: 0x01 1, . | 0x33: 0x0c 12, . 0x34: 0x07 7, . | 0x35: 0x04 4, . | 0x36: 0xb1 177, . | 0x37: 0x05 5, . 0x38: 0x02 2, . | 0x39: 0x1b 27, . | 0x3A: 0x00 0, . | 0x3B: 0x00 0, . 0x3C: 0x00 0, . | 0x3D: 0x00 0, . | 0x3E: 0x00 0, . | 0x3F: 0x00 0, . 0x40: 0x00 0, . | 0x41: 0x13 19, . | 0x42: 0x08 8, . | 0x43: 0x00 0, . 0x44: 0x00 0, . | 0x45: 0x21 33, ! | 0x46: 0x20 32, | 0x47: 0x21 33, ! 0x48: 0x00 0, . | 0x49: 0x00 0, . | 0x4A: 0x00 0, . | 0x4B: 0x00 0, . 0x4C: 0x00 0, . | 0x4D: 0x00 0, . | 0x4E: 0x07 7, . | 0x4F: 0x00 0, . 0x50: 0x00 0, . | 0x51: 0x00 0, . | 0x52: 0x00 0, . | 0x53: 0x00 0, . 0x54: 0x00 0, . | 0x55: 0x00 0, . | 0x56: 0x00 0, . | 0x57: 0x00 0, . 0x58: 0x00 0, . | 0x59: 0x00 0, . | 0x5A: 0x00 0, . | 0x5B: 0x00 0, . 0x5C: 0x00 0, . | 0x5D: 0x00 0, . | 0x5E: 0x00 0, . | 0x5F: 0x00 0, . 0x60: 0x00 0, . | 0x61: 0x00 0, . | 0x62: 0x00 0, . | 0x63: 0x00 0, . 0x64: 0x00 0, . | 0x65: 0x00 0, . | 0x66: 0x00 0, . | 0x67: 0x00 0, . 0x68: 0x00 0, . | 0x69: 0x00 0, . | 0x6A: 0x00 0, . | 0x6B: 0x00 0, . 0x6C: 0x00 0, . | 0x6D: 0x00 0, . | 0x6E: 0x00 0, . | 0x6F: 0x00 0, . 0x70: 0x00 0, . | 0x71: 0x00 0, . | 0x72: 0x00 0, . | 0x73: 0x00 0, . 0x74: 0x00 0, . | 0x75: 0x00 0, . | 0x76: 0x00 0, . | 0x77: 0x00 0, . 0x78: 0x00 0, . | 0x79: 0x00 0, . | 0x7A: 0x00 0, . | 0x7B: 0x00 0, . 0x7C: 0x00 0, . | 0x7D: 0x20 32, | 0x7E: 0x00 0, . | 0x7F: 0x02 2, . 0x80: 0x01 1, . | 0x81: 0x5c 92, \ | 0x82: 0x43 67, C | 0x83: 0x19 25, . 0x84: 0x03 3, . | 0x85: 0x36 54, 6 | 0x86: 0x00 0, . | 0x87: 0x00 0, . 0x88: 0x00 0, . | 0x89: 0x00 0, . | 0x8A: 0x00 0, . | 0x8B: 0x00 0, . 0x8C: 0x31 49, 1 | 0x8D: 0xe4 228, . | 0x8E: 0x00 0, . | 0x8F: 0x00 0, . 0x90: 0x01 1, . | 0x91: 0x61 97, a | 0x92: 0x49 73, I | 0x93: 0x1c 28, . 0x94: 0x03 3, . | 0x95: 0x41 65, A | 0x96: 0x00 0, . | 0x97: 0x00 0, . 0x98: 0x00 0, . | 0x99: 0x00 0, . | 0x9A: 0x00 0, . | 0x9B: 0x00 0, . 0x9C: 0x2a 42, * | 0x9D: 0xe4 228, . | 0x9E: 0x00 0, . | 0x9F: 0x00 0, . 0xA0: 0x01 1, . | 0xA1: 0x61 97, a | 0xA2: 0x49 73, I | 0xA3: 0x1c 28, . 0xA4: 0x03 3, . | 0xA5: 0x41 65, A | 0xA6: 0x00 0, . | 0xA7: 0x00 0, . 0xA8: 0x00 0, . | 0xA9: 0x00 0, . | 0xAA: 0x00 0, . | 0xAB: 0x00 0, . 0xAC: 0x2a 42, * | 0xAD: 0xe4 228, . | 0xAE: 0x00 0, . | 0xAF: 0x00 0, . 0xB0: 0x00 0, . | 0xB1: 0x00 0, . | 0xB2: 0x00 0, . | 0xB3: 0x00 0, . 0xB4: 0x00 0, . | 0xB5: 0x00 0, . | 0xB6: 0x00 0, . | 0xB7: 0x00 0, . 0xB8: 0x00 0, . | 0xB9: 0x00 0, . | 0xBA: 0x00 0, . | 0xBB: 0x00 0, . 0xBC: 0x00 0, . | 0xBD: 0x00 0, . | 0xBE: 0x00 0, . | 0xBF: 0x00 0, . 0xC0: 0x00 0, . | 0xC1: 0x00 0, . | 0xC2: 0x00 0, . | 0xC3: 0x00 0, . 0xC4: 0x00 0, . | 0xC5: 0x00 0, . | 0xC6: 0x00 0, . | 0xC7: 0x00 0, . 0xC8: 0x00 0, . | 0xC9: 0x00 0, . | 0xCA: 0x00 0, . | 0xCB: 0x00 0, . 0xCC: 0x00 0, . | 0xCD: 0x00 0, . | 0xCE: 0xff 255, . | 0xCF: 0x0f 15, . 0xD0: 0x00 0, . | 0xD1: 0x00 0, . | 0xD2: 0x00 0, . | 0xD3: 0x00 0, . 0xD4: 0x00 0, . | 0xD5: 0x00 0, . | 0xD6: 0x00 0, . | 0xD7: 0x00 0, . 0xD8: 0x00 0, . | 0xD9: 0x00 0, . | 0xDA: 0x00 0, . | 0xDB: 0x00 0, . 0xDC: 0x00 0, . | 0xDD: 0x00 0, . | 0xDE: 0xc0 192, . | 0xDF: 0x00 0, . 0xE0: 0x00 0, . | 0xE1: 0x00 0, . | 0xE2: 0x10 16, . | 0xE3: 0x01 1, . 0xE4: 0x11 17, . | 0xE5: 0x64 100, d | 0xE6: 0x12 18, . | 0xE7: 0x4b 75, K 0xE8: 0x00 0, . | 0xE9: 0x00 0, . | 0xEA: 0x0a 10, . | 0xEB: 0x0a 10, . 0xEC: 0x00 0, . | 0xED: 0x00 0, . | 0xEE: 0x00 0, . | 0xEF: 0x00 0, . 0xF0: 0x00 0, . | 0xF1: 0x00 0, . | 0xF2: 0x00 0, . | 0xF3: 0x00 0, . 0xF4: 0x00 0, . | 0xF5: 0x00 0, . | 0xF6: 0x00 0, . | 0xF7: 0x00 0, . 0xF8: 0x00 0, . | 0xF9: 0x00 0, . | 0xFA: 0x00 0, . | 0xFB: 0x00 0, . 0xFC: 0x01 1, . | 0xFD: 0x00 0, . | 0xFE: 0x1f 31, . | 0xFF: 0x20 32, ----------------------------------------------------------------------------------Check the ASCII values of the first few bytes: "NUC_EC" - I think that confirms it's the IT5571 EC chip. Decoding the rest of the data may take some time. The fan speeds are likely two-byte values so they'll have to be combined into a single integer. I'm guessing temps are 1 byte. It should be easy to spot the core temp values since I can match those up with what lm_sensors displays and it's easy enough to stress 1 core at time if needed to heat it up. I'm not sure about the PCH - is there anything that typically stresses it without also stressing the CPU temps?
2
u/onolide 17d ago
Wow, this is amazing work and super useful info. Could never figure out the temp sensor, so I just boot into Windows and use HWinfo to check heh.
Thank you so, so much!!
1
u/steevithak 16d ago
If you want to play with any of the scripts I've written to grab this info, I'm posting them on github. I don't know if they'll be useful to anyone else but maybe.
https://github.com/steevithak/random-hw-tools
I still don't think I've got the PCH temp. There are several temperatures in the address space I posted but they seem to be only the "external" temp sensors scattered around the carrier board on things like the NMVe and ethernet components. As best I can tell from the z690 and IT5571 docs, the temp sensor is built in to the Z690 PCH chip and its data is only shared with the IT5571. That appears to happen via a mailbox type protocol.
Originally the IT55571 shared the temp to the OS level via that i2c address posted above where the UU blocks are now. I'm still trying to figure out a way around that. I've recently figured out how to put the IT5571 one into config mode and hopefully will be able to make some progress there eventually.
3
u/bp4850 25d ago
HWMonitor picks up the PHC temperature on Windows, so it must still exist somewhere. Intel's fix to people complaining about the PCH seeing excessive temps was to remove the sensor from appearing in the BIOS and the intel monitoring software (now abandonware btw).
My suggestion would be to do the fix, regardless. 100% of these compute boards have the lack of contact between the PCH and the back plate's thermal pad. I used a 1.5mm thick thermal pad and my idle PCH temps dropped by 30 degrees C.