Search Linux Wireless

Re: [PATCH v2] ath10k: Update the phymode along with bandwidth change request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2018-06-08 at 11:32 -0700, Ryan Hsu wrote:
> In the case of Station connects to AP with narrower bandwidth at
> beginning.
> And later the AP changes the bandwidth to winder bandwidth, the AP
> will
> beacon with wider bandwidth IE, eg VHT20->VHT40->VHT80 or VHT40-
> >VHT80.
> 
> Since the supported BANDWIDTH will be limited by the PHYMODE, so
> while
> Station receives the bandwidth change request, it will also need to
> reconfigure the PHYMODE setting to firmware instead of just
> configuring
> the BANDWIDTH info, otherwise it'll trigger a firmware crash with
> non-support bandwidth.
> 
> The issue was observed in WLAN.RM.4.4.1-00051-QCARMSWP-1, QCA6174
> with
> below scenario.
> ---
> AP xxx changed bandwidth, new config is 5200 MHz, width 2 (5190/0
> MHz)
> disconnect from AP xxx for new auth to yyy
> RX ReassocResp from xxx (capab=0x1111 status=0 aid=102)
> associated
> 
> ....
> 
> AP xxx changed bandwidth, new config is 5200 MHz, width 2 (5190/0
> MHz)
> AP xxx changed bandwidth, new config is 5200 MHz, width 3 (5210/0
> MHz)
> 
> ....
> 
> firmware register dump:
> [00]: 0x05030000 0x000015B3 0x00987291 0x00955B31
> [04]: 0x00987291 0x00060730 0x00000004 0x00000001
> [08]: 0x004089F0 0x00955A00 0x000A0B00 0x00400000
> [12]: 0x00000009 0x00000000 0x00952CD0 0x00952CE6
> [16]: 0x00952CC4 0x0098E25F 0x00000000 0x0091080D
> [20]: 0x40987291 0x0040E7A8 0x00000000 0x0041EE3C
> [24]: 0x809ABF05 0x0040E808 0x00000000 0xC0987291
> [28]: 0x809A650C 0x0040E948 0x0041FE40 0x004345C4
> [32]: 0x809A5C63 0x0040E988 0x0040E9AC 0x0042D1A8
> [36]: 0x8091D252 0x0040E9A8 0x00000002 0x00000001
> [40]: 0x809FDA9D 0x0040EA58 0x0043D554 0x0042D554
> [44]: 0x809F8B22 0x0040EA78 0x0043D554 0x00000001
> [48]: 0x80911210 0x0040EAC8 0x00000010 0x004041D0
> [52]: 0x80911154 0x0040EB28 0x00400000 0x00000000
> [56]: 0x8091122D 0x0040EB48 0x00000000 0x00400600
> --
> 
> Reported-by: Rouven Czerwinski <rouven@xxxxxxxxxxxxxx>
> Signed-off-by: Ryan Hsu <ryanhsu@xxxxxxxxxxxxxx>
> ---
>  drivers/net/wireless/ath/ath10k/mac.c | 16 ++++++++++++++--
>  drivers/net/wireless/ath/ath10k/wmi.h |  1 +
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath10k/mac.c
> b/drivers/net/wireless/ath/ath10k/mac.c
> index e9c2fb3..836e0a4 100644
> --- a/drivers/net/wireless/ath/ath10k/mac.c
> +++ b/drivers/net/wireless/ath/ath10k/mac.c
> @@ -6058,8 +6058,19 @@ static void ath10k_sta_rc_update_wk(struct
> work_struct *wk)
>  			   ath10k_mac_max_vht_nss(vht_mcs_mask)));
>  
>  	if (changed & IEEE80211_RC_BW_CHANGED) {
> -		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM
> peer bw %d\n",
> -			   sta->addr, bw);
> +		enum wmi_phy_mode mode;
> +
> +		mode = chan_to_phymode(&def);
> +		ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM
> peer bw %d phymode %d\n",
> +				sta->addr, bw, mode);
> +
> +		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id,
> sta->addr,
> +				WMI_PEER_PHYMODE, mode);
> +		if (err) {
> +			ath10k_warn(ar, "failed to update STA %pM
> peer phymode %d: %d\n",
> +					sta->addr, mode, err);
> +			goto exit;
> +		}
>  
>  		err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id,
> sta->addr,
>  						WMI_PEER_CHAN_WIDTH,
> bw);
> @@ -6100,6 +6111,7 @@ static void ath10k_sta_rc_update_wk(struct
> work_struct *wk)
>  				    sta->addr);
>  	}
>  
> +exit:
>  	mutex_unlock(&ar->conf_mutex);
>  }
>  
> diff --git a/drivers/net/wireless/ath/ath10k/wmi.h
> b/drivers/net/wireless/ath/ath10k/wmi.h
> index b48db54..d68afb6 100644
> --- a/drivers/net/wireless/ath/ath10k/wmi.h
> +++ b/drivers/net/wireless/ath/ath10k/wmi.h
> @@ -6144,6 +6144,7 @@ enum wmi_peer_param {
>  	WMI_PEER_NSS        = 0x5,
>  	WMI_PEER_USE_4ADDR  = 0x6,
>  	WMI_PEER_DEBUG      = 0xa,
> +	WMI_PEER_PHYMODE    = 0xd,
>  	WMI_PEER_DUMMY_VAR  = 0xff, /* dummy parameter for STA PS
> workaround */
>  };
>  


Hi,

I can confirm that this patch works on my machine, and prevents the
crash previously caused by changing the bandwidth. Can it be accepted,
or is there anything I can help with, to get it accepted?

Thanks,
Tim




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux