From: Tao Gong 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 --- 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