aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch')
-rw-r--r--package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch b/package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch
new file mode 100644
index 0000000000..230e891cea
--- /dev/null
+++ b/package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch
@@ -0,0 +1,69 @@
+From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
+From: Arend Van Spriel <arend.vanspriel@broadcom.com>
+Date: Tue, 20 Feb 2018 00:14:19 +0100
+Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
+ brcmf_sdio_bus_preinit()
+
+Allocate the control rx buffer needed for firmware control interface
+during brcmf_sdio_bus_preinit(). This relies on common layer setting
+struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
+we can move brcmf_attach() in subsequent change.
+
+Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
+Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
+Reviewed-by: Franky Lin <franky.lin@broadcom.com>
+Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 26 ++++++++++------------
+ 1 file changed, 12 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
+ int sdret;
+
+ brcmf_dbg(TRACE, "Enter\n");
+-
+ if (bus->rxblen)
+ buf = vzalloc(bus->rxblen);
+ if (!buf)
+@@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
+ u32 value;
+ int err;
+
++ /* maxctl provided by common layer */
++ if (WARN_ON(!bus_if->maxctl))
++ return -EINVAL;
++
++ /* Allocate control receive buffer */
++ bus_if->maxctl += bus->roundup;
++ value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
++ value += bus->head_align;
++ bus->rxbuf = kmalloc(value, GFP_ATOMIC);
++ if (bus->rxbuf)
++ bus->rxblen = value;
++
+ /* the commands below use the terms tx and rx from
+ * a device perspective, ie. bus:txglom affects the
+ * bus transfers from device to host.
+@@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
+ bus->blocksize = bus->sdiodev->func2->cur_blksize;
+ bus->roundup = min(max_roundup, bus->blocksize);
+
+- /* Allocate buffers */
+- if (bus->sdiodev->bus_if->maxctl) {
+- bus->sdiodev->bus_if->maxctl += bus->roundup;
+- bus->rxblen =
+- roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
+- ALIGNMENT) + bus->head_align;
+- bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
+- if (!(bus->rxbuf)) {
+- brcmf_err("rxbuf allocation failed\n");
+- goto fail;
+- }
+- }
+-
+ sdio_claim_host(bus->sdiodev->func1);
+
+ /* Disable F2 to clear any intermediate frame state on the dongle */