Christian Hewitt <christianshewitt@xxxxxxxxx> writes: >> On 10 Feb 2022, at 5:31 am, Kevin Hilman <khilman@xxxxxxxxxxxx> wrote: >> >> Christian Hewitt <christianshewitt@xxxxxxxxx> writes: >> >>> Amlogic G12B and SM1 devices experience CPU stalls and random board >>> wedges when the system idles and CPU cores clock down to lower opp >>> points. Recent vendor kernels include a change to remove 100-250MHz >>> (with no explanation) [0] but other downstream sources also remove >>> the 500/667MHz points (also with no explanation). Unless 100-667Mhz >>> opps are removed or the CPU governor forced to performance, stalls >>> are observed, so let's remove them an improve stability/uptime. >> >> Just curious: what CPUfreq governor do you use by default for the >> LibreELEC kernel? > > LE uses ondemand. One of the original clues on the problem us that the > issue isn’t seen in some of the retro-gaming forks on LE's codebase > which use the performance governor (and overclocks, etc.) OK, thanks. And does LE ever do full system suspend/resume? Are things stable for you across multiple suspend/resume cycles on G12B or SM1 devices? I'm seeing hat with either powersave or performance, repeated suspend/resume is stable, but with ondemand or schedultil it's not, even with $SUBJECT patch applied. If you have some time to test, seeing how long this loop[1] runs with ondemand vs performance or powersave would be instructive. Even more interesting... if I set the governor to performance, but set the suspend OPP to 1GHz[2] (which is what it would be for the powersave governor), it is also unstable. This suggests (to me) that any sort of OPP change during the suspend/resume process is going to be unstable. Now the challenge is to understand why so we can avoid it. Thanks, Kevin [1] while true; do echo "=== SUSPEND ===" cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq cat /sys/devices/system/cpu/cpufreq/policy2/scaling_governor cat /sys/devices/system/cpu/cpufreq/policy2/scaling_cur_freq echo rtcwake -d rtc0 -m mem -s4 echo "=== RESUME ===" sleep 4 done [2] diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi index 1e5d0ee5d541..37da8be85288 100644 --- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi @@ -14,6 +14,7 @@ cpu_opp_table_0: opp-table-0 { opp-100000000 { opp-hz = /bits/ 64 <100000000>; opp-microvolt = <731000>; + opp-suspend; }; opp-250000000 { @@ -79,6 +80,7 @@ cpub_opp_table_1: opp-table-1 { opp-100000000 { opp-hz = /bits/ 64 <100000000>; opp-microvolt = <751000>; + opp-suspend; }; opp-250000000 {