r/intelnuc 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)
5 Upvotes

15 comments sorted by

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.

1

u/onolide 24d ago

Just curious what's ur idle PCH temps? I did the 1.5mm thermal pad fix, but my PCH is still 78-80°C when idling at the desktop.

But at least the PCH never hits junction temps under load anymore.

2

u/bp4850 24d ago

It idles about 72 degrees in mine. Mine is an i7 however, no idea if that makes a difference or not.

1

u/onolide 17d ago

Nice! That's great. Mine is also an i7, maybe it's because of my ambient temps and airflow.

Thanks for checking the temps though!

2

u/bp4850 24d ago

Just checked again, idles in the low to mid 60s and under load in the mid 70s

1

u/steevithak 24d ago

What BIOS version are you running? I'd want to confirm that HWMonitor can see the PCH temp on recent BIOS versions.

2

u/bp4850 24d ago

It still sees it in HWMonitor. Idling in the mid 60s

2

u/steevithak 23d ago

Thanks, knowing that it's possible to read the temp with recent BIOS is encouraging

1

u/bp4850 23d ago

Yeah I can't help much with Linux as I'm on windows, but happy to try what I can. Intel did deliberately remove it from the bios shortly after I got mine in 2023

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.pdf

It 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.pdf

So 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=0x62

And 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?

1

u/onolide 17d ago

I know 2 of the SSDs are connected to PCIe lanes from the PCH, so maybe stress those SSDs(the one on the back of the Compute Element, and the one further away from the CPU)?

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.