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

Tao Gong gongtao0607 at gmail.com
Sat Aug 22 22:46:17 PDT 2026


Please disregard this patch.

Upon further investigation, the root cause is a struct mismatch. Fix
sent to: https://lore.kernel.org/linux-wireless/20260823053739.186748-1-gongtao0607@gmail.com/

On Sun, Aug 16, 2026 at 1:51 PM Tao <gongtao0607 at gmail.com> wrote:
>
> 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
>


--
~Tao



More information about the openwrt-devel mailing list