Skip to content

Commit 2c86f67

Browse files
committed
mt76: mt7615: fix/rewrite the dfs state handling logic
Copy the updated logic from mt7915 to to fix issues in handling DFS radar detector states Signed-off-by: Felix Fietkau <[email protected]>
1 parent 3f30644 commit 2c86f67

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

drivers/net/wireless/mediatek/mt76/mt7615/init.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,6 @@ void mt7615_init_device(struct mt7615_dev *dev)
552552
dev->pm.stats.last_wake_event = jiffies;
553553
dev->pm.stats.last_doze_event = jiffies;
554554
mt7615_cap_dbdc_disable(dev);
555-
dev->phy.dfs_state = -1;
556555

557556
#ifdef CONFIG_NL80211_TESTMODE
558557
dev->mt76.test_ops = &mt7615_testmode_ops;

drivers/net/wireless/mediatek/mt76/mt7615/mac.c

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2287,51 +2287,60 @@ mt7615_dfs_init_radar_specs(struct mt7615_phy *phy)
22872287

22882288
int mt7615_dfs_init_radar_detector(struct mt7615_phy *phy)
22892289
{
2290-
struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
22912290
struct mt7615_dev *dev = phy->dev;
22922291
bool ext_phy = phy != &dev->phy;
2292+
enum mt76_dfs_state dfs_state, prev_state;
22932293
int err;
22942294

22952295
if (is_mt7663(&dev->mt76))
22962296
return 0;
22972297

2298-
if (dev->mt76.region == NL80211_DFS_UNSET) {
2299-
phy->dfs_state = -1;
2300-
if (phy->rdd_state)
2301-
goto stop;
2298+
prev_state = phy->mt76->dfs_state;
2299+
dfs_state = mt76_phy_dfs_state(phy->mt76);
23022300

2301+
if (prev_state == dfs_state)
23032302
return 0;
2304-
}
23052303

2306-
if (test_bit(MT76_SCANNING, &phy->mt76->state))
2307-
return 0;
2308-
2309-
if (phy->dfs_state == chandef->chan->dfs_state)
2310-
return 0;
2304+
if (prev_state == MT_DFS_STATE_UNKNOWN)
2305+
mt7615_dfs_stop_radar_detector(phy);
23112306

2312-
err = mt7615_dfs_init_radar_specs(phy);
2313-
if (err < 0) {
2314-
phy->dfs_state = -1;
2307+
if (dfs_state == MT_DFS_STATE_DISABLED)
23152308
goto stop;
2316-
}
23172309

2318-
phy->dfs_state = chandef->chan->dfs_state;
2310+
if (prev_state <= MT_DFS_STATE_DISABLED) {
2311+
err = mt7615_dfs_init_radar_specs(phy);
2312+
if (err < 0)
2313+
return err;
2314+
2315+
err = mt7615_dfs_start_radar_detector(phy);
2316+
if (err < 0)
2317+
return err;
23192318

2320-
if (chandef->chan->flags & IEEE80211_CHAN_RADAR) {
2321-
if (chandef->chan->dfs_state != NL80211_DFS_AVAILABLE)
2322-
return mt7615_dfs_start_radar_detector(phy);
2319+
phy->mt76->dfs_state = MT_DFS_STATE_CAC;
2320+
}
2321+
2322+
if (dfs_state == MT_DFS_STATE_CAC)
2323+
return 0;
23232324

2324-
return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_END, ext_phy,
2325-
MT_RX_SEL0, 0);
2325+
err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_END,
2326+
ext_phy, MT_RX_SEL0, 0);
2327+
if (err < 0) {
2328+
phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
2329+
return err;
23262330
}
23272331

2332+
phy->mt76->dfs_state = MT_DFS_STATE_ACTIVE;
2333+
return 0;
2334+
23282335
stop:
23292336
err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_NORMAL_START, ext_phy,
23302337
MT_RX_SEL0, 0);
23312338
if (err < 0)
23322339
return err;
23332340

23342341
mt7615_dfs_stop_radar_detector(phy);
2342+
phy->mt76->dfs_state = MT_DFS_STATE_DISABLED;
2343+
23352344
return 0;
23362345
}
23372346

0 commit comments

Comments
 (0)