RPi-Distro/firmware-nonfree

Missing clm_blob for Pi 3B

juergh opened this issue · 3 comments

$ uname -a
Linux rpi-3b-rev1d2-62e2 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l GNU/Linux

$ cat /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2

$ dmesg | grep fmac
[ 10.530564] brcmfmac: F1 signature read @0x18000000=0x1541a9a6
[ 10.542690] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 10.543060] usbcore: registered new interface driver brcmfmac
[ 10.771045] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 10.771154] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
[ 10.771948] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Oct 22 2019 01:59:28 version 7.45.98.94 (r723000 CY) FWID 01-3b33decd

Our 43438 firmware has a built-in clm_blob, but the brcmfmac driver doesn't know that, hence the warning.

Is there a way to (manually) inspect the firmware binary to figure that out?

I haven't found a nice way to do so that could be easily and reliably automated, but with the help of a human brain and strings its fairly easy:

$ strings -n 2 /lib/firmware/brcm/brcmfmac43455-sdio.clm_blob | grep -A20 "CLM DATA"
CLM DATA
9.10.136
1.29.4
ClmImport: 1.36.3
Broadcom-0.0

The output should begin as above (possibly with different numbers), but then diverges; if there is a built in blob you should see some recognisable country code:

hf
P^
`^
p_
X^
pf
BR
DE
x
x
x
#e
EU
#a
#r
AD

Otherwise you'll probably see message strings:

wl%d: %s wlc_iem_add_build_fn failed, cntry in bcn
wl%d: %s wlc_ier_add_build_fn failed, cntry in setupreq
wl%d: %s wlc_ier_add_build_fn failed, cntry in setupresp
cntry
wl%d: %s: wlc_bsscfg_updown_register() failed
wl%d: %s: wlc_iem_add_build_fn failed, csa in bcn
wl%d: %s: wlc_iem_add_build_fn failed, ext csa in bcn
wl%d: %s wlc_iem_vs_add_parse_fn failed, psta in assocreq
wl%d: %s: wlc_iem_add_build_fn failed, csw in bcn
wl%d: %s: wlc_ier_add_build_fn failed, wbw in csw ie
wl%d: %s: wlc_iem_add_parse_fn failed, csa in bcn
wl%d: %s: wlc_iem_add_parse_fn failed, ext csa in bcn
phy_muted
wl%d: wlc_dfs_timer_init failed
wl%d: %s: wlc_dfs_timer_init failed