mac80211: backport "brcmfmac: cleanup and some rework" from 4.17
[oweals/openwrt.git] / package / kernel / mac80211 / patches / 325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch
1 From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Tue, 20 Feb 2018 00:14:19 +0100
4 Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
5  brcmf_sdio_bus_preinit()
6
7 Allocate the control rx buffer needed for firmware control interface
8 during brcmf_sdio_bus_preinit(). This relies on common layer setting
9 struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
10 we can move brcmf_attach() in subsequent change.
11
12 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
13 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
14 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
15 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
16 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
17 ---
18  .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 26 ++++++++++------------
19  1 file changed, 12 insertions(+), 14 deletions(-)
20
21 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
22 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
23 @@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
24         int sdret;
25  
26         brcmf_dbg(TRACE, "Enter\n");
27 -
28         if (bus->rxblen)
29                 buf = vzalloc(bus->rxblen);
30         if (!buf)
31 @@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
32         u32 value;
33         int err;
34  
35 +       /* maxctl provided by common layer */
36 +       if (WARN_ON(!bus_if->maxctl))
37 +               return -EINVAL;
38 +
39 +       /* Allocate control receive buffer */
40 +       bus_if->maxctl += bus->roundup;
41 +       value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
42 +       value += bus->head_align;
43 +       bus->rxbuf = kmalloc(value, GFP_ATOMIC);
44 +       if (bus->rxbuf)
45 +               bus->rxblen = value;
46 +
47         /* the commands below use the terms tx and rx from
48          * a device perspective, ie. bus:txglom affects the
49          * bus transfers from device to host.
50 @@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
51         bus->blocksize = bus->sdiodev->func2->cur_blksize;
52         bus->roundup = min(max_roundup, bus->blocksize);
53  
54 -       /* Allocate buffers */
55 -       if (bus->sdiodev->bus_if->maxctl) {
56 -               bus->sdiodev->bus_if->maxctl += bus->roundup;
57 -               bus->rxblen =
58 -                   roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
59 -                           ALIGNMENT) + bus->head_align;
60 -               bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
61 -               if (!(bus->rxbuf)) {
62 -                       brcmf_err("rxbuf allocation failed\n");
63 -                       goto fail;
64 -               }
65 -       }
66 -
67         sdio_claim_host(bus->sdiodev->func1);
68  
69         /* Disable F2 to clear any intermediate frame state on the dongle */