Re: How to make FreeBSD's kernel boot a RPi4B with modern RPi* firmware

From: Mark Millard <marklmi_at_yahoo.com>
Date: Sun, 08 Jan 2023 00:59:41 UTC
On Jan 7, 2023, at 10:58, Klaus Küchemann <maciphone2@googlemail.com> wrote:

> 
>> Am 07.01.2023 um 11:18 schrieb Mark Millard <marklmi@yahoo.com>:
>> 
>> 
>> ……………………...
>>>> 
>>>> 
>>>> stable/13's source code changes are ( similarly for
>>>> releng/13.1 ):
>>>> 
>>>> # git -C /usr/13S-src/ diff sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_dma.c b/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> index cab8639bb607..6d521d6dcace 100644
>>>> --- a/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> +++ b/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> @@ -766,5 +766,6 @@ static driver_t bcm_dma_driver = {
>>>> 
>>>> static devclass_t bcm_dma_devclass;
>>>> 
>>>> -DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, bcm_dma_devclass, 0, 0);
>>>> +EARLY_DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, bcm_dma_devclass,
>>>> +    0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_LATE);
>>>> MODULE_VERSION(bcm_dma, 1);
>>>> 
>>>> 
>>>> main's [so: 14's] source code changes are:
>>>> 
>>>> # git -C /usr/main-src/ diff sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_dma.c b/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> index 5f9ecb0b7981..d901447df1e9 100644
>>>> --- a/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> +++ b/sys/arm/broadcom/bcm2835/bcm2835_dma.c
>>>> @@ -764,5 +764,6 @@ static driver_t bcm_dma_driver = {
>>>>      sizeof(struct bcm_dma_softc),
>>>> };
>>>> 
>>>> -DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, 0, 0);
>>>> +EARLY_DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, 0, 0,
>>>> +    BUS_PASS_INTERRUPT + BUS_PASS_ORDER_LATE);
>>>> MODULE_VERSION(bcm_dma, 1);
>>>> 
>> 
>> 
>> ===
>> Mark Millard
>> marklmi at yahoo.com
>> 
> 
> 
> …….on the other hand : if your EARLY_DRIVER_MODULE(bcm_dma… doesn’t do anything wrong,
> you could give it in phabricator review, why not?!..

Yep, once I've better evidence from the RPi*'s that I have
access to.

I'll note that no vintages of the following .dtb files are
in the current sysutils/rpi-firmware port:

bcm2709-rpi-cm2.dtb
bcm2710-rpi-zero-2-w.dtb
bcm2710-rpi-zero-2.dtb
bcm2711-rpi-cm4s.dtb

I've no direct evidence of if any vintage of any of these
would end up hitting the bcm_dma issue or not. But I expect
that the EARLY_DRIVER_MODULE related patching would avoid
(just!) that specific crash problem if it would otherwise
would occur.

There is:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=261147

reporting the absence of bcm2710-rpi-zero-2-w.dtb . So
someone might want to experiment with more recent RPi*
firmware, possibly even to develop some level of support
for bcm2710-rpi-zero-2-w.dtb (live Device Tree possibly
adjusted by the RPi* firmware) --if changes are needed.

The .dtb vintage and the RPi* start*.efi and the like
vintages are not necessarily fully independent. Mixing
and matching could be a problem, independent of any
additional FreeBSD kernel-related issues. (It is another
example of the poor level of documentation for the RPi*
context.)

===
Mark Millard
marklmi at yahoo.com