You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.4 KiB
69 lines
2.4 KiB
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 */
|
|
|