[PATCH mt76] wifi: mt76: mt7996: skip HW_RRO for sub-64 window BlockAck sessions

Tao <[email protected]>
Newsgroups org.kernel.vger.linux-wireless
Message-ID <[email protected]>
From: Tao Gong <[email protected]>

MT7996 HW_RRO (Hardware Receive Reordering Offload) seems to be
architected around 64-frame minimum BlockAck bitmap windows. Enabling
HW_RRO on sub-64 window sessions causes it to lock up internally,
stalling hardware RX offload on subsequent associations reusing that
WCID. This was observed on the W1700k with Apple Wi-Fi clients, which
negotiate buf_size = 8 (TID 6) and buf_size = 16 (TID 1).

Bypass HW_RRO for RX BlockAck sessions with buf_size < 64 and delegate
them to mac80211 software reordering to work around this issue.

Signed-off-by: Tao Gong <[email protected]>
---
 mt7996/mcu.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mt7996/mcu.c b/mt7996/mcu.c
index 176d71e8..f021c4b3 100644
--- a/mt7996/mcu.c
+++ b/mt7996/mcu.c
@@ -1500,7 +1500,8 @@ mt7996_mcu_sta_ba(struct mt7996_dev *dev, struct mt76_vif_link *mvif,
 	ba->ba_en = enable << params->tid;
 	ba->amsdu = params->amsdu;
 	ba->tid = params->tid;
-	ba->ba_rdd_rro = !tx && enable && mt7996_has_hwrro(dev);
+	ba->ba_rdd_rro = !tx && enable && mt7996_has_hwrro(dev) &&
+			 params->buf_size >= 64;
 
 	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
 				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);

base-commit: b2704cf5a4068b672bf47ad5bf6b4802b6770a90
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.