Documentation
On this page

Subsystems

CPU and frequency scaling

Eight cores, LK's clocks, and the AP-side DVFS that is written but not on.

Hardware

Eight cores in two clusters: six Cortex-A55 (cores 0 to 5, “LL”) and two big cores (6 and 7) that the tree calls Cortex-A75 and the Android build and the bring-up’s runs identify as Cortex-A76, plus the CCI. The MPIDRs are core << 8. LK leaves the clocks at LL 1866 MHz, big 1085 MHz and CCI 612 MHz, so the big cores run slower than the little ones. The rails are the PMIC’s Vproc11 (big) and Vproc12 (LL and CCI); Vsram follows them in hardware, 100 mV above.

Driver

All eight cores start (the device tree offers cpus=8, the spaced default). mt6781_cpufreq.c is written as the AP-side DVFS: it moves the PLLs and Vproc itself in Linux’s order (voltage first going up, the PLL first going down), over the phone’s own OPP tables, which LK builds from the chip’s efuse bin and mtkloader passes as mp_dvfs_tbl. A governor samples every 16 ms; thermal, Low Power Mode and the boot-args set ceilings; a UI boost raises the little and big clusters for 250 ms after a display or touch signal. It also gives the scheduler a hint to put foreground threads on the big cores once they run fast. Stock Android does this through the MCUPM firmware; that protocol is not used.

Earlier runs started the SSPM firmware’s own CPU DVFS in four steps and ran the big cores at 1530 MHz. That code is not in the current tree.

Device tree

/cpus: cpu0 to cpu7, one homogeneous cluster, reg = core << 8. See Device tree.

Boot-arguments

mp_cpufreq, mp_cpufreq_ll, mp_cpufreq_big, mp_cpufreq_cci, mp_cpufreq_fast, mp_cpufreq_boost, mp_cpufreq_boost_ms, mp_lpm_cpu and mp_dvfs_tbl in the catalogue. The spaced line has cpus=8 and mp_cpufreq=2: manual, the clocks changed only through the USB link.

User space

None. Low Power Mode reaches the driver as a ceiling from the battery service.

Status

device.conf: missing. Eight cores run at the clocks LK leaves; the governor is not on in the products.

Seen: 8 of 8 cores, 6 x A55 and 2 x A76 (smoke run 2). The notes of the runs on the current tree do not show the governor changing a clock.

Known issues

  • No frequency scaling: the little cores run at 1866 MHz and the big cores at 1085 MHz.
  • With no idle states either, the phone runs warmer than Android at idle (45 to 47 C at the lock screen in run 4, Android 34 to 37 C).

Source files

osfmk/arm64/mt6781_cpufreq.c of the MT6781 layer at 426b4f6; mtk/loader/mtkloader.c of mapple_loader at 2aa5786 for the table’s hand-over.

Applies to realme 8i (spaced), release 1 · Updated 15 November 2026