[PATCH] wifi: mt7601u: add vnd_reset parameter to fix probe failure on Tenda U2
From: Герман Семёнов
Date: Thu Sep 03 2026 - 00:34:51 EST
wifi: mt7601u: add vnd_reset parameter to fix probe failure on Tenda U2
On certain MT7601U adapters, such as Tenda U2 and
other newer hardware revisions, driver initialization consistently fails
during probe with vendor request timeouts (-110 / -ETIMEDOUT):
mt7601u 3-14:1.0: ASIC revision: 76010001 MAC revision: 76010500
mt7601u 3-14:1.0: Firmware Version: 0.1.00 Build: 7640 Build time: 201302052146____
mt7601u 3-14:1.0: Vendor request req:07 off:09a8 failed:-110
mt7601u 3-14:1.0: Vendor request req:02 off:09a8 failed:-110
mt7601u 3-14:1.0: Vendor request req:07 off:0734 failed:-110
mt7601u 3-14:1.0: Vendor request req:42 off:0230 failed:-110
mt7601u 3-14:1.0: probe with driver mt7601u failed with error -110
The failure occurs because mt7601u_load_firmware() unconditionally calls
mt7601u_vendor_reset() (MT_VEND_DEV_MODE_RESET) before uploading firmware
chunks. On these devices, issuing this vendor reset leaves the internal
MCU / FCE DMA engine in an unresponsive state after the first firmware
URB is submitted. As a result, reading MT_TX_CPU_FROM_FCE_CPU_DESC_IDX
(0x09a8) immediately times out.
Introduce a boolean module parameter 'vnd_reset' (default: false) to
make this vendor reset optional. When the vendor reset is skipped,
firmware upload succeeds and the wireless interface initializes normally.
Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1716301
More issues with Tenda U2 and Linux:
- https://www.opena.tv/viewtopic.php?t=63919
- https://askubuntu.com/questions/1418850/the-problem-with-wi-fi-u2
- https://bbs.archlinux.org/viewtopic.php?id=224859
- https://www.reddit.com/r/archlinux/comments/1d6dfv5/mt7601u_usb_wifi_not_working/
Signed-off-by: Herman Semenoff <GermanAizek@xxxxxxxxx>
From: Herman Semenoff <GermanAizek@xxxxxxxxx>
Date: Thu, 3 Sep 2026 07:14:32 +0300
Subject: [PATCH] [PATCH] wifi: mt7601u: add vnd_reset parameter to fix probe
failure on Tenda U2
wifi: mt7601u: add vnd_reset parameter to fix probe failure on Tenda U2
On certain MT7601U adapters, such as Tenda U2 and
other newer hardware revisions, driver initialization consistently fails
during probe with vendor request timeouts (-110 / -ETIMEDOUT):
mt7601u 3-14:1.0: ASIC revision: 76010001 MAC revision: 76010500
mt7601u 3-14:1.0: Firmware Version: 0.1.00 Build: 7640 Build time: 201302052146____
mt7601u 3-14:1.0: Vendor request req:07 off:09a8 failed:-110
mt7601u 3-14:1.0: Vendor request req:02 off:09a8 failed:-110
mt7601u 3-14:1.0: Vendor request req:07 off:0734 failed:-110
mt7601u 3-14:1.0: Vendor request req:42 off:0230 failed:-110
mt7601u 3-14:1.0: probe with driver mt7601u failed with error -110
The failure occurs because mt7601u_load_firmware() unconditionally calls
mt7601u_vendor_reset() (MT_VEND_DEV_MODE_RESET) before uploading firmware
chunks. On these devices, issuing this vendor reset leaves the internal
MCU / FCE DMA engine in an unresponsive state after the first firmware
URB is submitted. As a result, reading MT_TX_CPU_FROM_FCE_CPU_DESC_IDX
(0x09a8) immediately times out.
Introduce a boolean module parameter 'vnd_reset' (default: false) to
make this vendor reset optional. When the vendor reset is skipped,
firmware upload succeeds and the wireless interface initializes normally.
Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1716301
More issues with Tenda U2 and Linux:
- https://www.opena.tv/viewtopic.php?t=63919
- https://askubuntu.com/questions/1418850/the-problem-with-wi-fi-u2
- https://bbs.archlinux.org/viewtopic.php?id=224859
- https://www.reddit.com/r/archlinux/comments/1d6dfv5/mt7601u_usb_wifi_not_working/
Signed-off-by: Herman Semenoff <GermanAizek@xxxxxxxxx>
---
drivers/net/wireless/mediatek/mt7601u/mcu.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt7601u/mcu.c b/drivers/net/wireless/mediatek/mt7601u/mcu.c
index bad6ca821..abf4767f1 100644
--- a/drivers/net/wireless/mediatek/mt7601u/mcu.c
+++ b/drivers/net/wireless/mediatek/mt7601u/mcu.c
@@ -10,6 +10,7 @@
#include <linux/delay.h>
#include <linux/usb.h>
#include <linux/skbuff.h>
+#include <linux/moduleparam.h>
#include "mt7601u.h"
#include "dma.h"
@@ -21,6 +22,14 @@
#define MCU_FW_URB_SIZE (MCU_FW_URB_MAX_PAYLOAD + 12)
#define MCU_RESP_URB_SIZE 1024
+static bool vnd_reset;
+module_param(vnd_reset, bool, 0644);
+MODULE_PARM_DESC(vnd_reset, "Perform vendor reset during firmware upload (default: false)");
+
+static bool disable_usb_sg;
+module_param(disable_usb_sg, bool, 0644);
+MODULE_PARM_DESC(disable_usb_sg, "Unused compatibility parameter");
+
static inline int firmware_running(struct mt7601u_dev *dev)
{
return mt7601u_rr(dev, MT_MCU_COM_REG0) == 1;
@@ -459,8 +468,10 @@ static int mt7601u_load_firmware(struct mt7601u_dev *dev)
mt7601u_wr(dev, 0x94c, 0);
mt7601u_wr(dev, MT_FCE_PSE_CTRL, 0);
- mt7601u_vendor_reset(dev);
- msleep(5);
+ if (vnd_reset) {
+ mt7601u_vendor_reset(dev);
+ msleep(5);
+ }
mt7601u_wr(dev, 0xa44, 0);
mt7601u_wr(dev, 0x230, 0x84210);
--
2.55.0