Message ID | CA+BoTQmKNL+Zruv4oh51ucgKNCUR8s2OGfr4LRD-sMUL=20kEg@mail.gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
2015-08-26 7:01 GMT+02:00 Michal Kazior <michal.kazior@tieto.com>: > On 25 August 2015 at 16:04, Lapo Calamandrei <calamandrei@gmail.com> wrote: > [...] >> Yep, the previous crash was without your patch applied, the following >> is with the patch applied though. >> >> iw list output: > [...] >> Band 2: >> Capabilities: 0x19e3 >> RX LDPC >> HT20/HT40 >> Static SM Power Save >> RX HT20 SGI >> RX HT40 SGI >> TX STBC >> RX STBC 1-stream >> Max AMSDU length: 7935 bytes >> DSSS/CCK HT40 >> Maximum RX AMPDU length 65535 bytes (exponent: 0x003) >> Minimum RX AMPDU time spacing: 8 usec (0x06) >> HT TX/RX MCS rate indexes supported: 0-15 >> VHT Capabilities (0x339011b2): >> Max MPDU length: 11454 >> Supported Channel Width: neither 160 nor 80+80 >> RX LDPC >> short GI (80 MHz) >> TX STBC >> SU Beamformee >> MU Beamformee > [...] > > Sorry, my bad. The diff I provided earlier wasn't correct (it was a > quick hack-idea I didn't test myself). > > The correct thing that should work is: > > --- a/drivers/net/wireless/ath/ath10k/mac.c > +++ b/drivers/net/wireless/ath/ath10k/mac.c > @@ -6798,27 +6798,14 @@ static struct ieee80211_sta_vht_cap > ath10k_create_vht_cap(struct ath10k *ar) > u32 val; > int i; > > + ar->vht_cap_info &= ~(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | > + IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | > + IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | > + IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE); > + > vht_cap.vht_supported = 1; > vht_cap.cap = ar->vht_cap_info; > > - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | > - IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) { > - val = ar->num_rf_chains - 1; > - val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT; > - val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK; > - > - vht_cap.cap |= val; > - } > - > - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | > - IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) { > - val = ar->num_rf_chains - 1; > - val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT; > - val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK; > - > - vht_cap.cap |= val; > - } > - > mcs_map = 0; > for (i = 0; i < 8; i++) { > if (i < ar->num_rf_chains) > > > Micha? The firmware crash is gone now, thanks. Do you need any kind of additional tests on this hw I can do? Ciao Lapo
On 26 August 2015 at 12:05, Lapo Calamandrei <calamandrei@gmail.com> wrote: > 2015-08-26 7:01 GMT+02:00 Michal Kazior <michal.kazior@tieto.com>: >> On 25 August 2015 at 16:04, Lapo Calamandrei <calamandrei@gmail.com> wrote: >> [...] >>> Yep, the previous crash was without your patch applied, the following >>> is with the patch applied though. >>> >>> iw list output: >> [...] >>> Band 2: >>> Capabilities: 0x19e3 >>> RX LDPC >>> HT20/HT40 >>> Static SM Power Save >>> RX HT20 SGI >>> RX HT40 SGI >>> TX STBC >>> RX STBC 1-stream >>> Max AMSDU length: 7935 bytes >>> DSSS/CCK HT40 >>> Maximum RX AMPDU length 65535 bytes (exponent: 0x003) >>> Minimum RX AMPDU time spacing: 8 usec (0x06) >>> HT TX/RX MCS rate indexes supported: 0-15 >>> VHT Capabilities (0x339011b2): >>> Max MPDU length: 11454 >>> Supported Channel Width: neither 160 nor 80+80 >>> RX LDPC >>> short GI (80 MHz) >>> TX STBC >>> SU Beamformee >>> MU Beamformee >> [...] >> >> Sorry, my bad. The diff I provided earlier wasn't correct (it was a >> quick hack-idea I didn't test myself). >> >> The correct thing that should work is: >> >> --- a/drivers/net/wireless/ath/ath10k/mac.c >> +++ b/drivers/net/wireless/ath/ath10k/mac.c >> @@ -6798,27 +6798,14 @@ static struct ieee80211_sta_vht_cap >> ath10k_create_vht_cap(struct ath10k *ar) >> u32 val; >> int i; >> >> + ar->vht_cap_info &= ~(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | >> + IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | >> + IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | >> + IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE); >> + >> vht_cap.vht_supported = 1; >> vht_cap.cap = ar->vht_cap_info; >> >> - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | >> - IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) { >> - val = ar->num_rf_chains - 1; >> - val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT; >> - val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK; >> - >> - vht_cap.cap |= val; >> - } >> - >> - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | >> - IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) { >> - val = ar->num_rf_chains - 1; >> - val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT; >> - val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK; >> - >> - vht_cap.cap |= val; >> - } >> - >> mcs_map = 0; >> for (i = 0; i < 8; i++) { >> if (i < ar->num_rf_chains) >> >> >> Micha? > > The firmware crash is gone now, thanks. Awesome. Thanks for testing! > Do you need any kind of > additional tests on this hw I can do? No, thanks. Micha?
--- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -6798,27 +6798,14 @@ static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar) u32 val; int i; + ar->vht_cap_info &= ~(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | + IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | + IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | + IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE); + vht_cap.vht_supported = 1; vht_cap.cap = ar->vht_cap_info; - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | - IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) { - val = ar->num_rf_chains - 1; - val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT; - val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK; - - vht_cap.cap |= val; - } - - if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | - IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) { - val = ar->num_rf_chains - 1; - val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT; - val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK; - - vht_cap.cap |= val; - } - mcs_map = 0; for (i = 0; i < 8; i++) {