After commit 9a1590934d9a ("brcmfmac: correctly report average RSSI in station info") it is required from firmware to provide rx_lastpkt_rssi. If this field is not provided brcmfmac doesn't report any RSSI at all. Unfortunately some firmwares doesn't provide it. One example is firmware for BCM43455 found in Raspbberry Pi. See https://github.com/raspberrypi/linux/issues/4574 Fix it by falling back to rssi field if rx_lastpkt_rssi is not provided (like it was before 9a1590934d9a). Fixes: 9a1590934d9a ("brcmfmac: correctly report average RSSI in station info") Signed-off-by: Alex Shumsky <alexthreed@xxxxxxxxx> --- .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index 349aa3439502..8fc10858e936 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -3125,6 +3125,7 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, s32 total_rssi = 0; s32 count_rssi = 0; int rssi; + int rx_lastpkt_rssi; u32 i; brcmf_dbg(TRACE, "Enter, MAC %pM\n", mac); @@ -3190,15 +3191,16 @@ brcmf_cfg80211_get_station(struct wiphy *wiphy, struct net_device *ndev, sinfo->rx_bytes = le64_to_cpu(sta_info_le.rx_tot_bytes); } for (i = 0; i < BRCMF_ANT_MAX; i++) { - if (sta_info_le.rssi[i] == 0 || - sta_info_le.rx_lastpkt_rssi[i] == 0) + if (sta_info_le.rssi[i] == 0) continue; + rx_lastpkt_rssi = sta_info_le.rx_lastpkt_rssi[i] != 0 ? + sta_info_le.rx_lastpkt_rssi[i] : + sta_info_le.rssi[i]; sinfo->chains |= BIT(count_rssi); - sinfo->chain_signal[count_rssi] = - sta_info_le.rx_lastpkt_rssi[i]; + sinfo->chain_signal[count_rssi] = rx_lastpkt_rssi; sinfo->chain_signal_avg[count_rssi] = sta_info_le.rssi[i]; - total_rssi += sta_info_le.rx_lastpkt_rssi[i]; + total_rssi += rx_lastpkt_rssi; total_rssi_avg += sta_info_le.rssi[i]; count_rssi++; } -- 2.34.1