Last active
February 6, 2023 05:49
-
-
Save dvalter/a9fe454e3ff7c5e32ed1df2b841eec99 to your computer and use it in GitHub Desktop.
Openwrt 21.02.5 patch for MIR4A
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile | |
index 8210478c37..d9548d66cf 100644 | |
--- a/package/kernel/mt76/Makefile | |
+++ b/package/kernel/mt76/Makefile | |
@@ -8,9 +8,9 @@ PKG_LICENSE_FILES:= | |
PKG_SOURCE_URL:=https://github.com/openwrt/mt76 | |
PKG_SOURCE_PROTO:=git | |
-PKG_SOURCE_DATE:=2021-12-03 | |
-PKG_SOURCE_VERSION:=678071ef70297b7264661c356ddb3c8cf7f3c87b | |
-PKG_MIRROR_HASH:=b1f8613f7c65ca6a893f83ed9efc3f7ce72b9b4904fd11b89264f57f4f2a3b5e | |
+PKG_SOURCE_DATE:=2022-02-03 | |
+PKG_SOURCE_VERSION:=ab9b8078427a9a886b11516d5725190f0e7763b0 | |
+PKG_MIRROR_HASH:=60562cf2ac2e97e654a8202bd6af2c928ca96b129edb168af29f227b6ffbc873 | |
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name> | |
PKG_USE_NINJA:=0 | |
diff --git a/package/kernel/mt76/patches/102-revert-background-radar-detection.patch b/package/kernel/mt76/patches/102-revert-background-radar-detection.patch | |
new file mode 100644 | |
index 0000000000..ed2321f067 | |
--- /dev/null | |
+++ b/package/kernel/mt76/patches/102-revert-background-radar-detection.patch | |
@@ -0,0 +1,393 @@ | |
+diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h | |
+index 7b9d82dd..1ebe02f5 100644 | |
+--- a/mt76_connac_mcu.h | |
++++ b/mt76_connac_mcu.h | |
+@@ -977,7 +977,6 @@ enum { | |
+ MCU_EXT_CMD_SCS_CTRL = 0x82, | |
+ MCU_EXT_CMD_TWT_AGRT_UPDATE = 0x94, | |
+ MCU_EXT_CMD_FW_DBG_CTRL = 0x95, | |
+- MCU_EXT_CMD_OFFCH_SCAN_CTRL = 0x9a, | |
+ MCU_EXT_CMD_SET_RDD_TH = 0x9d, | |
+ MCU_EXT_CMD_MURU_CTRL = 0x9f, | |
+ MCU_EXT_CMD_SET_SPR = 0xa8, | |
+diff --git a/mt76x02_dfs.c b/mt76x02_dfs.c | |
+index 024a5c0a..a6013505 100644 | |
+--- a/mt76x02_dfs.c | |
++++ b/mt76x02_dfs.c | |
+@@ -823,7 +823,10 @@ EXPORT_SYMBOL_GPL(mt76x02_phy_dfs_adjust_agc); | |
+ | |
+ void mt76x02_dfs_init_params(struct mt76x02_dev *dev) | |
+ { | |
+- if (mt76_phy_dfs_state(&dev->mphy) > MT_DFS_STATE_DISABLED) { | |
++ struct cfg80211_chan_def *chandef = &dev->mphy.chandef; | |
++ | |
++ if ((chandef->chan->flags & IEEE80211_CHAN_RADAR) && | |
++ dev->mt76.region != NL80211_DFS_UNSET) { | |
+ mt76x02_dfs_init_sw_detector(dev); | |
+ mt76x02_dfs_set_bbp_params(dev); | |
+ /* enable debug mode */ | |
+diff --git a/mt7915/debugfs.c b/mt7915/debugfs.c | |
+index 280823fc..464d2b42 100644 | |
+--- a/mt7915/debugfs.c | |
++++ b/mt7915/debugfs.c | |
+@@ -79,11 +79,7 @@ mt7915_radar_trigger(void *data, u64 val) | |
+ { | |
+ struct mt7915_dev *dev = data; | |
+ | |
+- if (val > MT_RX_SEL2) | |
+- return -EINVAL; | |
+- | |
+- return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_RADAR_EMULATE, | |
+- val, 0, 0); | |
++ return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_RADAR_EMULATE, 1, 0, 0); | |
+ } | |
+ | |
+ DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_trigger, NULL, | |
+@@ -308,53 +304,6 @@ exit: | |
+ } | |
+ DEFINE_SHOW_ATTRIBUTE(mt7915_muru_stats); | |
+ | |
+-static int | |
+-mt7915_rdd_monitor(struct seq_file *s, void *data) | |
+-{ | |
+- struct mt7915_dev *dev = dev_get_drvdata(s->private); | |
+- struct cfg80211_chan_def *chandef = &dev->rdd2_chandef; | |
+- const char *bw; | |
+- int ret = 0; | |
+- | |
+- mutex_lock(&dev->mt76.mutex); | |
+- | |
+- if (!cfg80211_chandef_valid(chandef)) { | |
+- ret = -EINVAL; | |
+- goto out; | |
+- } | |
+- | |
+- if (!dev->rdd2_phy) { | |
+- seq_puts(s, "not running\n"); | |
+- goto out; | |
+- } | |
+- | |
+- switch (chandef->width) { | |
+- case NL80211_CHAN_WIDTH_40: | |
+- bw = "40"; | |
+- break; | |
+- case NL80211_CHAN_WIDTH_80: | |
+- bw = "80"; | |
+- break; | |
+- case NL80211_CHAN_WIDTH_160: | |
+- bw = "160"; | |
+- break; | |
+- case NL80211_CHAN_WIDTH_80P80: | |
+- bw = "80P80"; | |
+- break; | |
+- default: | |
+- bw = "20"; | |
+- break; | |
+- } | |
+- | |
+- seq_printf(s, "channel %d (%d MHz) width %s MHz center1: %d MHz\n", | |
+- chandef->chan->hw_value, chandef->chan->center_freq, | |
+- bw, chandef->center_freq1); | |
+-out: | |
+- mutex_unlock(&dev->mt76.mutex); | |
+- | |
+- return ret; | |
+-} | |
+- | |
+ static int | |
+ mt7915_fw_debug_wm_set(void *data, u64 val) | |
+ { | |
+@@ -903,8 +852,6 @@ int mt7915_init_debugfs(struct mt7915_phy *phy) | |
+ &dev->hw_pattern); | |
+ debugfs_create_file("radar_trigger", 0200, dir, dev, | |
+ &fops_radar_trigger); | |
+- debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir, | |
+- mt7915_rdd_monitor); | |
+ } | |
+ | |
+ if (!ext_phy) | |
+diff --git a/mt7915/init.c b/mt7915/init.c | |
+index f8df66de..83835635 100644 | |
+--- a/mt7915/init.c | |
++++ b/mt7915/init.c | |
+@@ -292,9 +292,6 @@ mt7915_regd_notifier(struct wiphy *wiphy, | |
+ memcpy(dev->mt76.alpha2, request->alpha2, sizeof(dev->mt76.alpha2)); | |
+ dev->mt76.region = request->dfs_region; | |
+ | |
+- if (dev->mt76.region == NL80211_DFS_UNSET) | |
+- mt7915_mcu_rdd_background_enable(phy, NULL); | |
+- | |
+ mt7915_init_txpower(dev, &mphy->sband_2g.sband); | |
+ mt7915_init_txpower(dev, &mphy->sband_5g.sband); | |
+ | |
+@@ -306,7 +303,6 @@ static void | |
+ mt7915_init_wiphy(struct ieee80211_hw *hw) | |
+ { | |
+ struct mt7915_phy *phy = mt7915_hw_phy(hw); | |
+- struct mt76_dev *mdev = &phy->dev->mt76; | |
+ struct wiphy *wiphy = hw->wiphy; | |
+ struct mt7915_dev *dev = phy->dev; | |
+ | |
+@@ -335,12 +331,6 @@ mt7915_init_wiphy(struct ieee80211_hw *hw) | |
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT); | |
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE); | |
+ | |
+- if (!mdev->dev->of_node || | |
+- !of_property_read_bool(mdev->dev->of_node, | |
+- "mediatek,disable-radar-background")) | |
+- wiphy_ext_feature_set(wiphy, | |
+- NL80211_EXT_FEATURE_RADAR_BACKGROUND); | |
+- | |
+ ieee80211_hw_set(hw, HAS_RATE_CONTROL); | |
+ ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOAD); | |
+ ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD); | |
+diff --git a/mt7915/main.c b/mt7915/main.c | |
+index dee7fc01..fa5e195f 100644 | |
+--- a/mt7915/main.c | |
++++ b/mt7915/main.c | |
+@@ -1335,55 +1335,6 @@ mt7915_twt_teardown_request(struct ieee80211_hw *hw, | |
+ mutex_unlock(&dev->mt76.mutex); | |
+ } | |
+ | |
+-static int | |
+-mt7915_set_radar_background(struct ieee80211_hw *hw, | |
+- struct cfg80211_chan_def *chandef) | |
+-{ | |
+- struct mt7915_phy *phy = mt7915_hw_phy(hw); | |
+- struct mt7915_dev *dev = phy->dev; | |
+- int ret = -EINVAL; | |
+- bool running; | |
+- | |
+- mutex_lock(&dev->mt76.mutex); | |
+- | |
+- if (dev->mt76.region == NL80211_DFS_UNSET) | |
+- goto out; | |
+- | |
+- if (dev->rdd2_phy && dev->rdd2_phy != phy) { | |
+- /* rdd2 is already locked */ | |
+- ret = -EBUSY; | |
+- goto out; | |
+- } | |
+- | |
+- /* rdd2 already configured on a radar channel */ | |
+- running = dev->rdd2_phy && | |
+- cfg80211_chandef_valid(&dev->rdd2_chandef) && | |
+- !!(dev->rdd2_chandef.chan->flags & IEEE80211_CHAN_RADAR); | |
+- | |
+- if (!chandef || running || | |
+- !(chandef->chan->flags & IEEE80211_CHAN_RADAR)) { | |
+- ret = mt7915_mcu_rdd_background_enable(phy, NULL); | |
+- if (ret) | |
+- goto out; | |
+- | |
+- if (!running) | |
+- goto update_phy; | |
+- } | |
+- | |
+- ret = mt7915_mcu_rdd_background_enable(phy, chandef); | |
+- if (ret) | |
+- goto out; | |
+- | |
+-update_phy: | |
+- dev->rdd2_phy = chandef ? phy : NULL; | |
+- if (chandef) | |
+- dev->rdd2_chandef = *chandef; | |
+-out: | |
+- mutex_unlock(&dev->mt76.mutex); | |
+- | |
+- return ret; | |
+-} | |
+- | |
+ const struct ieee80211_ops mt7915_ops = { | |
+ .tx = mt7915_tx, | |
+ .start = mt7915_start, | |
+@@ -1430,5 +1381,4 @@ const struct ieee80211_ops mt7915_ops = { | |
+ #ifdef CONFIG_MAC80211_DEBUGFS | |
+ .sta_add_debugfs = mt7915_sta_add_debugfs, | |
+ #endif | |
+- .set_radar_background = mt7915_set_radar_background, | |
+ }; | |
+diff --git a/mt7915/mcu.c b/mt7915/mcu.c | |
+index 94837edf..1d71e6a2 100644 | |
+--- a/mt7915/mcu.c | |
++++ b/mt7915/mcu.c | |
+@@ -346,12 +346,7 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb) | |
+ if (r->band_idx && dev->mt76.phy2) | |
+ mphy = dev->mt76.phy2; | |
+ | |
+- if (r->band_idx == MT_RX_SEL2) | |
+- cfg80211_background_radar_event(mphy->hw->wiphy, | |
+- &dev->rdd2_chandef, | |
+- GFP_ATOMIC); | |
+- else | |
+- ieee80211_radar_detected(mphy->hw); | |
++ ieee80211_radar_detected(mphy->hw); | |
+ dev->hw_pattern++; | |
+ } | |
+ | |
+@@ -2643,99 +2638,6 @@ int mt7915_mcu_set_radar_th(struct mt7915_dev *dev, int index, | |
+ sizeof(req), true); | |
+ } | |
+ | |
+-static int | |
+-mt7915_mcu_background_chain_ctrl(struct mt7915_phy *phy, | |
+- struct cfg80211_chan_def *chandef, | |
+- int cmd) | |
+-{ | |
+- struct mt7915_dev *dev = phy->dev; | |
+- struct mt76_phy *mphy = phy->mt76; | |
+- struct ieee80211_channel *chan = mphy->chandef.chan; | |
+- int freq = mphy->chandef.center_freq1; | |
+- struct mt7915_mcu_background_chain_ctrl req = { | |
+- .monitor_scan_type = 2, /* simple rx */ | |
+- }; | |
+- | |
+- if (!chandef && cmd != CH_SWITCH_BACKGROUND_SCAN_STOP) | |
+- return -EINVAL; | |
+- | |
+- if (!cfg80211_chandef_valid(&mphy->chandef)) | |
+- return -EINVAL; | |
+- | |
+- switch (cmd) { | |
+- case CH_SWITCH_BACKGROUND_SCAN_START: { | |
+- req.chan = chan->hw_value; | |
+- req.central_chan = ieee80211_frequency_to_channel(freq); | |
+- req.bw = mt76_connac_chan_bw(&mphy->chandef); | |
+- req.monitor_chan = chandef->chan->hw_value; | |
+- req.monitor_central_chan = | |
+- ieee80211_frequency_to_channel(chandef->center_freq1); | |
+- req.monitor_bw = mt76_connac_chan_bw(chandef); | |
+- req.band_idx = phy != &dev->phy; | |
+- req.scan_mode = 1; | |
+- break; | |
+- } | |
+- case CH_SWITCH_BACKGROUND_SCAN_RUNNING: | |
+- req.monitor_chan = chandef->chan->hw_value; | |
+- req.monitor_central_chan = | |
+- ieee80211_frequency_to_channel(chandef->center_freq1); | |
+- req.band_idx = phy != &dev->phy; | |
+- req.scan_mode = 2; | |
+- break; | |
+- case CH_SWITCH_BACKGROUND_SCAN_STOP: | |
+- req.chan = chan->hw_value; | |
+- req.central_chan = ieee80211_frequency_to_channel(freq); | |
+- req.bw = mt76_connac_chan_bw(&mphy->chandef); | |
+- req.tx_stream = hweight8(mphy->antenna_mask); | |
+- req.rx_stream = mphy->antenna_mask; | |
+- break; | |
+- default: | |
+- return -EINVAL; | |
+- } | |
+- req.band = chandef ? chandef->chan->band == NL80211_BAND_5GHZ : 1; | |
+- | |
+- return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(OFFCH_SCAN_CTRL), | |
+- &req, sizeof(req), false); | |
+-} | |
+- | |
+-int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy, | |
+- struct cfg80211_chan_def *chandef) | |
+-{ | |
+- struct mt7915_dev *dev = phy->dev; | |
+- int err, region; | |
+- | |
+- if (!chandef) { /* disable offchain */ | |
+- err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, MT_RX_SEL2, | |
+- 0, 0); | |
+- if (err) | |
+- return err; | |
+- | |
+- return mt7915_mcu_background_chain_ctrl(phy, NULL, | |
+- CH_SWITCH_BACKGROUND_SCAN_STOP); | |
+- } | |
+- | |
+- err = mt7915_mcu_background_chain_ctrl(phy, chandef, | |
+- CH_SWITCH_BACKGROUND_SCAN_START); | |
+- if (err) | |
+- return err; | |
+- | |
+- switch (dev->mt76.region) { | |
+- case NL80211_DFS_ETSI: | |
+- region = 0; | |
+- break; | |
+- case NL80211_DFS_JP: | |
+- region = 2; | |
+- break; | |
+- case NL80211_DFS_FCC: | |
+- default: | |
+- region = 1; | |
+- break; | |
+- } | |
+- | |
+- return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_START, MT_RX_SEL2, | |
+- 0, region); | |
+-} | |
+- | |
+ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd) | |
+ { | |
+ struct mt7915_dev *dev = phy->dev; | |
+diff --git a/mt7915/mcu.h b/mt7915/mcu.h | |
+index 9417f7bc..aa05c6ce 100644 | |
+--- a/mt7915/mcu.h | |
++++ b/mt7915/mcu.h | |
+@@ -131,29 +131,6 @@ struct mt7915_mcu_rdd_report { | |
+ } hw_pulse[32]; | |
+ } __packed; | |
+ | |
+-struct mt7915_mcu_background_chain_ctrl { | |
+- u8 chan; /* primary channel */ | |
+- u8 central_chan; /* central channel */ | |
+- u8 bw; | |
+- u8 tx_stream; | |
+- u8 rx_stream; | |
+- | |
+- u8 monitor_chan; /* monitor channel */ | |
+- u8 monitor_central_chan;/* monitor central channel */ | |
+- u8 monitor_bw; | |
+- u8 monitor_tx_stream; | |
+- u8 monitor_rx_stream; | |
+- | |
+- u8 scan_mode; /* 0: ScanStop | |
+- * 1: ScanStart | |
+- * 2: ScanRunning | |
+- */ | |
+- u8 band_idx; /* DBDC */ | |
+- u8 monitor_scan_type; | |
+- u8 band; /* 0: 2.4GHz, 1: 5GHz */ | |
+- u8 rsv[2]; | |
+-} __packed; | |
+- | |
+ struct mt7915_mcu_eeprom { | |
+ u8 buffer_mode; | |
+ u8 format; | |
+diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h | |
+index 96653d64..af0b9f02 100644 | |
+--- a/mt7915/mt7915.h | |
++++ b/mt7915/mt7915.h | |
+@@ -268,10 +268,6 @@ struct mt7915_dev { | |
+ struct tasklet_struct irq_tasklet; | |
+ struct mt7915_phy phy; | |
+ | |
+- /* monitor rx chain configured channel */ | |
+- struct cfg80211_chan_def rdd2_chandef; | |
+- struct mt7915_phy *rdd2_phy; | |
+- | |
+ u16 chainmask; | |
+ u32 hif_idx; | |
+ | |
+@@ -331,7 +327,6 @@ enum { | |
+ enum { | |
+ MT_RX_SEL0, | |
+ MT_RX_SEL1, | |
+- MT_RX_SEL2, /* monitor chain */ | |
+ }; | |
+ | |
+ enum mt7915_rdd_cmd { | |
+@@ -459,8 +454,6 @@ int mt7915_mcu_get_temperature(struct mt7915_phy *phy); | |
+ int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state); | |
+ int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif, | |
+ struct ieee80211_sta *sta, struct rate_info *rate); | |
+-int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy, | |
+- struct cfg80211_chan_def *chandef); | |
+ int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3); | |
+ int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl); | |
+ int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment