From fc330dcb37cf3e550c25b4ff457576acd6977eb8 Mon Sep 17 00:00:00 2001 From: Gaurang Rathod Date: Wed, 27 Sep 2023 09:08:57 -0500 Subject: [PATCH 250/296] brcmfmac: resetting sb window address Sb window address should be reseted when KSO is 0. Signed-off-by: Gaurang Rathod Gaurang.Rathod@infineon.com --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 7 +++++-- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 +++- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index 739e351ff478..12356174efe4 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c @@ -237,7 +237,7 @@ static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev, brcmf_err("WARN: Write operation when bus is in sleep state\n"); } - if (bar0 == sdiodev->sbwad) + if (sdiodev->sbwad_valid && (bar0 == sdiodev->sbwad)) return 0; v = bar0 >> 8; @@ -246,8 +246,10 @@ static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev, brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, v & 0xff, &err); - if (!err) + if (!err) { + sdiodev->sbwad_valid = 1; sdiodev->sbwad = bar0; + } return err; } @@ -968,6 +970,7 @@ int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev) sg_free_table(&sdiodev->sgtable); sdiodev->sbwad = 0; + sdiodev->sbwad_valid = 0; pm_runtime_allow(sdiodev->func1->card->host->parent); return 0; diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index ad442535415f..3ba1e852b886 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -784,8 +784,10 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on) * fail. Thereby just bailing out immediately after clearing KSO * bit, to avoid polling of KSO bit. */ - if (!on) + if (!on) { + bus->sdiodev->sbwad_valid = 0; return err; + } if (on) { /* device WAKEUP through KSO: diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h index e4d884e958e2..b6e9cbc90b01 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h @@ -238,6 +238,7 @@ struct brcmf_sdio_dev { struct sdio_func *func2; struct sdio_func *func3; u32 sbwad; /* Save backplane window address */ + bool sbwad_valid; /* Save backplane window address */ struct brcmf_core *cc_core; /* chipcommon core info struct */ struct brcmf_sdio *bus; struct device *dev; -- 2.25.1