Overclocking
Overclocking is a way to get more performance out of the system by running it at higher clock speeds than the factory default, usually while putting out more heat and using more power (You can also downclock to possibly reduce power consumption and thermals at the cost of performance). It is highly recommended that you avoid overvolting the device, as that has a high risk of damaging the hardware, hence the warning at the beginning of this page. However, just some slight overclocks without the added voltage can not only improve performance, but carry little risk to your device. It should be noted however that overclocking can cause instability, so you will need to test and see what values work best with your device (There is a silicon lottery for the Pinephone's hardware).
A64
Edit Pinephone DTS
In order to overclock the Pinephone you will have to first convert the DTB file in /boot/dtbs/allwinner/
to a DTS file. You will see sun50i-a64-pinephone-1.2.dtb
, and also two other files with different pinephone mainboard revisions (1.1 and 1.0). You will want to select the correct file for your pinephone (Only choose 1.1 if you have a braveheart, As all other consumer pinephones use the 1.2 DTS).
Once you've found the file, you can run the following command to convert the DTB to DTS:
dtc -I dtb -O dts /boot/dtbs/allwinner/sun50i-a64-pinephone-1.2.dtb -o /boot/dtbs/allwinner/sun50i-a64-pinephone-1.2.dts
Finally, modify the newly converted .dts file and change the clockspeeds you wish to modify. You can simply use a text editor to do so.
To convert back to DTB:
dtc -I dts -O dtb /boot/dtbs/allwinner/sun50i-a64-pinephone-1.2.dts -o /boot/dtbs/allwinner/sun50i-a64-pinephone-1.2.dtb
Afterwards you can simply reboot and check /sys/kernel/debug/clk/clk_summary
to see if the changes have correctly applied.
GPU
Open /boot/dtbs/allwinner/sun50i-a64-pinephone-1.2.dts
(You will have to find the source of the kernel used by your distribution. There is the Pine64 kernel, and Megi's) in a text editor following these instructions: https://wiki.pine64.org/wiki/Overclocking#Edit_Pinephone_DTS
Look for mali: gpu@1c4000 {
and within that block search for assigned-clock-rates = <432000000>;
The assigned-clock-rates
line should be set to 432000000
, this means that the GPU is clocked at 432MHz by default. So if you want 500MHz, set the value to 500000000
.
Save the dts file, and recompile the DTB. In order to check if the overclock was successfully applied you can use /sys/kernel/debug/clk/clk_summary
.
CPU
Stock speed: 1.152GHz CPU
Overclocking: TODO
In order to check if the overclock was succesfully applied you can use /sys/kernel/debug/clk/clk_summary
.
DRAM
When overclocking the GPU, it is a good idea to also overclock the DRAM, as the main bottleneck of the A64 SOC is the memory. The A64's maximum ram clockspeed falls just short of 667MHz. This may be unstable on your device however.
Around 600 MHz (PC-1200) should work fine, however some people have reported instability at lower clockspeeds. Arch Linux Arm uses a default clockspeed of 624MHz, with uboot builds available to easily switch out for a lower DRAM clockspeed.
It is possible that by reverse engineering the DRAM driver from allwinner that auto tuning can be accomplished to get the best performance.
Setting the DRAM clock is accomplished by modifying pinephone_defconfig in uboot (https://gitlab.com/pine64-org/u-boot/-/blob/crust/configs/pinephone_defconfig)
You can find simple instructions on doing so here: Uboot
VPU
Overclocking crust
Rockchip RK3399 based boards
The RK3399 clocks are found in arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi
More optimised voltages and clocks can be found in arch/arm64/boot/dts/rockchip/rk3399-op1-opp.dtsi These include a slight overclock and undervolt, they are intended for the OP1 CPU found in many chromebooks but have worked fine in all recorded cases on regular RK3399s in other devices.
Specific to the Pinebook Pro DTS in tsys' kernels is an extra clock speed entry for the big cores in arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
It overrides the opp08
entry for the big core cluster with one that runs 2GHz at 1.3V.
It is up to you how to deal with this, either by just skipping opp08 in the main dtsi to keep using that entry or by removing that entry from the Pinebook Pro dts and adding your own to the regular dtsi.
GPU
Any clock speeds can be added for the GPU in gpu_opp_table
The highest safe voltage for the GPU is 1.2V as specified in the RK3399 schematic from Rockchip.
TuxThePenguin has found that the RK3399 in his Pinebook Pro can reach 950MHz on the GPU while being stable.
The stock speed for the GPU is 800Mhz
CPU
A set of available clock speeds that can be added to the CPU clusters can be found in drivers/clk/rockchip/clk-rk3399.c
under rk3399_cpuclkl_rates
for the little cores and rk3399_cpuclkb_rates
for the big cores.
These clock speeds can be added to cluster0_opp
for the small cores and cluster1_opp
for the big cores respectively.
There is a hard limit of 1.8GHz on the little cores and 2.2GHz on the big cores.
The highest safe voltage for the little cores is 1.2V and for the big cores is 1.25V.
TuxThePenguin has found that the little cores on his RK3399 can run at 1.6GHz, and 2.08GHz on the big cores.
Rockchip RK3328 based boards
TODO