return ret;
        }
 
-       ret = ath11k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
+       ret = ath11k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr, NULL, 0, 0);
        if (ret) {
                ath11k_warn(ar->ab, "failed to put up monitor vdev %i: %d\n",
                            vdev_id, ret);
                                     struct ieee80211_bss_conf *info)
 {
        struct ath11k *ar = arvif->ar;
+       struct ath11k_vif *tx_arvif = NULL;
        int ret = 0;
 
        lockdep_assert_held(&arvif->ar->conf_mutex);
 
        ether_addr_copy(arvif->bssid, info->bssid);
 
+       if (arvif->vif->mbssid_tx_vif)
+               tx_arvif = (struct ath11k_vif *)arvif->vif->mbssid_tx_vif->drv_priv;
+
        ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
-                                arvif->bssid);
+                                arvif->bssid,
+                                tx_arvif ? tx_arvif->bssid : NULL,
+                                info->bssid_index,
+                                1 << info->bssid_indicator);
        if (ret) {
                ath11k_warn(ar->ab, "failed to bring up vdev %d: %i\n",
                            arvif->vdev_id, ret);
        arvif->aid = vif->cfg.aid;
        ether_addr_copy(arvif->bssid, bss_conf->bssid);
 
-       ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
+       ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid,
+                                NULL, 0, 0);
        if (ret) {
                ath11k_warn(ar->ab, "failed to set vdev %d up: %d\n",
                            arvif->vdev_id, ret);
                           int n_vifs)
 {
        struct ath11k_base *ab = ar->ab;
-       struct ath11k_vif *arvif;
+       struct ath11k_vif *arvif, *tx_arvif = NULL;
+       struct ieee80211_vif *mbssid_tx_vif;
        int ret;
        int i;
        bool monitor_vif = false;
                        ath11k_warn(ab, "failed to update bcn tmpl during csa: %d\n",
                                    ret);
 
+               mbssid_tx_vif = arvif->vif->mbssid_tx_vif;
+               if (mbssid_tx_vif)
+                       tx_arvif = (struct ath11k_vif *)mbssid_tx_vif->drv_priv;
+
                ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
-                                        arvif->bssid);
+                                        arvif->bssid,
+                                        tx_arvif ? tx_arvif->bssid : NULL,
+                                        arvif->vif->bss_conf.bssid_index,
+                                        1 << arvif->vif->bss_conf.bssid_indicator);
                if (ret) {
                        ath11k_warn(ab, "failed to bring vdev up %d: %d\n",
                                    arvif->vdev_id, ret);
        }
 
        if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
-               ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, 0, ar->mac_addr);
+               ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, 0, ar->mac_addr,
+                                        NULL, 0, 0);
                if (ret) {
                        ath11k_warn(ab, "failed put monitor up: %d\n", ret);
                        return ret;
 
        return ret;
 }
 
-int ath11k_wmi_vdev_up(struct ath11k *ar, u32 vdev_id, u32 aid, const u8 *bssid)
+int ath11k_wmi_vdev_up(struct ath11k *ar, u32 vdev_id, u32 aid, const u8 *bssid,
+                      u8 *tx_bssid, u32 nontx_profile_idx, u32 nontx_profile_cnt)
 {
        struct ath11k_pdev_wmi *wmi = ar->wmi;
        struct wmi_vdev_up_cmd *cmd;
 
        ether_addr_copy(cmd->vdev_bssid.addr, bssid);
 
+       cmd->nontx_profile_idx = nontx_profile_idx;
+       cmd->nontx_profile_cnt = nontx_profile_cnt;
+       if (tx_bssid)
+               ether_addr_copy(cmd->tx_vdev_bssid.addr, tx_bssid);
+
        if (arvif && arvif->vif->type == NL80211_IFTYPE_STATION) {
                bss_conf = &arvif->vif->bss_conf;