blob: 5514339af9cd9f27ea9d14089aa2c2d531800d50 [file] [log] [blame]
From e93433a00ee18a27cfb9ef6a9cd0df6c28f96cb7 Mon Sep 17 00:00:00 2001
From: Peter Chiu <chui-hao.chiu@mediatek.com>
Date: Wed, 21 Sep 2022 13:25:26 +0800
Subject: [PATCH] mt76: mt7915: set chainmask to 3 for mt7916
Use chainmask to represent the number of TRx path and set it to 3 for mt7916.
Use antenna_mask to represent the TRx streams.
Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
---
mt7915/init.c | 11 ++++++-----
mt7915/main.c | 6 +++++-
mt7915/mcu.c | 2 +-
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/mt7915/init.c b/mt7915/init.c
index 489f6e77..8474c11f 100644
--- a/mt7915/init.c
+++ b/mt7915/init.c
@@ -730,11 +730,12 @@ void mt7915_set_stream_vht_txbf_caps(struct mt7915_phy *phy)
}
static void
-mt7915_set_stream_he_txbf_caps(struct mt7915_dev *dev,
- struct ieee80211_sta_he_cap *he_cap,
- int vif, int nss)
+mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
+ struct ieee80211_sta_he_cap *he_cap, int vif)
{
+ struct mt7915_dev *dev = phy->dev;
struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
+ int nss = hweight8(phy->mt76->chainmask);
u8 c, nss_160;
/* Can do 1/2 of NSS streams in 160Mhz mode for mt7915 */
@@ -839,7 +840,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
struct ieee80211_sband_iftype_data *data)
{
struct mt7915_dev *dev = phy->dev;
- int i, idx = 0, nss = hweight8(phy->mt76->chainmask);
+ int i, idx = 0, nss = hweight8(phy->mt76->antenna_mask);
u16 mcs_map = 0;
u16 mcs_map_160 = 0;
u8 nss_160;
@@ -972,7 +973,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map_160);
he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map_160);
- mt7915_set_stream_he_txbf_caps(dev, he_cap, i, nss);
+ mt7915_set_stream_he_txbf_caps(phy, he_cap, i);
memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
if (he_cap_elem->phy_cap_info[6] &
diff --git a/mt7915/main.c b/mt7915/main.c
index edd678ce..fc5319da 100644
--- a/mt7915/main.c
+++ b/mt7915/main.c
@@ -952,6 +952,7 @@ mt7915_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
struct mt7915_dev *dev = mt7915_hw_dev(hw);
struct mt7915_phy *phy = mt7915_hw_phy(hw);
int max_nss = hweight8(hw->wiphy->available_antennas_tx);
+ int tx_nss = hweight8(tx_ant), rx_nss = hweight8(rx_ant);
bool ext_phy = phy != &dev->phy;
if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
@@ -964,7 +965,10 @@ mt7915_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
if (ext_phy)
tx_ant <<= dev->chainshift;
- phy->mt76->chainmask = tx_ant;
+ if (is_mt7916(&dev->mt76) && tx_nss == max_nss && rx_nss == max_nss)
+ phy->mt76->chainmask = 0x7;
+ else
+ phy->mt76->chainmask = tx_ant;
mt76_set_stream_caps(phy->mt76, true);
mt7915_set_stream_vht_txbf_caps(phy);
diff --git a/mt7915/mcu.c b/mt7915/mcu.c
index 19a33120..f11ca25d 100644
--- a/mt7915/mcu.c
+++ b/mt7915/mcu.c
@@ -485,7 +485,7 @@ static void
mt7915_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
struct mt7915_phy *phy)
{
- int max_nss = hweight8(phy->mt76->chainmask);
+ int max_nss = hweight8(phy->mt76->antenna_mask);
struct bss_info_ra *ra;
struct tlv *tlv;
--
2.18.0