Initialize rxfilter mask at bootstrap an not at mac start.
This is a preliminary patch to share mt76x2_mac_start routine
between mt76x2e and mt76x0e drivers

Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com>
---
 drivers/net/wireless/mediatek/mt76/mt76x0/init.c | 10 ++--------
 drivers/net/wireless/mediatek/mt76/mt76x0/main.c |  9 +++++++++
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
index 6600ee046800..a5529616cb8d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
@@ -271,15 +271,7 @@ int mt76x0_mac_start(struct mt76x0_dev *dev)
        if (!mt76x02_wait_for_wpdma(&dev->mt76, 200000))
                return -ETIMEDOUT;
 
-       dev->mt76.rxfilter = MT_RX_FILTR_CFG_CRC_ERR |
-               MT_RX_FILTR_CFG_PHY_ERR | MT_RX_FILTR_CFG_PROMISC |
-               MT_RX_FILTR_CFG_VER_ERR | MT_RX_FILTR_CFG_DUP |
-               MT_RX_FILTR_CFG_CFACK | MT_RX_FILTR_CFG_CFEND |
-               MT_RX_FILTR_CFG_ACK | MT_RX_FILTR_CFG_CTS |
-               MT_RX_FILTR_CFG_RTS | MT_RX_FILTR_CFG_PSPOLL |
-               MT_RX_FILTR_CFG_BA | MT_RX_FILTR_CFG_CTRL_RSV;
        mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-
        mt76_wr(dev, MT_MAC_SYS_CTRL,
                MT_MAC_SYS_CTRL_ENABLE_TX | MT_MAC_SYS_CTRL_ENABLE_RX);
 
@@ -370,6 +362,8 @@ int mt76x0_init_hardware(struct mt76x0_dev *dev)
        if (ret)
                return ret;
 
+       dev->mt76.rxfilter = mt76_rr(dev, MT_RX_FILTR_CFG);
+
        ret = mt76x0_init_wcid_mem(dev);
        if (ret)
                return ret;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c 
b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
index 66e12802953c..e0fc691ce78e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/main.c
@@ -73,6 +73,15 @@ static int mt76x0_config(struct ieee80211_hw *hw, u32 
changed)
                        mt76x0_phy_set_txpower(dev);
        }
 
+       if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
+               if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
+                       dev->mt76.rxfilter |= MT_RX_FILTR_CFG_PROMISC;
+               else
+                       dev->mt76.rxfilter &= ~MT_RX_FILTR_CFG_PROMISC;
+
+               mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
+       }
+
        mutex_unlock(&dev->mt76.mutex);
 
        return ret;
-- 
2.17.1

Reply via email to