Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp5222620pxb; Wed, 26 Jan 2022 07:22:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJzg4kLDsWsBAfP98t8wSie1Y1Om1sUdlMV1g15N01Lq5/SOx9CzlchHArNWDCNeTCkMF+w2 X-Received: by 2002:a17:902:8d8d:b0:14a:dd79:17b2 with SMTP id v13-20020a1709028d8d00b0014add7917b2mr23116410plo.88.1643210546072; Wed, 26 Jan 2022 07:22:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643210546; cv=none; d=google.com; s=arc-20160816; b=ABhot3VUftn8YYPDJTShRd50hnd/qKCQVSepOoAE2tY+JuBlpamrcSGiQ+oKhNns2H YZgetYsLtE4Jtxaal7fX7ElcvUGrOwFxSVJPNnePOC/T37GXMIhvq0NhFJ1tQn9ZhJIt ReIqjDjFIMaflr3j4gvzVYUcYL4rjeS1I3xEG+j0dDwgZODWWYUcvmI+5491gKGzfVxw Cyyi1iAFt7dJAsD509+XOLf+e8BpOU+CUREYkNBEXXrvPNap05MQJZTQ+ShWDS7Usl+D Zy+wd5QNTTd/cX6CmPquDYLSq1P7kmlwEhPyWXqwqLm7kTXbbhFR6dXXkMYGz4Z1W6H0 2g2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=wGyCDlCX/BxIdUlkicITYwGHBE5mfmHbdRnNFCXb9Go=; b=MayytCoEKLYDonSSzLEbqtuoBPtkpPduqrXibGH9aU8bYUA8bstFdWBBxIV9iEMG6B W/+RM6RIQzHrSr9vCFOUwANfBeOHkjqGhqAtseY+W6+psl7DSNPUV6VQ3NqYJ97G/hHh VQfzXTbU56oLEZQ2ssG8lSVJgNdwrpBoGwnzwdmbVHRc33Pth0hgRoWxP6qXVqSf8aiu l6UBbtfjzeP3tly8ldQ/6WsOMmqKrs3sQgmj4j6MAK0pe/rFYIAEhHJLX2Ef/CJrvh6F 48XlDG5Kk7hF4gF7JcJ7wm9ddbQJjQTMTFRdKrc6xwIZxD9c6zx85/ZdgBZaMVzyCU66 VeKA== 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 v23si1740000pfm.65.2022.01.26.07.22.16; Wed, 26 Jan 2022 07:22:26 -0800 (PST) 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 S236128AbiAZCFh (ORCPT + 72 others); Tue, 25 Jan 2022 21:05:37 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:35602 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S236092AbiAZCFg (ORCPT ); Tue, 25 Jan 2022 21:05:36 -0500 X-UUID: 648b016f2fa14e1d96dc999208f0e4d6-20220126 X-UUID: 648b016f2fa14e1d96dc999208f0e4d6-20220126 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 367398257; Wed, 26 Jan 2022 10:05:31 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 26 Jan 2022 10:05:30 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 26 Jan 2022 10:05:30 +0800 From: Peter Chiu To: Felix Fietkau CC: Lorenzo Bianconi , Ryder Lee , Evelyn Tsai , Shayne Chen , , , Peter Chiu Subject: [PATCH] mt76: mt7915: fix mcs_map in mt7915_mcu_set_sta_he_mcs() Date: Wed, 26 Jan 2022 10:05:29 +0800 Message-ID: <20220126020529.12000-2-chui-hao.chiu@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20220126020529.12000-1-chui-hao.chiu@mediatek.com> References: <20220126020529.12000-1-chui-hao.chiu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Should use peer's bandwidth instead of chandef->width to get correct mcs_map. Fixes: 76be6c076c077 ("mt76: mt7915: add .set_bitrate_mask() callback") Signed-off-by: Peter Chiu --- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index 66f8daf3168c..efcadd69ecd7 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -86,24 +86,12 @@ mt7915_mcu_get_sta_nss(u16 mcs_map) static void mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs, - const u16 *mask) + u16 mcs_map) { struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; - struct cfg80211_chan_def *chandef = &msta->vif->phy->mt76->chandef; + enum nl80211_band band = msta->vif->phy->mt76->chandef.chan->band; + const u16 *mask = msta->vif->bitrate_mask.control[band].he_mcs; int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss; - u16 mcs_map; - - switch (chandef->width) { - case NL80211_CHAN_WIDTH_80P80: - mcs_map = le16_to_cpu(sta->he_cap.he_mcs_nss_supp.rx_mcs_80p80); - break; - case NL80211_CHAN_WIDTH_160: - mcs_map = le16_to_cpu(sta->he_cap.he_mcs_nss_supp.rx_mcs_160); - break; - default: - mcs_map = le16_to_cpu(sta->he_cap.he_mcs_nss_supp.rx_mcs_80); - break; - } for (nss = 0; nss < max_nss; nss++) { int mcs; @@ -760,11 +748,9 @@ static void mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta, struct ieee80211_vif *vif) { - struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv; struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem; - enum nl80211_band band = msta->vif->phy->mt76->chandef.chan->band; - const u16 *mcs_mask = msta->vif->bitrate_mask.control[band].he_mcs; + struct ieee80211_he_mcs_nss_supp mcs_map; struct sta_rec_he *he; struct tlv *tlv; u32 cap = 0; @@ -854,22 +840,23 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta, he->he_cap = cpu_to_le32(cap); + mcs_map = sta->he_cap.he_mcs_nss_supp; switch (sta->bandwidth) { case IEEE80211_STA_RX_BW_160: if (elem->phy_cap_info[0] & IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) mt7915_mcu_set_sta_he_mcs(sta, &he->max_nss_mcs[CMD_HE_MCS_BW8080], - mcs_mask); + le16_to_cpu(mcs_map.rx_mcs_80p80)); mt7915_mcu_set_sta_he_mcs(sta, &he->max_nss_mcs[CMD_HE_MCS_BW160], - mcs_mask); + le16_to_cpu(mcs_map.rx_mcs_160)); fallthrough; default: mt7915_mcu_set_sta_he_mcs(sta, &he->max_nss_mcs[CMD_HE_MCS_BW80], - mcs_mask); + le16_to_cpu(mcs_map.rx_mcs_80)); break; } -- 2.29.2