Re: enabling powerd on RPi

From: Mike Karels <mike_at_karels.net>
Date: Thu, 28 Dec 2023 21:12:10 UTC
On 28 Dec 2023, at 14:22, Mark Millard wrote:

> On Dec 28, 2023, at 11:11, Mike Karels <mike@karels.net> wrote:
>
>> I am looking at enabling powerd by default on the Raspberry Pi 4 and maybe
>> others.  There is a bug from 2021 on the subject which has gotten some recent
>> discussion, https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=256836.  Also,
>> problems come up from time to time about performance problems because people
>> don't know to enable powerd.  It makes FreeBSD look much slower than Linux.
>
> If performance comparison to linux is a driving issue, seeing what
> linux does about sdram_freq and sdram_freq_min may be relevant. This
> may be in whole, or in part, based on the RPi* firmware version the:
>
> https://www.raspberrypi.com/documentation/computers/config_txt.html#overclocking-options
> and its:
> "This table gives the default values for the options on various
> Raspberry Pi models, all frequencies are stated in MHz."

I'm not looking to optimize everything to improve comparison with Linux;
people can optimize their own systems based on things like cooling.
I just want to get the low-hanging fruit here, with safe defaults.
Running at 600 MHz all the time is totally suboptimal.  People who
want to tweak will always find more improvements.

> content has varied as firmware releases have been made. But I've not
> always found that the two match for FreeBSD. This might be because
> they mixed firmware and linux defaults without being explicit,
> something I've run into before. (I'll note that the history of the
> documented defaults is available via giuthub, even if somewhat messy
> as they restructured the documentation over time.)
>
> For the RPi4B's and Pi 400's the modern tables indicate
> sdram_freq_min=3200 is the default. It used to be sdram_freq_min=400 .
> Recent testing of stable/14 snapshots with RPI4B's has shown the 400
> figure is in use. Only the RPi4B's, Pi 400's, and Pi5 show non-400
> defaults in the modern table.

It doesn't sound like there is a single, universal change to be made to
optimize sdram in config.txt or rc.conf.  I think the most we could do
is to add notes as comments, but many people probably never look at
config.txt.

> Another such example is that RPi4B Rev 1.4+ is documented to have
> arm_freq=1800 by default if arm_boot=1 in config.txt . Otherwise
> RPi4B's are documented to use 1500 as the default.
>
> But FreeBSD does not end up with the documented figures: ending up
> matching the default arm_freq_min=600 instead of (all but Pi0/W,
> Pi1, and Pi 5 are documhted to have the 600). My guess is that
> FreeBSD makes its own assignments. Note that the default
> arm_freq_min is model dependent if Pi0/W, Pi 1, or [someday] Pi 5
> are to be covered.
>
>> The simplest action is to enable powerd by default on the arm64-aarch64-RPI
>> images.  This would affect RPi 4 and variants, also RPI 3* and later RPi 2.
>> I enabled powerd on an RPi 3B+, and it seems to have no issues; it seems
>> to work.  Does anyone know of a disadvantage of enabling powerd on RPI
>> images for all targets?
>
> Serial port configurations that attempt to use the mini-uart have
> problems with core_freq changes changing the serial console
> frequency in use. (mini-uart used for bluetooth instead has such
> issues too.) Which UART is used by default varies by model, the
> bluetooth capable families (so, e.g., not Pi2) having the
> mini-uart for the serial port and full UART for bluetooth. (I'm
> not clear on the v1.1 vs. v1.2 for the RPi2B's.) core_freq and
> core_freq_min also vary by model.
>
> There is a core_freq_min. core_freq and core_freq_min defaults
> are documented as model specific. hdmi_enable_4kp60 use
> changes the default for core_freq and core_freq_min as well.
> There is enable_uart=1 to force the core clock to be fixed
> for seerial use, which frequency is dependent on force_turbo=1
> vs. not.

It sounds like using the mini-uart will require config changes in any
case.  I'd also be surprised if many (any?) FreeBSD users are using
the mini-uart at all.  Anyone know?

> I do not know what FreeBSD does about such things if it does
> not match such documentation.
>
> There is:
>
> https://www.raspberrypi.com/documentation/computers/configuration.html#configuring-uarts
>
> that says, in part,
>
> QUOTE
> In order to use the mini UART, you need to configure the
> Raspberry Pi to use a fixed VPU core clock frequency
> END QUOTE
>
> I'll also note that arm_64bit=1 is the default for the RPi4B's,
> Pi 400, CM4, and CM4S these days, but not for the rest that are
> 64=bit capable (ignoring RPi5's, which do not have the parameter).
> I do not know what FreeBSD does about such things if it does
> not match such documentation.

In the current config.txt, arm_64bit=1 is in the [all] section.

>> The alternative would be to configure at the first
>> boot, although I'm not positive of a definitive way to identify the RPi
>> variants.  Maybe just looking for a dev.cpu.0.freq sysctl node would
>> suffice.
>>
>> If no one objects, I will make changes to enable powerd on RPI snapshots
>> for 15-current, and we can see what happens.

Any objections?  Anything else we should do by default?

		Mike