]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mt76: mt7996: fix queue pause after scan due to wrong channel switch reason
authorStanleyYP Wang <StanleyYP.Wang@mediatek.com>
Tue, 3 Feb 2026 15:55:32 +0000 (23:55 +0800)
committerFelix Fietkau <nbd@nbd.name>
Tue, 24 Mar 2026 15:49:30 +0000 (15:49 +0000)
Previously, we used the IEEE80211_CONF_IDLE flag to avoid setting the
parking channel with the CH_SWITCH_NORMAL reason, which could trigger TX
emission before bootup CAC.

However, we found that this flag can be set after triggering scanning on a
connected station interface, and the reason CH_SWITCH_SCAN_BYPASS_DPD will
be used when switching back to the operating channel, which makes the
firmware failed to resume paused AC queues.

Seems that we should avoid relying on this flag after switching to single
multi-radio architecture. Instead, use the existence of chanctx as the
condition.

Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Link: https://patch.msgid.link/20260203155532.1098290-4-shayne.chen@mediatek.com
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c

index ee0fb3c45ca24c0cc129cd27c3e72faccd15cc3a..c632abe54707ff0b645d3a4a990b2abfa2b5bfe3 100644 (file)
@@ -3929,8 +3929,7 @@ int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag)
 
        if (phy->mt76->hw->conf.flags & IEEE80211_CONF_MONITOR)
                req.switch_reason = CH_SWITCH_NORMAL;
-       else if (phy->mt76->offchannel ||
-                phy->mt76->hw->conf.flags & IEEE80211_CONF_IDLE)
+       else if (phy->mt76->offchannel || !phy->mt76->chanctx)
                req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
        else if (!cfg80211_reg_can_beacon(phy->mt76->hw->wiphy, chandef,
                                          NL80211_IFTYPE_AP))