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

Mark Millard <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On Jan 7, 2023, at 10:58, Klaus Küchemann <[email protected]> wrote:

> 
>> Am 07.01.2023 um 11:18 schrieb Mark Millard <[email protected]>:
>> 
>> 
>> ……………………...
>>>> 
>>>> 
>>>> 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.