Thermal
The LVTS temperature sensors, the thermal policy and the hardware reset.
Hardware
The SoC’s LVTS thermal controller (0x1100b000) has three controllers at +0, +0x100 and +0x200: the little cores (three sensors) and the camera,
the big cores (two) and the modem and GPU (two). A reading is T = -204.65 * raw / 16384 + golden / 2 + 204.65 degrees, with a golden value and nine
per-sensor counts calibrated in the chip’s efuse. Android also reads the PMIC, the application processor and the battery’s temperature.
Driver
Brought up as Linux’s mtk_ts_cpu_noBank probe does (thermal clock on, controller reset, device init, calibration, 20 ms sampling) in
mt6781_cpufreq.c. mtkloader reads the efuse and puts the calibration on the command line (mp_lvts_golden, mp_lvts_r); without it a built-in
set is used. The governor reads the hottest sensor every 256 ms. At mp_therm_trip both clusters step one OPP down at every sample, and below trip - 5 C one
step up each second; at 105 C they go straight to the floor. Without valid readings the clusters are capped at OPP 6. mp_therm_hwreset arms the
controller’s hardware reset at a temperature before any DVFS write; DVFS does not start if arming fails.
Device tree
None of its own: the controller’s base is in the driver.
Boot-arguments
mp_therm, mp_therm_trip, mp_therm_hwreset, mp_lvts_golden and mp_lvts_r in the catalogue. The spaced
line has mp_therm=1, mp_therm_hwreset=117 and mp_therm_trip=75.
User space
None. The USB link’s cpu command reports the governor’s and the thermal state.
Status
device.conf: partial: LVTS reads the CPU sensors with mtkloader’s calibration.
Seen: LVTS read with our calibration: 38 C at launchd and 45 to 47 C idle at the lock screen, peaking at 56 to 59 C (smoke run 4); the hardware reset armed at 117 C and read back, and a trip test with the limit lowered to 55 C under an eight-thread burn that ended in a cold reset, the link lost four seconds in (smoke run 5).
Known issues
- The battery’s temperature is a fixed 25 C under iOS (Android read 33 to 35 C at the time).
- With no frequency scaling or idle states the phone idles warmer than Android; see CPU.
Source files
osfmk/arm64/mt6781_cpufreq.c of the MT6781 layer at 426b4f6; mtk/loader/mtkloader.c of mapple_loader at 2aa5786 (lvts_args).
Applies to realme 8i (spaced), release 1 · Updated 15 November 2026