else
                        mvif->sta_added = true;
        }
-       mt76_connac_mcu_sta_basic_tlv(sskb, vif, sta, enable, new_entry);
+       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, sskb, vif, sta, enable,
+                                     new_entry);
        if (enable && sta)
                mt76_connac_mcu_sta_tlv(phy->mt76, sskb, sta, vif, 0,
                                        MT76_STA_INFO_STATE_ASSOC);
 
 }
 EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_omac_tlv);
 
-void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
+void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_sta *sta,
                                   bool enable, bool newly)
        switch (vif->type) {
        case NL80211_IFTYPE_MESH_POINT:
        case NL80211_IFTYPE_AP:
-               if (vif->p2p)
+               if (vif->p2p && !is_mt7921(dev))
                        conn_type = CONNECTION_P2P_GC;
                else
                        conn_type = CONNECTION_INFRA_STA;
                basic->aid = cpu_to_le16(sta->aid);
                break;
        case NL80211_IFTYPE_STATION:
-               if (vif->p2p)
+               if (vif->p2p && !is_mt7921(dev))
                        conn_type = CONNECTION_P2P_GO;
                else
                        conn_type = CONNECTION_INFRA_AP;
                return PTR_ERR(skb);
 
        if (info->sta || !info->offload_fw)
-               mt76_connac_mcu_sta_basic_tlv(skb, info->vif, info->sta,
+               mt76_connac_mcu_sta_basic_tlv(dev, skb, info->vif, info->sta,
                                              info->enable, info->newly);
        if (info->sta && info->enable)
                mt76_connac_mcu_sta_tlv(phy, skb, info->sta,
 
 
 int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy);
 int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif);
-void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
+void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_sta *sta, bool enable,
                                   bool newly);
 
                return PTR_ERR(skb);
 
        /* starec basic */
-       mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
-                       !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
+       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable,
+                                     !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
        if (!enable)
                goto out;
 
 
 static const struct ieee80211_iface_limit if_limits_chanctx[] = {
        {
                .max = 2,
-               .types = BIT(NL80211_IFTYPE_STATION),
+               .types = BIT(NL80211_IFTYPE_STATION) |
+                        BIT(NL80211_IFTYPE_P2P_CLIENT)
        },
        {
                .max = 1,
-               .types = BIT(NL80211_IFTYPE_AP),
+               .types = BIT(NL80211_IFTYPE_AP) |
+                        BIT(NL80211_IFTYPE_P2P_GO)
        }
 };
 
        wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
                          WIPHY_FLAG_4ADDR_STATION);
        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
-                                BIT(NL80211_IFTYPE_AP);
+                                BIT(NL80211_IFTYPE_AP) |
+                                BIT(NL80211_IFTYPE_P2P_CLIENT) |
+                                BIT(NL80211_IFTYPE_P2P_GO);
        wiphy->max_remain_on_channel_duration = 5000;
        wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
        wiphy->max_scan_ssids = 4;
 
                return PTR_ERR(skb);
 
        /* starec basic */
-       mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
-                       !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
+       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable,
+                                     !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
        if (!enable)
                goto out;