flags = 0;
                flags |= WMI_KEY_PAIRWISE;
 
-               /* set TX_USAGE flag for default key id */
-               if (arvif->def_wep_key_idx == i)
-                       flags |= WMI_KEY_TX_USAGE;
+               ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
+                                        addr, flags);
+               if (ret)
+                       return ret;
+
+               flags = 0;
+               flags |= WMI_KEY_GROUP;
 
                ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
                                         addr, flags);
                spin_unlock_bh(&ar->data_lock);
        }
 
+       /* In some cases (notably with static WEP IBSS with multiple keys)
+        * multicast Tx becomes broken. Both pairwise and groupwise keys are
+        * installed already. Using WMI_KEY_TX_USAGE in different combinations
+        * didn't seem help. Using def_keyid vdev parameter seems to be
+        * effective so use that.
+        *
+        * FIXME: Revisit. Perhaps this can be done in a less hacky way.
+        */
+       if (arvif->def_wep_key_idx == -1)
+               return 0;
+
+       ret = ath10k_wmi_vdev_set_param(arvif->ar,
+                                       arvif->vdev_id,
+                                       arvif->ar->wmi.vdev_param->def_keyid,
+                                       arvif->def_wep_key_idx);
+       if (ret) {
+               ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
+                           arvif->vdev_id, ret);
+               return ret;
+       }
+
        return 0;
 }