[PATCH] brcmfmac: fix RSSI report in AP mode

From: Alex Shumsky
Date: Fri Nov 22 2024 - 16:04:37 EST


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