From f9f8df7449036abe059dc6a8b0c8d326ef9ac232 Mon Sep 17 00:00:00 2001 From: avishad verma Date: Mon, 10 Oct 2022 06:44:09 -0500 Subject: [PATCH 162/296] brcmfmac: Wait for bootloader ready before doing backplane access Fixes: SWWLAN-144484 Signed-off-by: Avishad Verma avishad.verma@infineon.com --- .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 0ca4ac33b4bb..cdefb0a68e0e 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -4489,6 +4489,7 @@ brcmf_sdio_buscore_sec_attach(void *ctx, struct brcmf_blhs **blhs, struct brcmf_ struct brcmf_blhs *blhsh = NULL; struct brcmf_ccsec *ccsech = NULL; u32 reg_addr; + u32 regdata; u8 cardcap; if (sdiodev->func1->vendor != SDIO_VENDOR_ID_CYPRESS) @@ -4505,6 +4506,17 @@ brcmf_sdio_buscore_sec_attach(void *ctx, struct brcmf_blhs **blhs, struct brcmf_ blhsh->read = brcmf_sdio_buscore_blhs_read; blhsh->write = brcmf_sdio_buscore_blhs_write; + blhsh->write(ctx, blhsh->h2d, 0); + + SPINWAIT_MS((blhsh->read(ctx, blhsh->d2h) & flag) == 0, + timeout, interval); + + regdata = blhsh->read(ctx, blhsh->d2h); + if (!(regdata & flag)) { + brcmf_err("Timeout waiting for bootloader ready\n"); + kfree(blhsh); + return -EPERM; + } *blhs = blhsh; } -- 2.25.1