Hello,

I found the problem with this board: the DDR frequency. U-boot is
setting it to 648MHz and somehow it is creating instability. I
reduced it to 576MHz and all the problems are gone. I added an opp
table to the dtb and I've tested the board at maximum freq, playing
online videos in chromium (iridium) to stress the cpu and the
network, while installing and deleting packages. All the panics
that I suffered and other user reported here:

https://marc.info/?t=154891874100002&r=1&w=2

are gone. Users of other H5 boards -and maybe different ram chips,
can test if these problems are related to the soc, not just to the
board.

This is the diff of the dts after decompiling the ports' dtb:

============================================================
--- sun50i-h5-orangepi-pc2.dts.orig     Tue Nov  3 22:05:33 2020
+++ sun50i-h5-orangepi-pc2.dts  Tue Nov  3 23:05:33 2020
@@ -980,6 +980,10 @@
                        device_type = "cpu";
                        reg = <0x00>;
                        enable-method = "psci";
+                       clocks = <0x03 0x0e>;
+                       clock-latency-ns = <0x3b9b0>;
+                       #cooling-cells = <0x02>;
+                       operating-points-v2 = <0x40>;
                        cpu-supply = <0x2a>;
                        phandle = <0x2b>;
                };
@@ -989,6 +993,10 @@
                        device_type = "cpu";
                        reg = <0x01>;
                        enable-method = "psci";
+                       clocks = <0x03 0x0e>;
+                       clock-latency-ns = <0x3b9b0>;
+                       #cooling-cells = <0x02>;
+                       operating-points-v2 = <0x40>;
                        phandle = <0x2c>;
                };
 
@@ -997,6 +1005,10 @@
                        device_type = "cpu";
                        reg = <0x02>;
                        enable-method = "psci";
+                       clocks = <0x03 0x0e>;
+                       clock-latency-ns = <0x3b9b0>;
+                       #cooling-cells = <0x02>;
+                       operating-points-v2 = <0x40>;
                        phandle = <0x2d>;
                };
 
@@ -1005,6 +1017,10 @@
                        device_type = "cpu";
                        reg = <0x03>;
                        enable-method = "psci";
+                       clocks = <0x03 0x0e>;
+                       clock-latency-ns = <0x3b9b0>;
+                       #cooling-cells = <0x02>;
+                       operating-points-v2 = <0x40>;
                        phandle = <0x2e>;
                };
        };
@@ -1037,6 +1053,66 @@
                        polling-delay-passive = <0x00>;
                        polling-delay = <0x00>;
                        thermal-sensors = <0x2f 0x01>;
+               };
+       };
+
+       cpu-opp-table {
+               compatible = "operating-points-v2";
+               opp-shared;
+               phandle = <0x40>;
+
+               opp-480000000 {
+                       opp-hz = <0x00 0x1c9c3800>;
+                       opp-microvolt = <0xfde80 0xfde80 0x13d620>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-648000000 {
+                       opp-hz = <0x00 0x269fb200>;
+                       opp-microvolt = <0xfde80 0xfde80 0x13d620>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-816000000 {
+                       opp-hz = <0x00 0x30a32c00>;
+                       opp-microvolt = <0x10c8e0 0x10c8e0 0x13d620>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-960000000 {
+                       opp-hz = <0x00 0x39387000>;
+                       opp-microvolt = <0x124f80 0x124f80 0x13d620>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-1008000000 {
+                       opp-hz = <0x00 0x3c14dc00>;
+                       opp-microvolt = <0x124f80 0x124f80 0x13d620>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-1104000000 {
+                       opp-hz = <0x00 0x41cdb400>;
+                       opp-microvolt = <0x142440 0x142440 0x142440>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-1200000000 {
+                       opp-hz = <0x00 0x47868c00>;
+                       opp-microvolt = <0x142440 0x142440 0x142440>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-1296000000 {
+                       opp-hz = <0x00 0x4d3f6400>;
+                       opp-microvolt = <0x147260 0x147260 0x147260>;
+                       clock-latency-ns = <0x3b9b0>;
+               };
+
+               opp-1368000000 {
+                       opp-hz = <0x00 0x518a0600>;
+                       opp-microvolt = <0x155cc0 0x155cc0 0x155cc0>;
+                       clock-latency-ns = <0x3b9b0>;
                };
        };
============================================================

This is the boot.cmd I'm using to set the frequency, I added some
comments so people can experiment easily:

============================================================
# PLL_DDR Output= (24MHz*N*K)/M 
# Bits to set:
# 31   | PLL_ENABLE.
# 20   | Update, must be set when changing the PLL.
# 12:8 | N.
# 5:4  | K.
# 1:0  | M.
echo Setting DDR3 freq to 576MHz
mw 0x01C20020 0x80101810
load mmc 0:1 ${fdt_addr_r} ${fdtfile}
load mmc 0:1 ${kernel_addr_r} efi/boot/bootaa64.efi
bootefi ${kernel_addr_r} ${fdt_addr_r}
============================================================

When I have time I will propose a patch to the dtb port, and try
to make a u-boot-tools package to include mkimage. The u-boot port
could be patched to change the DDR frequency on this board. I will
experiment with other frequencies, this Samsung chip should work
ok at 933MHz for 1866Mb/sec/pin.

Regards,
adr.

Reply via email to