Fedora IoT 38 says it supports rpi CM4 but has the same WiFi issue as 37


I’ve installed f38 on the rpi CM4 hoping it would work out of the box (since it says it is supported as a reference platform here: Reference Platforms :: Fedora Docs) but it does not have the WiFi drivers for the CM4:

[root@localhost ~]# dmesg | grep -i error
[   23.182431] bcm2711_thermal: probe of fd5d2000.avs-monitor:thermal failed with error -22
[   23.863857] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin failed with error -2
[   23.945108] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.txt failed with error -2

to fix the issue I’ve copied the rpi4b and renamed as 4-compute-module:

[root@localhost ~]# cp /usr/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt.xz /usr/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.txt.xz

Once you reload the brcmfmac module the wlan0 interface is recognized but it has performance issues as I cannot go over 50Mbps download.

Suspect I’m just using the wrong driver but not sure how to use the correct one.
Any help would be appreciated!
Saw some pages saying that fedora does not support the rpi 400 wifi…is it the same issue here?


There are some minor caveats here:

Support for WiFi on the Raspberry Pi 400 is out of scope as it's dependent on the engagement (in this case the lack of) the vendor, Synaptics, of the WiFi module shipped on this device providing generic upstream firmware.

In other words, as in many cases closed source software/drivers are not supported.

I’m not sure the CM4 is looking for the Pi 400 drivers.
It says it cannot find brcmfmac43455-sdio.raspberrypi,4-compute-module.bin which matches what we see in the datasheet here: https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf

Chapter 2:
The CM4 can be supplied with an on-board wireless module based on the Cypress CYW43455 supporting both:
• 2.4 GHz, 5.0 GHz IEEE 802.11 b/g/n/ac wireless
• Bluetooth 5.0, BLE

The brcmfmac43455 is the sameas the pi4B+ which works with f37/38 no problem so it does not seem to be a closed source issue.

In any case, there’s no specific fedora documentation that mentions the issue with wifi on CM4 which I imagine would be to big of a gap to ignore and still call it a reference platform.

I’ve tried to copy the 43456 drivers and rename them as 43455 as they did on a similar issue here:
Get onboard Raspberry Pi CM4 WiFi module working · Issue #4 · geerlingguy/pi-router · GitHub but that did not work which makes me think it is indeed looking for the same drivers as pi4b+.

Or maybe I messed up in compression… will install pi OS and check what drivers it loads for this board.

I was referring to your last question you made in your first request. I was quoting it now that it is more clear.

Thanks for your response @ilikelinux
I’ve loaded the same board with the latest rpi OS and funny enough the same error shows up in dmesg:

pi@cm4:~ $ dmesg | grep -i error
[    6.317263] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin failed with error -2

The difference is that in rpi OS the wlan0 interface loads without issue which makes me think that it is indeed loading the 43456 drivers (as they are the only ones for CM4 in the firmware folder and they do match the Pi400 as you pointed):

pi@cm4:~ $ ls -la /lib/firmware/brcm/*4-compute-module*
lrwxrwxrwx 1 root root 22 Oct 31 14:31 /lib/firmware/brcm/brcmfmac43456-sdio.raspberrypi,4-compute-module.bin -> brcmfmac43456-sdio.bin
lrwxrwxrwx 1 root root 27 Oct 31 14:31 /lib/firmware/brcm/brcmfmac43456-sdio.raspberrypi,4-compute-module.clm_blob -> brcmfmac43456-sdio.clm_blob
lrwxrwxrwx 1 root root 22 Oct 31 14:31 /lib/firmware/brcm/brcmfmac43456-sdio.raspberrypi,4-compute-module.txt -> brcmfmac43456-sdio.txt

Any idea if I can just compress these brcmfmac43456 files and add to fedora 38 before burning the raw fedora image to the emmc?

The speed test is some 50% better on rpiOS with brcmfmac43456 vs f38 with brcmfmac43455.

Just using xz “as is” did not work for me, however adding arguments --check=crc32 --lzma2=dict=512KiB did the job and I have working wifi on Raspberry Pi 400:

xz -kv -T0 --check=crc32 --lzma2=dict=512KiB <brcmfmac43456 files>

See: XZ data compression in Linux — The Linux Kernel documentation