diff options
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.patch | 106 |
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 0000000..a8b0171 --- /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, |