diff options
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.patch | 69 |
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 0000000..230e891 --- /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 */ |