aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch')
-rw-r--r--package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch b/package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch
new file mode 100644
index 0000000000..a8b0171cb3
--- /dev/null
+++ b/package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch
@@ -0,0 +1,106 @@
+From 262f2b53f67936b59cc8dfc6f3899ab8905bf1ed Mon Sep 17 00:00:00 2001
+From: Arend Van Spriel <arend.vanspriel@broadcom.com>
+Date: Tue, 20 Feb 2018 00:14:20 +0100
+Subject: [PATCH] brcmfmac: call brcmf_attach() just before calling
+ brcmf_bus_started()
+
+Now we can move brcmf_attach() until after the firmware has been downloaded
+to the device. Make the call just before brcmf_bus_started().
+
+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/core.c | 6 ++++
+ .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 34 +++++++++++-----------
+ 2 files changed, 23 insertions(+), 17 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+@@ -1268,6 +1268,12 @@ void brcmf_bus_change_state(struct brcmf
+ int ifidx;
+
+ brcmf_dbg(TRACE, "%d -> %d\n", bus->state, state);
++
++ if (!drvr) {
++ brcmf_dbg(INFO, "ignoring transition, bus not attached yet\n");
++ return;
++ }
++
+ bus->state = state;
+
+ if (state == BRCMF_BUS_UP) {
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -4048,9 +4048,6 @@ static void brcmf_sdio_firmware_callback
+ if (err)
+ goto fail;
+
+- if (!bus_if->drvr)
+- return;
+-
+ /* try to download image and nvram to the dongle */
+ bus->alp_only = true;
+ err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
+@@ -4126,11 +4123,28 @@ static void brcmf_sdio_firmware_callback
+
+ sdio_release_host(sdiodev->func1);
+
++ /* Assign bus interface call back */
++ sdiodev->bus_if->dev = sdiodev->dev;
++ sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
++ sdiodev->bus_if->chip = bus->ci->chip;
++ sdiodev->bus_if->chiprev = bus->ci->chiprev;
++
++ /* Attach to the common layer, reserve hdr space */
++ err = brcmf_attach(sdiodev->dev, sdiodev->settings);
++ if (err != 0) {
++ brcmf_err("brcmf_attach failed\n");
++ goto fail;
++ }
++
++ brcmf_sdio_debugfs_create(bus);
++
+ err = brcmf_bus_started(dev);
+ if (err != 0) {
+ brcmf_err("dongle is not responding\n");
+ goto fail;
+ }
++
++ /* ready */
+ return;
+
+ release:
+@@ -4200,22 +4214,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
+ bus->dpc_triggered = false;
+ bus->dpc_running = false;
+
+- /* Assign bus interface call back */
+- bus->sdiodev->bus_if->dev = bus->sdiodev->dev;
+- bus->sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
+- bus->sdiodev->bus_if->chip = bus->ci->chip;
+- bus->sdiodev->bus_if->chiprev = bus->ci->chiprev;
+-
+ /* default sdio bus header length for tx packet */
+ bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
+
+- /* Attach to the common layer, reserve hdr space */
+- ret = brcmf_attach(bus->sdiodev->dev, bus->sdiodev->settings);
+- if (ret != 0) {
+- brcmf_err("brcmf_attach failed\n");
+- goto fail;
+- }
+-
+ /* Query the F2 block size, set roundup accordingly */
+ bus->blocksize = bus->sdiodev->func2->cur_blksize;
+ bus->roundup = min(max_roundup, bus->blocksize);
+@@ -4240,7 +4241,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
+ /* SR state */
+ bus->sr_enabled = false;
+
+- brcmf_sdio_debugfs_create(bus);
+ brcmf_dbg(INFO, "completed!!\n");
+
+ ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,