| From c5d00613a478a054816bf3c4b5e5d3f76d05885d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 6 May 2021 13:20:12 +0000 |
| Subject: brcmfmac: fix setting of station info chains bitmask |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Alvin Šipraga <ALSI@bang-olufsen.dk> |
| |
| [ Upstream commit feb45643762172110cb3a44f99dd54304f33b711 ] |
| |
| The sinfo->chains field is a bitmask for filled values in chain_signal |
| and chain_signal_avg, not a count. Treat it as such so that the driver |
| can properly report per-chain RSSI information. |
| |
| Before (MIMO mode): |
| |
| $ iw dev wlan0 station dump |
| ... |
| signal: -51 [-51] dBm |
| |
| After (MIMO mode): |
| |
| $ iw dev wlan0 station dump |
| ... |
| signal: -53 [-53, -54] dBm |
| |
| Fixes: cae355dc90db ("brcmfmac: Add RSSI information to get_station.") |
| Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/20210506132010.3964484-1-alsi@bang-olufsen.dk |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
| index 23e6422c2251..8c3c7755e949 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
| @@ -2838,6 +2838,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, |
| count_rssi = 0; |
| for (i = 0; i < BRCMF_ANT_MAX; i++) { |
| if (sta_info_le.rssi[i]) { |
| + sinfo->chains |= BIT(count_rssi); |
| sinfo->chain_signal_avg[count_rssi] = |
| sta_info_le.rssi[i]; |
| sinfo->chain_signal[count_rssi] = |
| @@ -2848,8 +2849,6 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, |
| } |
| if (count_rssi) { |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL); |
| - sinfo->chains = count_rssi; |
| - |
| sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL); |
| total_rssi /= count_rssi; |
| sinfo->signal = total_rssi; |
| -- |
| 2.30.2 |
| |