]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mt76: mt7615: move radio/mac initialization to .start/stop callbacks
authorFelix Fietkau <nbd@nbd.name>
Thu, 31 Oct 2019 13:53:03 +0000 (14:53 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 09:05:59 +0000 (10:05 +0100)
Run initialization per phy

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/init.c
drivers/net/wireless/mediatek/mt76/mt7615/main.c
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h

index c4dbc635c2c6183cc0e3a0f664d888cc2ba42236..78bcdf90ca5e3f61b7290564fd07ee64a216aec0 100644 (file)
@@ -56,8 +56,6 @@ static void mt7615_mac_init(struct mt7615_dev *dev)
        mt76_rmw(dev, MT_AGG_SCR, MT_AGG_SCR_NLNAV_MID_PTEC_DIS,
                 MT_AGG_SCR_NLNAV_MID_PTEC_DIS);
 
-       mt7615_mcu_init_mac(dev);
-
        mt76_wr(dev, MT_DMA_DCR0, MT_DMA_DCR0_RX_VEC_DROP |
                FIELD_PREP(MT_DMA_DCR0_MAX_RX_LEN, 3072));
 
@@ -132,7 +130,6 @@ static int mt7615_init_hardware(struct mt7615_dev *dev)
        mt7615_mcu_set_eeprom(dev);
        mt7615_mac_init(dev);
        mt7615_phy_init(dev);
-       mt7615_mcu_ctrl_pm_state(dev, 0, 0);
        mt7615_mcu_del_wtbl_all(dev);
 
        /* Beacon and mgmt frames should occupy wcid 0 */
index 08b8285b58ae454f1c9ef82660778456e2569dc9..70d665ce924fb71a4c78a8fcedf7286071ef3537 100644 (file)
@@ -33,6 +33,17 @@ static int mt7615_start(struct ieee80211_hw *hw)
        mutex_lock(&dev->mt76.mutex);
 
        running = mt7615_dev_running(dev);
+
+       if (!running) {
+               mt7615_mcu_ctrl_pm_state(dev, 0, 0);
+               mt7615_mcu_set_mac_enable(dev, 0, true);
+       }
+
+       if (phy != &dev->phy) {
+               mt7615_mcu_ctrl_pm_state(dev, 1, 0);
+               mt7615_mcu_set_mac_enable(dev, 1, true);
+       }
+
        set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
 
        if (running)
@@ -57,9 +68,19 @@ static void mt7615_stop(struct ieee80211_hw *hw)
        mutex_lock(&dev->mt76.mutex);
 
        clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-       if (!mt7615_dev_running(dev))
+
+       if (phy != &dev->phy) {
+               mt7615_mcu_ctrl_pm_state(dev, 1, 1);
+               mt7615_mcu_set_mac_enable(dev, 1, false);
+       }
+
+       if (!mt7615_dev_running(dev)) {
                cancel_delayed_work_sync(&dev->mt76.mac_work);
 
+               mt7615_mcu_ctrl_pm_state(dev, 0, 1);
+               mt7615_mcu_set_mac_enable(dev, 0, false);
+       }
+
        mutex_unlock(&dev->mt76.mutex);
 }
 
index 9b09f2e742df06c01104b9496faeac1019072207..c08a301d4a620cb11484b0391aee8c82612180dc 100644 (file)
@@ -615,15 +615,15 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)
        return ret;
 }
 
-int mt7615_mcu_init_mac(struct mt7615_dev *dev)
+int mt7615_mcu_set_mac_enable(struct mt7615_dev *dev, int band, bool enable)
 {
        struct {
                u8 enable;
                u8 band;
                u8 rsv[2];
        } __packed req = {
-               .enable = 1,
-               .band = 0,
+               .enable = enable,
+               .band = band,
        };
 
        return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_MAC_INIT_CTRL,
index 3323baa7cc0c48225bb73604edf527e24d811d25..2adf3b8a61b89e5d8113fd99e9f2af4d47993160 100644 (file)
@@ -288,7 +288,7 @@ int mt7615_mac_wtbl_set_key(struct mt7615_dev *dev, struct mt76_wcid *wcid,
 
 int mt7615_mcu_set_dbdc(struct mt7615_dev *dev);
 int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);
-int mt7615_mcu_init_mac(struct mt7615_dev *dev);
+int mt7615_mcu_set_mac_enable(struct mt7615_dev *dev, int band, bool enable);
 int mt7615_mcu_set_rts_thresh(struct mt7615_phy *phy, u32 val);
 int mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int band, int enter);
 int mt7615_mcu_get_temperature(struct mt7615_dev *dev, int index);