From 1cb80515d4d3ed5a6f5121c3947867ed971b228f Mon Sep 17 00:00:00 2001 From: Owen Huang Date: Wed, 8 Feb 2023 20:38:57 -0600 Subject: [PATCH 218/296] non-upstream: btsdio: reset bt in remove flow when bt shared sdio enabled When BT over SDIO, need to follow below sequence to insert/remove wlan/bt module: * insert wlan -> insert bt -> remove bt -> remove wlan So wlan driver must reset bt in remove flow, otherwise sdio core will not be reset properly. * 43022: set BT reset by BT driver * H1 combo: set BT reset by WL driver Issue history * commit 6c5848fb21b7 ("non-upstream: reset bt in remove flow when bt shared sdio enabled") * commit 521c17c33268 ("non-upstream: set bt reset on H1 only") * commit 0f1a4c85e942 ("non-upstream: remove invalid register access to fix command error") Signed-off-by: Owen Huang --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++++ drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 + 2 files changed, 6 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 3a99975f739e..5e6e4dde772d 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -5573,6 +5573,11 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus) &err); reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET; + if (inf_btsdio_set_bt_reset(bus_if)) + reg_val |= SDIO_CCCR_BRCM_CARDCTRL_BTRESET; + + brcmf_dbg(SDIO, "Write CARDCTRL = 0x%x\n", reg_val); + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err); brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h index fa86cf932c51..7c5fadd5cd03 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h @@ -63,6 +63,7 @@ #define SDIO_CCCR_BRCM_CARDCTRL 0xf1 #define SDIO_CCCR_BRCM_CARDCTRL_WLANRESET BIT(1) +#define SDIO_CCCR_BRCM_CARDCTRL_BTRESET BIT(2) #define SDIO_CCCR_BRCM_SEPINT 0xf2 #define SDIO_CCCR_BRCM_SEPINT_MASK BIT(0) -- 2.25.1