Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp4177548pxt; Tue, 10 Aug 2021 22:59:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyclPAnZg31R7Ov//vmNS27L9Hvg9P9pIVqCfHfY6OJ+Xkd0RYhhjaic7vpgBs0/QfB0Vlv X-Received: by 2002:a92:ddc9:: with SMTP id d9mr78243ilr.204.1628661563406; Tue, 10 Aug 2021 22:59:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628661563; cv=none; d=google.com; s=arc-20160816; b=kd15DuYv9Wh2IahXE7rkhZpZeWJv/PfQ9QN1sgyXKWnnt73/SxZ4DqzBdQI+O5YGfh 2kysDVI+vcYibidZy28dozjE/HhwaFJ9qc/pj7D5Qhy8vbXw5m/tDsNgp8j/K2r9vjuw 24mlJzAuPpqQ9F07jHSYPURQHH2POokqWLzaLjhGc6bsgoGZV9uuHIFDpa+QrdXUEtY4 SD51CZ5G6r0cogdKdjt2PxtTt2GmjaP93Fo6gHlNyA0/ONRYlPxaOz/fxdYLhmEwTzxh HPqSjQ1HhEFZ/pea1x/+/0u1BAOXhDVkjr79nvPHVo7RDkW25lNtcFLtwdHjCBt4mbIe 2pNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=K2k1lq01kW+DKgGWgxek+4X0qeXORdDKW4nEJJcW9IU=; b=1EqIa4Pyokxow8C1jSwE6YjytJxumRj4IH6fsvWFsiuyNXcMmmJRcznEq9X7ZtjmbI KUmHdnDvDgj1V/4U9VWaDkzqaI4vUXP6/GxEBb2UpQCXBOaMVRs6HFJlodn4JIh1Z8jH LyEdOgZQm+jRxY3RTDMnHiRxGIJOXYwjhh/tyd+9NCKZSfy/KSvJrAzTiB8KzkhKUbPq +ICLtaFO303LfCZB5Kk0bcXJHWlzfSs5KKqBvr4cpS0QfpQAkJ0md2+3HseiDRug+mk+ zhxXIWdyDTYzYI68jampv68J1Tk0toElFf8Y/zawtME1CF0jS9j8Hw1NEKrBO2DjQGo0 C+EA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g15si24353274ilc.45.2021.08.10.22.59.06; Tue, 10 Aug 2021 22:59:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234589AbhHKF6x (ORCPT + 99 others); Wed, 11 Aug 2021 01:58:53 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:51620 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S234563AbhHKF6w (ORCPT ); Wed, 11 Aug 2021 01:58:52 -0400 X-UUID: d9acd20eb85242039f8f64c1005a7497-20210811 X-UUID: d9acd20eb85242039f8f64c1005a7497-20210811 Received: from mtkmbs10n2.mediatek.inc [(172.21.101.183)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1897002180; Wed, 11 Aug 2021 13:58:27 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 11 Aug 2021 13:58:25 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 11 Aug 2021 13:58:25 +0800 From: To: , CC: , , , , , , , , , , , , , , , Subject: [PATCH] mt76: mt7921: fix firmware usage of RA info using legacy rates Date: Wed, 11 Aug 2021 13:58:24 +0800 Message-ID: <4be4378630c93ae32a4db8bc3e0871c7b15150a6.1628661185.git.objelf@gmail.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Sean Wang According to the firmware usage, OFDM rates should fill out bit 6 - 13 while CCK rates should fill out bit 0 - 3 in legacy field of RA info to make the rate adaption runs propertly. Otherwise, a unicast frame might be picking up the unsupported rate to send out. Fixes: 1c099ab44727 ("mt76: mt7921: add MCU support") Reported-by: Joshua Emele Co-developed-by: YN Chen Signed-off-by: YN Chen Signed-off-by: Sean Wang --- drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 11 ++++++++++- drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c index a2555dc0f003..27e45f4fc05f 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c @@ -719,6 +719,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb, struct sta_rec_state *state; struct sta_rec_phy *phy; struct tlv *tlv; + u16 supp_rates; /* starec ht */ if (sta->ht_cap.ht_supported) { @@ -767,7 +768,15 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb, tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra_info)); ra_info = (struct sta_rec_ra_info *)tlv; - ra_info->legacy = cpu_to_le16((u16)sta->supp_rates[band]); + + supp_rates = sta->supp_rates[band]; + if (band == NL80211_BAND_2GHZ) + supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates >> 4) | + FIELD_PREP(RA_LEGACY_CCK, supp_rates & 0xf); + else + supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates); + + ra_info->legacy = cpu_to_le16(supp_rates); if (sta->ht_cap.ht_supported) memcpy(ra_info->rx_mcs_bitmask, sta->ht_cap.mcs.rx_mask, diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h index ab77289c0541..9dfdf7625844 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h @@ -124,6 +124,8 @@ struct sta_rec_state { u8 rsv[1]; } __packed; +#define RA_LEGACY_OFDM GENMASK(13, 6) +#define RA_LEGACY_CCK GENMASK(3, 0) #define HT_MCS_MASK_NUM 10 struct sta_rec_ra_info { __le16 tag; -- 2.25.1