Did a little experimenting today using No Frills (nice simple CPU app with CPU state stats! good find!) and CPU-Z as well.
This thing behaves pretty weird. It seems the reported available frequencies 96-1512 MHz are pretty loose, so instead of only being able to use the ones listed like on most devices, you can put whatever you want as your min frequency (from 48 up, in multiples of 24) and it seems to accept it. For its own scaling it even appears to just count up by 24s from the min, and can use any frequency on that spectrum, regardless of the listed available frequencies, since I even went down to the board min of 48 MHz and watched it drop down there occasionally, and hit 72 and 120 on the way back up. This is also partly why the min seems to stay at 336 MHz despite setting it lower, they seem to artificially keep it at 336 unless load is extremely low even though it isn't a listed frequency, after which point it can drop down to the set min, but generally doesn't. Once you go above 336 MHz min then setting the min starts to work as expected.
From there it still doesn't follow the listed frequencies, and by triggering a bit of load you can see that the next step it tends to use is whatever your min is plus 432 MHz (even if the min is below their magic 336). Though the value floats, this almost seems to function like the interactive governor's hispeed_freq.
So for the first 4 here, 336 generally remains your min freq in practice, and from 408 on the min freq is as listed. We can use this table to decide where we want to raise the min to and keep it fluid while not raising it so high that it could potentially overheat and/or thermal throttle (not sure if this board has a temperature cutoff):
Code:
48 -> 504
96 -> 528
192 -> 624
312 -> 744
408 -> 840
504 -> 936
600 -> 1032
696 -> 1128
48 MHz is the only exception to the y=x+432 rule, and is off by 456 instead, maybe there's a minimum hispeed_freq hardcoded as well and it can't go below 504. Also, starting with 816 I couldn't trigger a hispeed_freq, likely because it exceeds the default max 1200 MHz. We also don't even need to stick to the list, like I said, we could set it to whatever we want keeping in mind the next step will be +432.
Now here's where it gets even weirder. The set max definitely isn't respected at all, not with any governor, it keeps to the board max of 1200, and even underclocking below that isn't followed, and can be exceeded. This is especially unusual since performance governor is basically supposed to keep it at whatever you set your max to, but I can set to 696 min, plus 816 max and still trigger the hispeed_freq of 1128 MHz. Even with conservative or ondemand it almost seems as though governor isn't respected either, it just follows the hispeed_freq rule when load is somewhere between 80 and 100%. Either something they rigged up at Amlogic, or the meson-cpu_freq driver is insane and doesn't follow any of the rules most do with respect to allowing the governor to fully influence things.
So the good news is the min is definitely respected, so we can greatly improve performance by raising it. The other trick will be seeing if the 1200 MHz max is set somewhere in the nandenv, and if that's the one that gets used over the userspace cpufreq file then maybe we can circumvent it. That and doing nanddumps to try again at adding init.d support in properly are my next tasks.