aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch')
-rw-r--r--package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch190
1 files changed, 190 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch b/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch
new file mode 100644
index 0000000000..3c78af89d8
--- /dev/null
+++ b/package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch
@@ -0,0 +1,190 @@
+From a7c3aa1509e243a09c5b1660c8702d792ca76aed Mon Sep 17 00:00:00 2001
+From: Ian Molton <ian@mnementh.co.uk>
+Date: Fri, 8 Dec 2017 13:10:31 +0100
+Subject: [PATCH] brcmfmac: Remove brcmf_sdiod_addrprep()
+
+This function has become trivial enough that it may as well be pushed into
+its callers, which has the side-benefit of clarifying what's going on.
+
+Remove it, and rename brcmf_sdiod_set_sbaddr_window() to
+brcmf_sdiod_set_backplane_window() as it's easier to understand.
+
+Signed-off-by: Ian Molton <ian@mnementh.co.uk>
+Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 84 ++++++++++++----------
+ 1 file changed, 46 insertions(+), 38 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+@@ -230,41 +230,25 @@ void brcmf_sdiod_change_state(struct brc
+ sdiodev->state = state;
+ }
+
+-static int brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev,
+- u32 address)
++static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev,
++ u32 addr)
+ {
++ u32 v, bar0 = addr & SBSDIO_SBWINDOW_MASK;
+ int err = 0, i;
+- u32 addr;
+
+- if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
+- return -ENOMEDIUM;
++ if (bar0 == sdiodev->sbwad)
++ return 0;
+
+- addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
++ v = bar0 >> 8;
+
+- for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
++ for (i = 0 ; i < 3 && !err ; i++, v >>= 8)
+ brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
+- addr & 0xff, &err);
+-
+- return err;
+-}
+-
+-static int brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr)
+-{
+- uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK;
+- int err = 0;
+-
+- if (bar0 != sdiodev->sbwad) {
+- err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0);
+- if (err)
+- return err;
++ v & 0xff, &err);
+
++ if (!err)
+ sdiodev->sbwad = bar0;
+- }
+-
+- *addr &= SBSDIO_SB_OFT_ADDR_MASK;
+- *addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
+
+- return 0;
++ return err;
+ }
+
+ u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
+@@ -272,11 +256,16 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
+ u32 data = 0;
+ int retval;
+
+- retval = brcmf_sdiod_addrprep(sdiodev, &addr);
++ retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
++ if (retval)
++ goto out;
++
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
+
+- if (!retval)
+- data = sdio_readl(sdiodev->func[1], addr, &retval);
++ data = sdio_readl(sdiodev->func[1], addr, &retval);
+
++out:
+ if (ret)
+ *ret = retval;
+
+@@ -288,11 +277,16 @@ void brcmf_sdiod_writel(struct brcmf_sdi
+ {
+ int retval;
+
+- retval = brcmf_sdiod_addrprep(sdiodev, &addr);
++ retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
++ if (retval)
++ goto out;
++
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
+
+- if (!retval)
+- sdio_writel(sdiodev->func[1], data, addr, &retval);
++ sdio_writel(sdiodev->func[1], data, addr, &retval);
+
++out:
+ if (ret)
+ *ret = retval;
+ }
+@@ -540,10 +534,13 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
+
+ brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
+
+- err = brcmf_sdiod_addrprep(sdiodev, &addr);
++ err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
+ if (err)
+ goto done;
+
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
++
+ err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
+
+ done:
+@@ -561,10 +558,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
+ brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
+ addr, pktq->qlen);
+
+- err = brcmf_sdiod_addrprep(sdiodev, &addr);
++ err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
+ if (err)
+ goto done;
+
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
++
+ if (pktq->qlen == 1)
+ err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
+ pktq->next);
+@@ -606,7 +606,12 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
+
+ memcpy(mypkt->data, buf, nbytes);
+
+- err = brcmf_sdiod_addrprep(sdiodev, &addr);
++ err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
++ if (err)
++ return err;
++
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
+
+ if (!err)
+ err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
+@@ -625,10 +630,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
+
+ brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
+
+- err = brcmf_sdiod_addrprep(sdiodev, &addr);
++ err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
+ if (err)
+ return err;
+
++ addr &= SBSDIO_SB_OFT_ADDR_MASK;
++ addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
++
+ if (pktq->qlen == 1 || !sdiodev->sg_support) {
+ skb_queue_walk(pktq, skb) {
+ err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
+@@ -673,7 +681,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
+ /* Do the transfer(s) */
+ while (size) {
+ /* Set the backplane window to include the start address */
+- err = brcmf_sdiod_set_sbaddr_window(sdiodev, address);
++ err = brcmf_sdiod_set_backplane_window(sdiodev, address);
+ if (err)
+ break;
+
+@@ -716,7 +724,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
+ dev_kfree_skb(pkt);
+
+ /* Return the window to backplane enumeration space for core access */
+- if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad))
++ if (brcmf_sdiod_set_backplane_window(sdiodev, sdiodev->sbwad))
+ brcmf_err("FAILED to set window back to 0x%x\n",
+ sdiodev->sbwad);
+