From 8269025d5bb325327e87b4eed6493cd355d52a55 Mon Sep 17 00:00:00 2001 From: avishad verma Date: Thu, 19 Jun 2025 06:13:47 -0500 Subject: [PATCH] brcmfmac: Restrict SDIO CMD53 access when bus in sleep. When SDIO bus is sleep (KSO is off), as per the KSO rule restrict all SDIO command 53 access. Fixes SWWLAN-153672 Signed-off-by: avishad verma --- .../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index 1fb8c01194c3..14495b7b48f0 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c @@ -237,6 +237,7 @@ static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev, if (brcmf_sdio_bus_sleep_state(sdiodev->bus)) { if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: Write operation when bus is in sleep state\n"); + return -EPERM; } if (sdiodev->sbwad_valid && (bar0 == sdiodev->sbwad)) @@ -264,6 +265,9 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret) if (brcmf_sdio_bus_sleep_state(sdiodev->bus)) { if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: Read operation when bus is in sleep state\n"); + if (ret) + *ret = -EPERM; + return data; } retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); @@ -293,6 +297,9 @@ void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, if (brcmf_sdio_bus_sleep_state(sdiodev->bus)) { if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: Write operation when bus is in sleep state\n"); + if (ret) + *ret = -EPERM; + return; } retval = brcmf_sdiod_set_backplane_window(sdiodev, addr); @@ -321,6 +328,7 @@ static int brcmf_sdiod_skbuff_read(struct brcmf_sdio_dev *sdiodev, if (brcmf_sdio_bus_sleep_state(sdiodev->bus)) { if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: Read operation when bus is in sleep state\n"); + return -EPERM; } /* Single skb use the standard mmc interface */ @@ -361,6 +369,7 @@ static int brcmf_sdiod_skbuff_write(struct brcmf_sdio_dev *sdiodev, if (brcmf_sdio_bus_sleep_state(sdiodev->bus)) { if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: Write operation when bus is in sleep state\n"); + return -EPERM; } /* Single skb use the standard mmc interface */ @@ -392,6 +401,7 @@ static int mmc_submit_one(struct mmc_data *md, struct mmc_request *mr, if (!sdiodev->ignore_bus_error) brcmf_err("ERROR: %s operation when bus is in sleep state\n", write ? "Write" : "Read"); + return -EPERM; } md->sg_len = sg_cnt;