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