mt76: mt7615: wake device before configuring hw keys
authorLorenzo Bianconi <lorenzo@kernel.org>
Fri, 3 Jul 2020 08:15:45 +0000 (10:15 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 21 Jul 2020 17:01:16 +0000 (19:01 +0200)
Make sure the device is in full-power before uploading keys to the hw

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/main.c

index 5f2c50a..3c23047 100644 (file)
@@ -336,7 +336,7 @@ static int mt7615_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
        struct mt7615_sta *msta = sta ? (struct mt7615_sta *)sta->drv_priv :
                                  &mvif->sta;
        struct mt76_wcid *wcid = &msta->wcid;
-       int idx = key->keyidx;
+       int idx = key->keyidx, err;
 
        /* The hardware does not support per-STA RX GTK, fallback
         * to software mode for these.
@@ -366,6 +366,8 @@ static int mt7615_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                return -EOPNOTSUPP;
        }
 
+       mt7615_mutex_acquire(dev);
+
        if (cmd == SET_KEY) {
                key->hw_key_idx = wcid->idx;
                wcid->hw_key_idx = idx;
@@ -376,9 +378,13 @@ static int mt7615_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                            cmd == SET_KEY ? key : NULL);
 
        if (mt76_is_usb(&dev->mt76))
-               return mt7615_queue_key_update(dev, cmd, msta, key);
+               err = mt7615_queue_key_update(dev, cmd, msta, key);
+       else
+               err = mt7615_mac_wtbl_set_key(dev, wcid, key, cmd);
 
-       return mt7615_mac_wtbl_set_key(dev, wcid, key, cmd);
+       mt7615_mutex_release(dev);
+
+       return err;
 }
 
 static int mt7615_config(struct ieee80211_hw *hw, u32 changed)