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