Skip to content

Commit

Permalink
brcmfmac: support CQM RSSI notification with older firmware
Browse files Browse the repository at this point in the history
Using the BCM4339 firmware from linux-firmware (version "BCM4339/2 wl0:
Sep  5 2019 11:05:52 version 6.37.39.113 (r722271 CY)" from
cypress/cyfmac4339-sdio.bin) the RSSI respose is only 4 bytes, which
results in an error being logged.

It seems that older devices send only the RSSI field and neither SNR nor
noise is included.  Handle this by accepting a 4 byte message and
reading only the RSSI from it.

Fixes: 7dd56ea ("brcmfmac: add support for CQM RSSI notifications")
Signed-off-by: John Keeping <john@metanate.com>
  • Loading branch information
johnkeeping authored and intel-lab-lkp committed Jan 23, 2023
1 parent 4ca6902 commit 9e64c42
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
Expand Up @@ -6489,18 +6489,20 @@ static s32 brcmf_notify_rssi(struct brcmf_if *ifp,
{
struct brcmf_cfg80211_vif *vif = ifp->vif;
struct brcmf_rssi_be *info = data;
s32 rssi, snr, noise;
s32 rssi, snr = 0, noise = 0;
s32 low, high, last;

if (e->datalen < sizeof(*info)) {
if (e->datalen >= sizeof(*info)) {
rssi = be32_to_cpu(info->rssi);
snr = be32_to_cpu(info->snr);
noise = be32_to_cpu(info->noise);
} else if (e->datalen >= sizeof(rssi)) {
rssi = be32_to_cpu(*(s32 *)data);
} else {
brcmf_err("insufficient RSSI event data\n");
return 0;
}

rssi = be32_to_cpu(info->rssi);
snr = be32_to_cpu(info->snr);
noise = be32_to_cpu(info->noise);

low = vif->cqm_rssi_low;
high = vif->cqm_rssi_high;
last = vif->cqm_rssi_last;
Expand Down

0 comments on commit 9e64c42

Please sign in to comment.