123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- From 262f2b53f67936b59cc8dfc6f3899ab8905bf1ed Mon Sep 17 00:00:00 2001
- From: Arend Van Spriel <[email protected]>
- 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 <[email protected]>
- Reviewed-by: Pieter-Paul Giesberts <[email protected]>
- Reviewed-by: Franky Lin <[email protected]>
- Signed-off-by: Arend van Spriel <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- .../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,
|