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

Tao gongtao0607 at gmail.com
Sun Aug 16 13:51:19 PDT 2026


From: Tao Gong <gongtao0607 at gmail.com>

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 <gongtao0607 at gmail.com>
---
 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




More information about the openwrt-devel mailing list