Re: [PATCH 1/1] wifi: brcmfmac: silence warning for non-existent, optional firmware
Christian Hewitt <[email protected]> Wed, 18 Mar 2026 11:42:55 +0400
| Newsgroups | dev.linux.lists.brcm80211,org.kernel.vger.linux-kernel,org.kernel.vger.linux-wireless |
|---|---|
| Message-ID | <[email protected]> |
> On 17 Mar 2026, at 3:12 pm, Alexander Stein <[email protected]> wrote: > > The driver tries to load optional firmware files, specific to > the actual board compatible. These might not exist resulting in a warning > like this: > brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac4373-sdio.tq,imx93-tqma9352-mba93xxla-mini.bin failed with error -2 > > Silence this by using firmware_request_nowait_nowarn() for all firmware > loads which use brcmf_fw_request_done_alt_path() as callback. This one > handles optional firmware files. > > Signed-off-by: Alexander Stein <[email protected]> On behalf of all distro maintainers receiving end-user issue reports that wrongly finger-point to “missing firmware” as the cause of all brcmfmac wifi problems: Tested-by: Christian Hewitt <[email protected]> Before and After below: VIM1S:~ # dmesg | grep brcmfmac [ 12.687679] brcmfmac: F1 signature read @0x18000000=0x15294345 [ 12.727469] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43456-sdio for chip BCM4345/9 [ 12.727947] brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac43456-sdio.khadas,vim1s.bin failed with error -2 [ 12.813544] brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac43456-sdio.clm_blob failed with error -2 [ 13.157373] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available [ 13.157423] brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2) [ 13.159391] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/9 wl0: Jun 16 2017 12:38:26 version 7.45.96.2 (66c4e21@sh-git) (r) FWID 01-1813af84 VIM1S:~ # dmesg | grep brcmfmac [ 12.218764] brcmfmac: F1 signature read @0x18000000=0x15294345 [ 12.283612] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43456-sdio for chip BCM4345/9 [ 12.382176] brcmfmac mmc2:0001:1: Direct firmware load for brcm/brcmfmac43456-sdio.clm_blob failed with error -2 [ 12.678015] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available [ 12.678066] brcmfmac: brcmf_c_process_txcap_blob: no txcap_blob available (err=-2) [ 12.680092] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/9 wl0: Jun 16 2017 12:38:26 version 7.45.96.2 (66c4e21@sh-git) (r) FWID 01-1813af84 Is there any chance the same change can be done for the clm_blob and txcap_blob error messages? (for the same reason). Other than for RPi boards I’ve never seen these files available and used with any large scale Linux distro and there are none in the upstream linux-firmware repo; thus these files are only being packaged by specialist distros or images targeting a specific or limited set of hardware devices. For everyone else running a mainstream distro image these errors are just log-noise, and while they are harmless and technically correct, end- users constantly misinterpret them. Christian > --- > .../broadcom/brcm80211/brcmfmac/firmware.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c > index 4bacd83db052e..e84cec58470c5 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c > @@ -714,9 +714,10 @@ static void brcmf_fw_request_done_alt_path(const struct firmware *fw, void *ctx) > if (!alt_path) > goto fallback; > > - ret = request_firmware_nowait(THIS_MODULE, true, alt_path, > - fwctx->dev, GFP_KERNEL, fwctx, > - brcmf_fw_request_done_alt_path); > + ret = firmware_request_nowait_nowarn(THIS_MODULE, > + alt_path, fwctx->dev, > + GFP_KERNEL, fwctx, > + brcmf_fw_request_done_alt_path); > kfree(alt_path); > > if (ret < 0) > @@ -779,9 +780,10 @@ int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req, > fwctx->req->board_types[0]); > if (alt_path) { > fwctx->board_index++; > - ret = request_firmware_nowait(THIS_MODULE, true, alt_path, > - fwctx->dev, GFP_KERNEL, fwctx, > - brcmf_fw_request_done_alt_path); > + ret = firmware_request_nowait_nowarn(THIS_MODULE, > + alt_path, fwctx->dev, > + GFP_KERNEL, fwctx, > + brcmf_fw_request_done_alt_path); > kfree(alt_path); > } else { > ret = request_firmware_nowait(THIS_MODULE, true, first->path,