Return-path: Received: from mail-wm0-f65.google.com ([74.125.82.65]:33398 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753123AbeFKQF6 (ORCPT ); Mon, 11 Jun 2018 12:05:58 -0400 Received: by mail-wm0-f65.google.com with SMTP id z6-v6so16287557wma.0 for ; Mon, 11 Jun 2018 09:05:57 -0700 (PDT) Message-ID: <944989ec907b98716f252524cf55e41807965253.camel@gmail.com> (sfid-20180611_180603_726311_74FAE3C4) Subject: Re: [PATCH v2] ath10k: Update the phymode along with bandwidth change request From: Timur =?ISO-8859-1?Q?Krist=F3f?= To: Ryan Hsu , ath10k@lists.infradead.org, linux-wireless@vger.kernel.org Cc: Kalle Valo Date: Mon, 11 Jun 2018 18:05:53 +0200 In-Reply-To: <1528482759-12604-1-git-send-email-ryanhsu@codeaurora.org> References: <1528482759-12604-1-git-send-email-ryanhsu@codeaurora.org> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: 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 > Signed-off-by: Ryan Hsu > --- > 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