|
@@ -1,81 +0,0 @@
|
|
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
|
|
|
|
-Date: Mon, 25 Mar 2024 18:54:02 +0100
|
|
|
|
-Subject: [PATCH] wifi: mt76: mt7603: add debugfs attr for disabling frames
|
|
|
|
- buffering
|
|
|
|
-MIME-Version: 1.0
|
|
|
|
-Content-Type: text/plain; charset=UTF-8
|
|
|
|
-Content-Transfer-Encoding: 8bit
|
|
|
|
-
|
|
|
|
-MT7603EN and MT7628AN were reported by multiple users to be unstable
|
|
|
|
-under high traffic. Transmission of packets could stop for seconds often
|
|
|
|
-leading to disconnections.
|
|
|
|
-
|
|
|
|
-Long research & debugging revelaed a close relation between MCU
|
|
|
|
-interrupts of type PKT_TYPE_TXS and slowdowns / stalls. That led to
|
|
|
|
-questioning frames buffering feature.
|
|
|
|
-
|
|
|
|
-It turns out that disabling SKBs loopback code makes mt7603 devices much
|
|
|
|
-more stable under load. There are still some traffic hiccups but those
|
|
|
|
-happen like once every an hour and end up in recovery in most cases.
|
|
|
|
-
|
|
|
|
-Add a debugfs option for disabling frames buffering so users can give it
|
|
|
|
-a try. If this solution yields a success we can make this feature
|
|
|
|
-disabled by default.
|
|
|
|
-
|
|
|
|
-This change was successfully tested using 2 GHz AP interface on:
|
|
|
|
-1. Netgear R6220 - MT7621ST (SoC) + MT7603EN (WiFi) + MT7612EN (WiFi)
|
|
|
|
-2. Xiaomi Mi Router 4C - MT7628AN (Wi-Fi SoC)
|
|
|
|
-
|
|
|
|
-Link: https://lore.kernel.org/linux-wireless/[email protected]/
|
|
|
|
-Closes: https://github.com/openwrt/mt76/issues/865
|
|
|
|
-Fixes: c8846e101502 ("mt76: add driver for MT7603E and MT7628/7688")
|
|
|
|
-Signed-off-by: Rafał Miłecki <[email protected]>
|
|
|
|
----
|
|
|
|
- mt7603/debugfs.c | 2 ++
|
|
|
|
- mt7603/dma.c | 3 +++
|
|
|
|
- mt7603/init.c | 1 +
|
|
|
|
- mt7603/mt7603.h | 2 ++
|
|
|
|
- 4 files changed, 8 insertions(+)
|
|
|
|
-
|
|
|
|
---- a/mt7603/debugfs.c
|
|
|
|
-+++ b/mt7603/debugfs.c
|
|
|
|
-@@ -115,4 +115,6 @@ void mt7603_init_debugfs(struct mt7603_d
|
|
|
|
- &dev->sensitivity_limit);
|
|
|
|
- debugfs_create_bool("dynamic_sensitivity", 0600, dir,
|
|
|
|
- &dev->dynamic_sensitivity);
|
|
|
|
-+ debugfs_create_bool("frames_buffering", 0600, dir,
|
|
|
|
-+ &dev->frames_buffering);
|
|
|
|
- }
|
|
|
|
---- a/mt7603/dma.c
|
|
|
|
-+++ b/mt7603/dma.c
|
|
|
|
-@@ -27,6 +27,9 @@ mt7603_rx_loopback_skb(struct mt7603_dev
|
|
|
|
- u32 val;
|
|
|
|
- u8 tid = 0;
|
|
|
|
-
|
|
|
|
-+ if (!dev->frames_buffering)
|
|
|
|
-+ goto free;
|
|
|
|
-+
|
|
|
|
- if (skb->len < MT_TXD_SIZE + sizeof(struct ieee80211_hdr))
|
|
|
|
- goto free;
|
|
|
|
-
|
|
|
|
---- a/mt7603/init.c
|
|
|
|
-+++ b/mt7603/init.c
|
|
|
|
-@@ -517,6 +517,7 @@ int mt7603_register_device(struct mt7603
|
|
|
|
- dev->slottime = 9;
|
|
|
|
- dev->sensitivity_limit = 28;
|
|
|
|
- dev->dynamic_sensitivity = true;
|
|
|
|
-+ dev->frames_buffering = true;
|
|
|
|
-
|
|
|
|
- ret = mt7603_init_hardware(dev);
|
|
|
|
- if (ret)
|
|
|
|
---- a/mt7603/mt7603.h
|
|
|
|
-+++ b/mt7603/mt7603.h
|
|
|
|
-@@ -155,6 +155,8 @@ struct mt7603_dev {
|
|
|
|
- u32 reset_test;
|
|
|
|
-
|
|
|
|
- unsigned int reset_cause[__RESET_CAUSE_MAX];
|
|
|
|
-+
|
|
|
|
-+ bool frames_buffering;
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- extern const struct mt76_driver_ops mt7603_drv_ops;
|
|
|