I’ve recently discovered a way to get my crappy half supported broadcom WiFi chip to work with 5Ghz networks by modifying brcmfmac43602-pcie.txt which brcmfmac43602-pcie.bin uses for things like setting the region, MAC address and whatever else, on Debian/Ubuntu based distributions, I’ve come back to Fedora (specifically Rawhide KDE) on a test partition and I started attempting to see if I could fix my WiFi situation the same way I did on my pre-existing Debian install. (I’m currently using Ethernet to type this from Fedora)
Problem however, the entire /lib/firmware/brcm directory is just .xz’s, I wasn’t aware that Fedora handled firmware like this but I’ve decided to just drag the .txt file that the bin file used to use on Debian and ran sudo restorecon -R /usr/lib/firmware sudo dracut -f
and rebooted, yet no luck ,:v
I’ve also tried taking the bin from debian, running xz on it and dumping it in /lib/firmware/brcm but no difference, just the same broken half functioning WiFi chip.
So I’m at a bit of a crossroads, the way fedora handles firmware is to my knowledge, barely documented, I’ve been throwing random things at the wall like attempting to somehow compress both the .txt and the .bin into one .xz but that obviously isn’t exactly possible with xz (and afaik, I don’t think you could use a .tar.xz for firmware?), so I’m left wondering, can I just make Fedora use the .bin and the .txt over a .xz version of the firmware? What is stopping it from doing that? Maybe there’s a way I could somehow make the current .xz see the .txt? apologies for the rambling but I hope I can find any sort of answer.
I see numerous other .txt.xz files in that directory. I expect that an uncompressed .txt file would also work.
I can’t see any evidence that Ubuntu ships with that file either, so there doesn’t seem to be any real difference here. After placing the file, you should be able to check the kernel logs (journalctl -k | grep brcmfmac) to see whether it was loaded.
Huge thanks for making me aware of that wiki page about the change. You might be right about Ubuntu not shipping the file but in my testing I was able to simply create the file, reboot and get functioning WiFi out of this chip, I’ve even decided to compare the journalctl output from my Debian install with functioning WiFi and compared it to the output with Fedora.
Jan 29 04:10:46 Debbietosh kernel: usbcore: registered new interface driver brcmfmac
Jan 29 04:10:46 Debbietosh kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43602-pcie for chip BCM43602/2
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin failed with error -2
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: direct-loading firmware brcm/brcmfmac43602-pcie.bin
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.txt (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.txt (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: direct-loading firmware brcm/brcmfmac43602-pcie.txt
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.clm_blob (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.clm_blob (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.clm_blob (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: firmware: failed to load brcm/brcmfmac43602-pcie.clm_blob (-2)
Jan 29 04:10:46 Debbietosh kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.clm_blob failed with error -2
Jan 29 04:10:47 Debbietosh kernel: brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jan 29 04:10:47 Debbietosh kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43602/2 wl0: Nov 10 2015 06:38:10 version 7.35.177.61 (r598657) FWID 01-ea662a8c
Jan 29 04:10:47 Debbietosh kernel: brcmfmac 0000:02:00.0 wlp2s0: renamed from wlan0
Above is the output from Debian 12, it manages to load the .txt file and I get working 5Ghz WiFi.
Below is the output from Fedora, I’ve compressed the txt file using xz (and I’ve tried the exact flags mentioned in the changes wiki page):
Jan 29 16:50:45 fedoratoshrawhide kernel: usbcore: registered new interface driver brcmfmac
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43602-pcie for chip BCM43602/2
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin failed with error -2
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: xz decompression failed (xz_ret=6)
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txt failed with error -22
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.clm_blob failed with error -2
Jan 29 16:50:45 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txcap_blob failed with error -2
Jan 29 16:50:46 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jan 29 16:50:46 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2)
Jan 29 16:50:46 fedoratoshrawhide kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43602/2 wl0: Nov 10 2015 06:38:10 version 7.35.177.61 (r598657) FWID 01-ea662a8c
Jan 29 16:50:46 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0 wlp2s0: renamed from wlan0
It appears to fail decompress the .txt.xz file, perhaps I need to compress it in a different way?
Again, huge thanks for the further insight!
Fedora is good at getting these kind of issues reported and fixed upstream, but I’ve been searching and have no idea where to specifically report firmware issues…
To get a baseline, please undo any changes you’ve made in that directory. You can do that by uninstalling the brcmfmac-firmware package, removing any remaining files, and then reinstalling the package. Ideally, I’d like to see the journal output at this stage, but you can skip that if you want.
Then place the .txt file in that directory without compressing it, and share the output again.
The kernel documentation for CONFIG_FW_LOADER_COMPRESS says:
The compressed file is loaded as a fallback, only loading the raw file failed at first.
Here’s the journalctl output with an unmodified brcm directory
Jan 29 23:27:41 fedoratoshrawhide kernel: usbcore: registered new interface driver brcmfmac
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43602-pcie for chip BCM43602/2
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin failed with error -2
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txt failed with error -2
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.clm_blob failed with error -2
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txcap_blob failed with error -2
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2)
Jan 29 23:27:41 fedoratoshrawhide kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43602/2 wl0: Nov 10 2015 06:38:10 version 7.35.177.61 (r598657) FWID 01-ea662a8c
Jan 29 23:27:42 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0 wlp2s0: renamed from wlan0
Post including .txt included in /lib/firmware/brcm(and with initramfs rebuilt using dracut -f
Jan 29 23:15:11 fedoratoshrawhide kernel: usbcore: registered new interface driver brcmfmac
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43602-pcie for chip BCM43602/2
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin failed with error -2
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.clm_blob failed with error -2
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txcap_blob failed with error -2
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2)
Jan 29 23:15:11 fedoratoshrawhide kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43602/2 wl0: Nov 10 2015 06:38:10 version 7.35.177.61 (r598657) FWID 01-ea662a8c
Jan 29 23:15:12 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0 wlp2s0: renamed from wlan0
The first output seems to look for the .txt, second output seemingly doesn’t mention it at all like Debian did yet the chip behaves the exact same way? it’s pretty odd.
Here’s the output of ls -lZ on the .txt, I’ve included some surrounding files for reference but they seem mostly in check to me?
-rw-r--r--. 1 root root system_u:object_r:lib_t:s0 348340 Jan 18 03:00 brcmfmac4358-pcie.bin.xz
-rw-r--r--. 1 root root system_u:object_r:lib_t:s0 314796 Jan 18 03:00 brcmfmac43602-pcie.ap.bin.xz
-rw-r--r--. 1 root root system_u:object_r:lib_t:s0 328248 Jan 18 03:00 brcmfmac43602-pcie.bin.xz
-rw-r--r--. 1 root root system_u:object_r:lib_t:s0 6051 Jan 30 03:35 brcmfmac43602-pcie.txt
-rw-r--r--. 1 root root system_u:object_r:lib_t:s0 504812 Jan 18 03:00 brcmfmac4366b-pcie.bin.xz
I was indeed filtering the output with grep, I went ahead and piped the entire journalctl output to a .log file, here’s the surrounding outputs:
Jan 30 03:37:14 fedoratoshrawhide kernel: usbcore: registered new interface driver brcmfmac
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM: chip id 126
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM: features 0x2f
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM20703A2 Generic UART UHE Apple 40MHz wlcsp_x100
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM (001.002.109) build 0229
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM: firmware Patch file not found, tried:
Jan 30 03:37:14 fedoratoshrawhide kernel: Bluetooth: hci0: BCM: 'brcm/BCM.hcd'
Jan 30 03:37:14 fedoratoshrawhide kernel: input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input17
Jan 30 03:37:14 fedoratoshrawhide kernel: input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input18
Jan 30 03:37:14 fedoratoshrawhide kernel: input: HDA Intel PCH HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input19
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43602-pcie for chip BCM43602/2
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.Apple Inc.-MacBookPro13,2.bin failed with error -2
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.clm_blob failed with error -2
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0: Direct firmware load for brcm/brcmfmac43602-pcie.txcap_blob failed with error -2
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_tcc_cooling: Programmable TCC Offset detected
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_pmc_core intel_pmc_core.0: initialized
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_rapl_common: Found RAPL domain package
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_rapl_common: Found RAPL domain core
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_rapl_common: Found RAPL domain uncore
Jan 30 03:37:14 fedoratoshrawhide kernel: intel_rapl_common: Found RAPL domain dram
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2)
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43602/2 wl0: Nov 10 2015 06:38:10 version 7.35.177.61 (r598657) FWID 01-ea662a8c
Jan 30 03:37:14 fedoratoshrawhide kernel: brcmfmac 0000:02:00.0 wlp2s0: renamed from wlan0
Unfortunately, nothing more interesting than seeing BCM and Bluetooth flop around with an error :l interestingly though, bluetooth is working mostly well on Fedora ootb!
I’m going to leave a quick update.
I’m currently writing this from Fedora 39, via Ethernet again just to see if perhaps it was a Rawhide acting weird thing, but, nope, same thing here, Fedora simply just doesn’t read the .txt file, or does and somehow doesn’t use it. I thought this was a compression thing I didn’t understand but I did have attempts on both OpenSUSE Tumbleweed (compresses firmware the same way Fedora does, and huzzah, it reads the text file and works as intended) and Arch (compressed differently, but works.), I would still love more insight because the experience with OpenSUSE TW is making me believe Fedora is doing something different. Btw @pkmays, apologies for the late reply but you might be able to report such a bug upstream to Fedora’s Bugzilla under (probably) linux-firmware, I will probably be doing something similar.