From 8fc3e6e02e96c94877b0a37ddb9700d15f7857d9 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 11 Jul 2019 21:17:06 +0200 Subject: [PATCH] mt76: mt7615: fix using VHT STBC rates The hardware expects MT_TX_RATE_NSS to be filled with the number of space/time streams. For non-STBC rates, this is equal to nss. For 1-stream STBC, this needs to be set to 2. This is relevant for VHT rates only, on HT, the value is derived from MCS internally. Signed-off-by: Felix Fietkau --- mt7615/mac.c | 18 ++++++++++++------ mt7615/mcu.c | 3 ++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/mt7615/mac.c b/mt7615/mac.c index 5bfb4594..6c21b2df 100644 --- a/mt7615/mac.c +++ b/mt7615/mac.c @@ -254,7 +254,7 @@ mt7615_mac_tx_rate_val(struct mt7615_dev *dev, bool stbc, u8 *bw) { u8 phy, nss, rate_idx; - u16 rateval; + u16 rateval = 0; *bw = 0; @@ -292,12 +292,14 @@ mt7615_mac_tx_rate_val(struct mt7615_dev *dev, rate_idx = val & 0xff; } - rateval = (FIELD_PREP(MT_TX_RATE_IDX, rate_idx) | - FIELD_PREP(MT_TX_RATE_MODE, phy) | - FIELD_PREP(MT_TX_RATE_NSS, nss - 1)); - - if (stbc && nss == 1) + if (stbc && nss == 1) { + nss++; rateval |= MT_TX_RATE_STBC; + } + + rateval |= (FIELD_PREP(MT_TX_RATE_IDX, rate_idx) | + FIELD_PREP(MT_TX_RATE_MODE, phy) | + FIELD_PREP(MT_TX_RATE_NSS, nss - 1)); return rateval; } @@ -771,6 +773,10 @@ out: break; case MT_PHY_TYPE_VHT: final_nss = FIELD_GET(MT_TX_RATE_NSS, final_rate); + + if ((final_rate & MT_TX_RATE_STBC) && final_nss) + final_nss--; + final_rate_flags |= IEEE80211_TX_RC_VHT_MCS; final_rate = (final_rate & MT_TX_RATE_IDX) | (final_nss << 4); break; diff --git a/mt7615/mcu.c b/mt7615/mcu.c index e57b5129..dc393eb2 100644 --- a/mt7615/mcu.c +++ b/mt7615/mcu.c @@ -1259,7 +1259,8 @@ int mt7615_mcu_set_tx_power(struct mt7615_dev *dev) goto out; index += ret; - data[index] = min_t(u8, data[index], tx_power); + printk("eep data[%d]: %d << %d\n", index, data[index], tx_power); +// data[index] = min_t(u8, data[index], tx_power); } ret = __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_TX_POWER_CTRL,