IceCold Engine - RestlessGoose/exynos9810-kernel GitHub Wiki
ICE: IceCold Engine
Overview
ICE is a new and very simplistic automatic undervolting system, starting its life on the Exynos 9810 platform. It takes into account the ASV scores of the target device and applies special undervolting preset tables accordingly. ICE doesn't function like a global percentage offset undervolt, rather it subtracts the voltage amounts for each and every frequency of the target component, which is what makes it special.
How does it work?
First it grabs the ASV scores needed. ASV scores are a measure of how good your silicon quality is. The higher the number, the better the quality, thus the luckier you are. The Exynos 9810 platform supports a range of scores 0 to 15.
Now there is a file called icedata.h, which houses all of the undervolting tables that are going to be applied. They are integer arrays, formatted up nice and neat like a table for ease of legibility. Left to right are ASV scores 0 to 15. Top to bottom are the frequencies of the components starting with the highest. The numbers are how many 6250uV (6.25mV) steps are going to be subtracted from the stock voltages.
Then, based on this file's data, we tap into fvmap.c to apply them, and our job is finished. This all happens in the first second of kernel boot time.
Supported devices
All Exynos 9810 devices of the S9 family support ICE: The Galaxy S9, S9+ and Note9. The supported components for undervolting as of icedata revision B06 are: CPU CL0, CPU CL1, G3D, MIF, CP. In other words, CPU little and big clusters, the GPU, the RAM, and the Modem (Communications Processor).
Ranges of ASV score support are the following:
- CL0: 6 to 12
- CL1: 4 to 11
- G3D: 3 to 8
- MIF: 3 to 9
- CP: 5 to 11
Important reminder
The B in icedata's revision means Beta, thus the undervolting tables are continuously being fine tuned to eliminate any instabilities. This is done after feedback to the developer(s). This means we cannot guarantee stability for 100% of devices just yet. Most of the work has revolved around guesswork, research and educated guesses, with uncertainty for the extreme ends of the ASV score spectrums. Obviously, the majority of devices are going to be of average scores which means the most accurate tuning will happen for them. As of CrownTrail v1.3 and v1.4, a lot of the instabilities reported by people have been resolved and cases of weirdness have dropped significantly - CT v1.2 wouldn't even boot for some.
However, if you encounter any issues, or want to help in plotting better undervolt tables, feedback to the developer(s) as always is highly encouraged.