git: apple_smc: classify DTS vs absolute temperature sensors at attach
Matthew Dillon
dillon at crater.dragonflybsd.org
Wed May 6 09:48:12 PDT 2026
commit 4e78c235da1c81a048a7fe2394444db9c6e224b2
Author: Abdelkader Boudih <dragonflybsd at seuros.com>
Date: Tue May 5 00:59:28 2026 +0000
apple_smc: classify DTS vs absolute temperature sensors at attach
Intel DTS (Distance-to-Tj,max) sensors expose negative millidegree offsets
via sp78 keys. On iMac14,1 (Haswell desktop) TC0E, TC0F, TH1F etc. all
read ~-66000 mC at idle while being valid CPU temperatures when decoded as:
actual = Tj,max + dts_offset
Previous code put all sp78 keys in sc_temp_sensors[], exposing raw -66°C
readings as garbage temperature values.
Changes:
- Read Tj,max from MSR_IA32_TEMPERATURE_TARGET (0x1A2) bits[23:16] at
attach; default 100°C for machines without the MSR or pre-Sandy Bridge
- Probe-read each sp78 key at enumeration time and classify:
- <= -120000 mC: disconnected sentinel (0x8000/0x8100 family) â drop
- < -10000 mC: DTS sensor â store in sc_dts_sensors[]
- >= -10000 mC: absolute sensor â store in sc_temp_sensors[]
- Register DTS sensors under dev.apple_smc.0.temp.dts.<key>, decoded to
absolute millidegrees in apple_smc_dts_sysctl()
- Add runtime sentinel guard in apple_smc_dts_sysctl(): return ENODEV if
a key unexpectedly returns a sentinel value post-attach
Verified across machines:
- iMac12,2 / Macmini5,1 (Sandy Bridge): TC0E/TC0F are absolute, no DTS keys
- iMac14,1 (Haswell desktop): TC0E/TC0F/TH1F are DTS, now correctly decoded
- Macmini8,1 / Coffee Lake: TC0F is absolute, no DTS keys
Summary of changes:
sys/dev/apple/smc/smc.c | 70 +++++++++++++++++++++++++++++++++++++++---
sys/dev/apple/smc/smc.h | 4 +++
sys/dev/apple/smc/smc_sysctl.c | 20 ++++++++++++
3 files changed, 90 insertions(+), 4 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4e78c235da1c81a048a7fe2394444db9c6e224b2
--
DragonFly BSD source repository
More information about the Commits
mailing list