/branches/gl-inet/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 */ |