These values must be initialized to zero, otherwise the hardware could
reuse previous values, especially the rate index

Reviewed-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
---
 drivers/net/wireless/mediatek/mt76/mt7615/mac.c  | 5 ++++-
 drivers/net/wireless/mediatek/mt76/mt7615/regs.h | 4 ++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c 
b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
index 49c14eb008d7..b896d8ce9e72 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
@@ -501,7 +501,10 @@ void mt7615_mac_set_rates(struct mt7615_dev *dev, struct 
mt7615_sta *sta,
        w27 |= FIELD_PREP(MT_WTBL_W27_CC_BW_SEL, bw);
 
        w5 = mt76_rr(dev, addr + 5 * 4);
-       w5 &= ~(MT_WTBL_W5_BW_CAP | MT_WTBL_W5_CHANGE_BW_RATE);
+       w5 &= ~(MT_WTBL_W5_BW_CAP | MT_WTBL_W5_CHANGE_BW_RATE |
+               MT_WTBL_W5_MPDU_OK_COUNT |
+               MT_WTBL_W5_MPDU_FAIL_COUNT |
+               MT_WTBL_W5_RATE_IDX);
        w5 |= FIELD_PREP(MT_WTBL_W5_BW_CAP, bw) |
              FIELD_PREP(MT_WTBL_W5_CHANGE_BW_RATE, bw_idx ? bw_idx - 1 : 7);
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/regs.h 
b/drivers/net/wireless/mediatek/mt76/mt7615/regs.h
index 70e5ace33cc3..ea40581dc870 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/regs.h
@@ -181,6 +181,10 @@
 #define MT_WTBL_W5_SHORT_GI_80         BIT(10)
 #define MT_WTBL_W5_SHORT_GI_160                BIT(11)
 #define MT_WTBL_W5_BW_CAP              GENMASK(13, 12)
+#define MT_WTBL_W5_MPDU_FAIL_COUNT     GENMASK(25, 23)
+#define MT_WTBL_W5_MPDU_OK_COUNT       GENMASK(28, 26)
+#define MT_WTBL_W5_RATE_IDX            GENMASK(31, 29)
+
 #define MT_WTBL_W27_CC_BW_SEL          GENMASK(6, 5)
 
 #define MT_EFUSE_BASE                  0x81070000
-- 
2.17.0

Reply via email to