return first_errno;
 }
 
-static int ath10k_mac_vif_sta_fix_wep_key(struct ath10k_vif *arvif, int keyidx)
-{
-       struct ath10k *ar = arvif->ar;
-       enum nl80211_iftype iftype = arvif->vif->type;
-       struct ieee80211_key_conf *key;
-       u32 flags;
-       int ret;
-       int i;
-
-       lockdep_assert_held(&ar->conf_mutex);
-
-       if (iftype != NL80211_IFTYPE_STATION)
-               return 0;
-
-       if (keyidx < 0)
-               return 0;
-
-       for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
-               if (!arvif->wep_keys[i])
-                       continue;
-
-               key = arvif->wep_keys[i];
-
-               flags = 0;
-               flags |= WMI_KEY_PAIRWISE;
-
-               if (key->keyidx == keyidx)
-                       flags |= WMI_KEY_TX_USAGE;
-
-               ret = ath10k_install_key(arvif, key, SET_KEY, arvif->bssid,
-                                        flags);
-               if (ret) {
-                       ath10k_warn(ar, "failed to install key %i on vdev %i: %d\n",
-                                   key->keyidx, arvif->vdev_id, ret);
-                       return ret;
-               }
-       }
-
-       return 0;
-}
-
 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
                                         struct ieee80211_key_conf *key)
 {
        bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
                      key->cipher == WLAN_CIPHER_SUITE_WEP104;
        int ret = 0;
+       int ret2;
        u32 flags = 0;
+       u32 flags2;
 
        /* this one needs to be done in software */
        if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
                 */
                if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
                        flags |= WMI_KEY_TX_USAGE;
-
-               /* mac80211 uploads static WEP keys as groupwise while fw/hw
-                * requires pairwise keys for non-self peers, i.e. BSSID in STA
-                * mode and associated stations in AP/IBSS.
-                *
-                * Static WEP keys for peer_addr=vif->addr and 802.1X WEP keys
-                * work fine when mapped directly from mac80211.
-                *
-                * Note: When installing first static WEP groupwise key (which
-                * should be pairwise) def_wep_key_idx isn't known yet (it's
-                * equal to -1).  Since .set_default_unicast_key is called only
-                * for static WEP it's used to re-upload the key as pairwise.
-                */
-               if (arvif->def_wep_key_idx >= 0 &&
-                   memcmp(peer_addr, arvif->vif->addr, ETH_ALEN)) {
-                       flags &= ~WMI_KEY_GROUP;
-                       flags |= WMI_KEY_PAIRWISE;
-               }
        }
 
        ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
                goto exit;
        }
 
+       /* mac80211 sets static WEP keys as groupwise while firmware requires
+        * them to be installed twice as both pairwise and groupwise.
+        */
+       if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
+               flags2 = flags;
+               flags2 &= ~WMI_KEY_GROUP;
+               flags2 |= WMI_KEY_PAIRWISE;
+
+               ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
+               if (ret) {
+                       ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
+                                   arvif->vdev_id, peer_addr, ret);
+                       ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
+                                                 peer_addr, flags);
+                       if (ret2)
+                               ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
+                                           arvif->vdev_id, peer_addr, ret2);
+                       goto exit;
+               }
+       }
+
        ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
 
        spin_lock_bh(&ar->data_lock);
 
        arvif->def_wep_key_idx = keyidx;
 
-       ret = ath10k_mac_vif_sta_fix_wep_key(arvif, keyidx);
-       if (ret) {
-               ath10k_warn(ar, "failed to fix sta wep key on vdev %i: %d\n",
-                           arvif->vdev_id, ret);
-               goto unlock;
-       }
-
 unlock:
        mutex_unlock(&arvif->ar->conf_mutex);
 }