From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0604E606A31B for ; Sat, 24 Oct 2026 20:46:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=x/yS8Vy5; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=qGI8/TiH DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Unsubscribe-Post:List-Owner; bh=UnXi3eekXKl70zsvSefuWRY6oQJRxJ2VpezoTiQGsog=; b=x/yS8Vy5976WPodPSpUXKdKHLk zLOZ8uCqeph9wdYcWBZLBZc/i+bwHGha2vaI1FTpbnxZi96ptXwzjnVc9l5TxcU8E3O5Ia+uwW+qz RVlmWkuTENwarJdOAVSCqUlY0hR4UbAvHF7rurDwgaTT2BjkIGE2j6Qe1kYNvuTDpuIDqvbKf4ewq qWMEQM/MvtkkwHKYU4nEuQs4UOthodVf3XwD6X7ZVQrgXjNF/CjZ2WGMhQa0hfGV/yurX6f8GdeIb 7EgOpRicWYFKhV7I3U9U6XrQVu838zZMjtmziZfi2SBU3sGIsDYPtouRKe6yoKQP/ip8oOHyMSAjj LRs2QgLA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKidX-00000000WPC-183J; Sat, 24 Oct 2026 20:46:43 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xKidU-00000000WOI-2QZi for linux-mediatek@lists.infradead.org; Sat, 24 Oct 2026 20:46:42 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-3ac677668a9so2270366a91.2 for ; Sat, 24 Oct 2026 13:46:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792874799; x=1793479599; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=UnXi3eekXKl70zsvSefuWRY6oQJRxJ2VpezoTiQGsog=; b=qGI8/TiHMD5bz7f7PX7Tt4+qa1PrjVCLJswzeLm6raJ8otiPvOmipmT6TpDAP05zid OioHNJgZfz/Ukry7fZ2cKLMCTOdjLH5p6x9Rd/auw8DE/U5h1P+XL5FP42s0b903CSbs 4S1Hn1q+CuU3JeDF+62r/SXCuJEy68I5+W9/Yphu6xxqtJWouPj8IjhvZGqLd4N/EvL2 QImfvddb2ujT0bvFwkn5CFkFu/0GZVWSKaXRRBvaRX8dRC9lc1++Io9bd82dOOoTIqcI UjfjyR+TFe4YaK7p7A8mY1Yw2GDdEgqNIe3p4/te9I+s/JI49y4qlw67SWq4IVQLmM8A R+NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792874799; x=1793479599; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UnXi3eekXKl70zsvSefuWRY6oQJRxJ2VpezoTiQGsog=; b=y0iZsUypJVFSDU6pE+2KrIcD0VTnUvfCnmqM+vAP/BUfw06nPSjEEO3PWmGZe6cAhK 30CYnQC/LAays9QTPEiU+2lywIc8lIilXDBSJlmmi3C7EcXuVslQJZ+tzaqTEZDZgO4o YysbdGW01Dp931MZFjCP9mfOjxwX5W1/p60BAdE0ojkgrSW0ZBIctg7yt9FG/nxc+lpI pzsYnOdJuZfhB08ZHMiy++Ua6iOAbPPPVBUPuOU1LXnknFjkXVWF7Dne2mKWpkaMVtlv P2HiWae9tSCJJJ1dn4VYcKsgFxvzgf7oW0JlGf1+JwlF0xFmVS39ucj2I89D5WsDLlxC B+ng== X-Forwarded-Encrypted: i=1; AKwUvBx0miwJskCAp7adgxghrJPlU2r18V5R35z+4IZuM/U0ZL3f0r7Wz6p6lj135GSkk6WdafGQAZTUlW165Bm1jQ==@lists.infradead.org X-Gm-Message-State: AFq9FYLk2FkYkeY8K6uTestRiiMFAmXy37ShF5iwi98d6M6FNKfvhksW rdZe2us/VoW2x4W1KCE6LrnHn737ItASNGMTcOJFcC3id+4khigwbL4C X-Gm-Gg: AYBFou1LnmlxiUN4NAdbfZ3JL2nxi+tw5ZgfQ6S651UXcdZ5WLdzYzoyUKqfRyAv5zI jtcFVw+fYJwEGDCGwT4nv5LCvCFy2hpIwnEwjsXhVMft3p5s3tKqHlMxIi6tMEMPX/zKvCqRkNV iprwP1KtRP3dvSSJe52c7T8XCJ0vk39P0VvmgmsTfJBBit+yzSm8HvYXr0fu65xFgp0TJNVk9sS 6JHV32yHRW0mCpBaW7qj5vaKG+F4hzPcYd8XF4nkZn66ASnas20EvKDYggKhSDXwx1a4nRu89e2 qThn8qQzpwa4ReKjNkOWEjnx2sh4cLDkwXp60gHPagB5XRy1dlmlvd85gZz/i7Mi7tA0Nz+cO9y 5XdQpVq/sTpzF6FPfI25tO2zLaOznSa2dC5AxVB5b9bpRJlsOUdarbU4FCVraKKLm6hTFHtouC5 ex2HPgoDT9IwILlPYDBXlKUiLujSceeFTTgAKMa2sMVHy1RDeJJVzoKC+SkrtPTWLabu/E7edVl ZGKeJVFv6RG8apaYt60PWIZERRT2KD48rPGYnSgjif66g8K6Cjh/fuFUoD5sOWoUdh9ZoSoFdQ/ BzQGTrXKVlvdRqTerELkh/N2e8mN/0l4ufwh2UKqVN76o6dhVcwMdqH0a48QZZYjg0wSnKePYta 5yzC8kdiRWnQqchTAZ1r1eN6+lwO1 X-Received: by 2002:a17:90b:3143:b0:3ac:9e76:aa76 with SMTP id 98e67ed59e1d1-3adea9dca65mr2434190a91.13.1792874798834; Sat, 24 Oct 2026 13:46:38 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:37f::e34]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3adebe8f0a7sm3793963a91.9.2026.10.24.13.46.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Oct 2026 13:46:38 -0700 (PDT) From: Rosen Penev To: linux-wireless@vger.kernel.org Cc: Felix Fietkau , Lorenzo Bianconi , Ryder Lee , Shayne Chen , Sean Wang , Matthias Brugger , AngeloGioacchino Del Regno , Kalle Valo , linux-kernel@vger.kernel.org (open list:ARM/Mediatek SoC support), linux-arm-kernel@lists.infradead.org (moderated list:ARM/Mediatek SoC support), linux-mediatek@lists.infradead.org (moderated list:ARM/Mediatek SoC support) Subject: [PATCH wireless] wifi: mt76: mt76x2u: limit TX A-MSDUs to 3 kB at SuperSpeed Date: Sat, 24 Oct 2026 13:46:36 -0700 Message-ID: <20261024204636.23484-1-rosenp@gmail.com> X-Mailer: git-send-email 2.56.0 X-Archived-By: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261024_134640_626967_3F282F34 X-CRM114-Status: GOOD ( 15.01 ) X-Spam-Score: -2.1 (--) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 At SuperSpeed the MT7612U stops accepting bulk OUT data after it was sent a TX frame longer than 3072 bytes (TXWI and 802.11 frame, the TXINFO length). The TX URBs never complete, MCU commands time out ("mt76x02u_mcu_wait_resp failed with -110") and only a power cycle brings the device back; neither a USB reset nor a host reboot with the port powered recovers it. Single frames never get that long, but A-MSDUs of two full-size subframes are 3096 bytes. Behind a USB 3 hub this happens within seconds of continuous traffic, plugged in directly within minutes. Frames of up to 3072 bytes, at MTU 1488, ran for minutes behind the hub, frames of 3080 bytes, at MTU 1492, wedged the device. At high speed the same A-MSDUs work. Cap the A-MSDU length for all TIDs when the device runs at SuperSpeed. This keeps A-MSDUs of smaller frames. Fixes: ee676cd5017c ("mt76: add driver code for MT76x2u based devices") Signed-off-by: Rosen Penev --- .../net/wireless/mediatek/mt76/mt76x2/usb.c | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c index ade15bddefc5..3e53b357858c 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c +++ b/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c @@ -29,6 +29,30 @@ static const struct usb_device_id mt76x2u_device_table[] = { { }, }; +/* At SuperSpeed the MT7612U wedges its bulk OUT path on TX frames longer + * than 3072 bytes (TXWI and 802.11 frame), which only A-MSDUs reach. mt76 + * adds 22 bytes (TXWI, header padding) to the MPDU, and mac80211 counts + * each new subframe up to 11 bytes (LLC header, padding) short, plus the + * 14-byte subframe header it adds to the first subframe after the check. + */ +#define MT76X2U_SS_MAX_AMSDU_LEN (3072 - 22 - 11 - 14) + +static int mt76x2u_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif, + struct ieee80211_sta *sta) +{ + struct usb_device *udev = interface_to_usbdev(to_usb_interface(mdev->dev)); + int i; + + if (udev->speed >= USB_SPEED_SUPER) { + for (i = 0; i < ARRAY_SIZE(sta->deflink.agg.max_tid_amsdu_len); i++) + sta->deflink.agg.max_tid_amsdu_len[i] = + MT76X2U_SS_MAX_AMSDU_LEN; + ieee80211_sta_recalc_aggregates(sta); + } + + return mt76x02_sta_add(mdev, vif, sta); +} + static int mt76x2u_probe(struct usb_interface *intf, const struct usb_device_id *id) { @@ -43,7 +67,7 @@ static int mt76x2u_probe(struct usb_interface *intf, .tx_status_data = mt76x02_tx_status_data, .rx_skb = mt76x02_queue_rx_skb, .sta_ps = mt76x02_sta_ps, - .sta_add = mt76x02_sta_add, + .sta_add = mt76x2u_sta_add, .sta_remove = mt76x02_sta_remove, }; struct usb_device *udev = interface_to_usbdev(intf); -- 2.56.0