overclocking not working

Hi everyone,

I’m working on overclocking my Orange Pi Zero 3 (Allwinner H618) running DietPi (kernel 6.6.44-current-sunxi64) by editing the Device Tree (.dtb) to include higher CPU frequencies beyond the default maximum of 1.512GHz.

Here’s what I’ve done so far:

  • Decompiled sun50i-h618-orangepi-zero3.dtb from /boot/dtb-*/allwinner/
  • Added new OPP entries up to 2.0GHz (e.g. 1600000000, 1700000000…) with matching format and safe voltage values
  • Recompiled and placed the updated .dtb back in the correct /boot/dtb-*/allwinner/ directory
  • Verified that the system uses the correct DTB (strings /proc/device-tree/compatible shows sun50i-h618)

Despite all of this:

  • /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies still shows only up to 1512000
  • The new OPPs are not being registered by the kernel
  • I’ve tried opp-supported-hw, voltage variations, and matching opp-microvolt-speedX formatting with no success

I suspect the kernel may be hard-limiting the max frequency via cpufreq-dt or some regulator constraint.

Questions:

  1. Has anyone successfully enabled custom OPPs on this board?
  2. Is there a kernel patch or build config that allows additional OPPs for the H618?
  3. Are there any logs or dmesg indicators I should focus on?

Any insights or working examples would be really appreciated :folded_hands:
Thanks in advance!

– Nils

I ran it at 1.6 and 1.7.

It was unstable and froze too often, not suitable for gaming I guess, or needs some work with other factors than I applied.

Don’t have access right now. I’ll give the dtb tomorrow

This is it for now:

EDIT opp-table CPU
                opp-1632000000 {
                        clock-latency-ns = <0x3b9b0>;
                        opp-hz = <0x00 0x61465800>;
                        opp-microvolt-speed0 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                        opp-microvolt-speed1 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                        opp-microvolt-speed2 = <0x124f80 0x124f80 0x124f80>;
                };

opp-1752000000 {
                        clock-latency-ns = <0x3b9b0>;
                        opp-hz = <0x00 0x686d6600>;
                        opp-microvolt-speed0 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                        opp-microvolt-speed1 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                        opp-microvolt-speed2 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                };

opp-hz is what changes the frequency.
1512MHz = 5a1f4a00
1704MHz = 6590fa00
1752Mhz = 686d6600
1800MHz = 6b49d200
2000MHz = 77359400

All Kudo’s go to AngryMiner on the Orange Pi zero Discord

sun50i-h618-orangepi-zero2w-oc1632gpu.dtb.txt (39.7 KB)
sun50i-h618-orangepi-zero2w-oc1704gpu.dtb.txt (39.8 KB)

As promised. Remove the .txt after download.

2 Likes

Which parts did you edit? Only a section here? https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/arm64/boot/dts/allwinner/sun50i-h616-cpu-opp.dtsi

I guess I’d need to read about opp-microvolt-speed* meaning.

And I guess the regulator would need to be adjusted as well when using values above 1100000 microvolt there: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts#n78

We could theoretically add 1-2 device tree overlays for this. But of course does not make sense if it does not run stable.

I don’t remember exactly, I think so. I was also tinkering on the @CPU section, but I think that was wrong, if I remember well.

This is a comparison between an ancient version and the one I edited, it seems so.
dts-diff2.txt (4.8 KB)

PS: Indeed it was unstable and freezing. I got it from someone (AngryMiner) from the Orange Pi-zero discord, but he was indeed mentioning about the possible improvements on the voltages. If there is more info, I can run tests.

my problem is when i do it more than 1512 the pi didnt start
opp-1600000000 {
clock-latency-ns = <0x3b9b0>;
opp-hz = <0x00 0x5f5e1000>;
opp-microvolt-speed0 = <0x10c8e0 0x10c8e0 0x10c8e0>;
opp-microvolt-speed1 = <0x10c8e0 0x10c8e0 0x10c8e0>;
opp-microvolt-speed2 = <0x10c8e0 0x10c8e0 0x10c8e0>;
opp-supported-hw = <0x3f>;
};
but this ddidnt work what i am doing wrong ?

The table you are showing looks different from the one i posted above.

again my example:

            opp-1632000000 {
                    clock-latency-ns = <0x3b9b0>;
                    opp-hz = <0x00 0x61465800>;
                    opp-microvolt-speed0 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                    opp-microvolt-speed1 = <0x10c8e0 0x10c8e0 0x10c8e0>;
                    opp-microvolt-speed2 = <0x124f80 0x124f80 0x124f80>;
            };