08.08.2021 17:28, Dmitry Osipenko пишет: > From: Linus Walleij <linus.walleij@xxxxxxxxxx> > > The patch that would first try the board-specific firmware > had a bug because the fallback would not be called: the > asynchronous interface is used meaning request_firmware_nowait() > returns 0 immediately. > > Harden the firmware loading like this: > > - If we cannot build an alt_path (like if no board_type is > specified) just request the first firmware without any > suffix, like in the past. > > - If the lookup of a board specific firmware fails, we get > a NULL fw in the async callback, so just try again without > the alt_path from a dedicated brcm_fw_request_done_alt_path > callback. > > - Drop the unnecessary prototype of brcm_fw_request_done. > > Fixes: 5ff013914c62 ("brcmfmac: firmware: Allow per-board firmware binaries") > Cc: Stefan Hansson <newbyte@xxxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx> > --- > ChangeLog v3->v4: > - Added brcmf_fw_request_done_alt_path() callback to replace the > "tried_board_variant" variable, making code cleaner and errors > handled consistently. > ChangeLog v2->v3: > - Rename state variable to "tried_board_variant". > ChangeLog v1->v2: > - Instead of using a static variable, add a context variable > "tested_board_variant" > - Collect Arend's review tag. > - Collect Tested-by from Dmitry. > --- > .../broadcom/brcm80211/brcmfmac/firmware.c | 24 ++++++++++++++----- > 1 file changed, 18 insertions(+), 6 deletions(-) I'm now wondering whether we also need to specify the MODULE_FIRMWARE to cover the board binaries. diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 97ee9e2e2e35..e7150312d186 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -625,6 +625,9 @@ BRCMF_FW_DEF(4359, "brcmfmac4359-sdio"); BRCMF_FW_CLM_DEF(4373, "brcmfmac4373-sdio"); BRCMF_FW_CLM_DEF(43012, "brcmfmac43012-sdio"); +/* firmware including board-specific binaries */ +MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-sdio.*.bin"); + /* firmware config files */ MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-sdio.*.txt"); MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");