summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanleyYP Wang <StanleyYP.Wang@mediatek.com>2026-03-12 12:57:24 +0300
committerFelix Fietkau <nbd@nbd.name>2026-03-24 18:49:31 +0300
commitfc4533b5db80792fccc2bf4a14322e7af1e55980 (patch)
tree22e780eff379cde819f164d5608a07e0617db437
parent9eeea2984c309f4c21c697e163abbef00c4d2b5e (diff)
downloadlinux-fc4533b5db80792fccc2bf4a14322e7af1e55980.tar.xz
wifi: mt76: mt7996: fix issues with manually triggered radar detection
Disallow triggering radar detection on non-DFS channels to prevent paused TX queues from failing to resume, as a channel switch is not performed in this case. Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Link: https://patch.msgid.link/20260312095724.2117448-6-shayne.chen@mediatek.com Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
index 6cc63f87b222..34af800964d1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/debugfs.c
@@ -226,14 +226,23 @@ mt7996_radar_trigger(void *data, u64 val)
#define RADAR_BACKGROUND 2
struct mt7996_dev *dev = data;
struct mt7996_phy *phy = mt7996_band_phy(dev, NL80211_BAND_5GHZ);
- int rdd_idx;
+ struct cfg80211_chan_def *chandef;
+ int rdd_idx, ret;
if (!phy || !val || val > RADAR_BACKGROUND)
return -EINVAL;
- if (val == RADAR_BACKGROUND && !dev->rdd2_phy) {
- dev_err(dev->mt76.dev, "Background radar is not enabled\n");
- return -EINVAL;
+ if (test_bit(MT76_SCANNING, &phy->mt76->state))
+ return -EBUSY;
+
+ if (val == RADAR_BACKGROUND) {
+ if (!dev->rdd2_phy || !cfg80211_chandef_valid(&dev->rdd2_chandef)) {
+ dev_err(dev->mt76.dev, "Background radar is not enabled\n");
+ return -EINVAL;
+ }
+ chandef = &dev->rdd2_chandef;
+ } else {
+ chandef = &phy->mt76->chandef;
}
rdd_idx = mt7996_get_rdd_idx(phy, val == RADAR_BACKGROUND);
@@ -242,6 +251,11 @@ mt7996_radar_trigger(void *data, u64 val)
return -EINVAL;
}
+ ret = cfg80211_chandef_dfs_required(dev->mt76.hw->wiphy, chandef,
+ NL80211_IFTYPE_AP);
+ if (ret <= 0)
+ return ret;
+
return mt7996_mcu_rdd_cmd(dev, RDD_RADAR_EMULATE, rdd_idx, 0);
}