Re: Trying to understand firmware for bwfm driver
[email protected] (Michael van Elst)
| Newsgroups | gmane.os.netbsd.ports.arm |
|---|---|
| Organization | Serpens User Group |
| Message-ID | <[email protected]> |
[email protected] (Joel) writes: >[ 7.050526] kern.module.path=/stand/evbarm/10.0/modules >[ 7.050526] bwfm0: Firmware file default: brcmfmac43455-sdio.bin >[ 7.050526] bwfm0: Firmware file model-spec: brcmfmac43455-sdio.pine64,pinebook-pro.bin >[ 7.060526] bwfm0: Found Firmware file: brcmfmac43455-sdio.bin >[ 7.080526] bwfm0: NVRAM file default: brcmfmac43455-sdio.txt >[ 7.080526] bwfm0: NVRAM file model-spec: brcmfmac43455-sdio.pine64,pinebook-pro.txt >[ 7.080526] bwfm0: autoconfiguration error: NVRAM file not available >[ 7.080526] bwfm0: CLM file default: brcmfmac43455-sdio.clm_blob >[ 7.080526] bwfm0: CLM file model-spec: brcmfmac43455-sdio.pine64,pinebook-pro.clm_blob Firmware selection works like this: You need 2 (.bin, .txt) or 3 files (.bin, .txt, .clm_blob). The wifi chip is identified as a 43455 and your system model identifies itself as pine64,pinebook-pro. The driver will therefore try to load brcmfmac{chip}-sdio.{model}.bin brcmfmac{chip}-sdio.{model}.txt brcmfmac{chip}-sdio.{model}.clm_blob and falls back to brcmfmac{chip}-sdio.bin brcmfmac{chip}-sdio.txt brcmfmac{chip}-sdio.clm_blob You always need the .bin (firmware) and .txt (board-specific parameter) files. Some .bin files also require the .clm_blob (Country Locale Matrix), others have the data already embedded. All of the release files should have the data embedded, but files from other sources may not, and then the interface will not work without the .clm_blob file. Most but not all chips that identify themselves as e.g. 43455 take the same firmware. So it's usually fine to use one brcmfmac43455-sdio.bin for each such chip. Some chips are different, then providing a model specific file can help. The parameter file (also called NVRAM file) is more specific, but to some degree they also all work. However, some might tune the chip to e.g. a specific antenna so that, with the wrong parameters, you may violate regulations or get receive errors. The driver uses two steps to identify a chip: 1. By vendor and product to decide if the driver attaches: Vendor 0x02d0 Product 0xa9bf is seen as 43455 the Wifi chip in an RPI4 reports 0x02d0/0xa9a6, the chip is identified as a bcm43430, which is good enough to attach. 2. By id and revision to select the firmware: Id 0x4345 rev <= 8 is seen as 43455 Id 0x4345 rev 9 is seen as 43456 Id 0x4345 rev >= 10 is again seen as 43455 the Wifi chip in the RPI4 here reports id 0x4345 rev 6, so the driver loads the firmware for a 43455, first it looks for rpi4 specific files, then for generic files as described above. https://forum.pine64.org/showthread.php?tid=16456 says that at least some pinebooks come with a 43456 (id 0x4345 rev 9), but yours apparently doesn't since 0x4345/9 would be identified as 43456 by our driver.