mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	It was described by Arend as: > This series is intended for 4.17 and includes following: > > * rework bus layer attach code. > * remove duplicate variable declaration. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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,
 |