struct ieee80211_vif *vif = ath12k_ahvif_to_vif(ahvif);
        struct ath12k_wmi_vdev_create_arg vdev_arg = {0};
        struct ath12k_wmi_peer_create_arg peer_param = {0};
-       struct ieee80211_bss_conf *link_conf;
+       struct ieee80211_bss_conf *link_conf = NULL;
        u32 param_id, param_value;
        u16 nss;
        int i;
        if (vif->type == NL80211_IFTYPE_MONITOR && ar->monitor_vdev_created)
                return -EINVAL;
 
-       /* If no link is active and scan vdev is requested
-        * use a default link conf for scan address purpose.
-        */
-       if (arvif->link_id == ATH12K_DEFAULT_SCAN_LINK && vif->valid_links)
-               link_id = ffs(vif->valid_links) - 1;
-       else
-               link_id = arvif->link_id;
+       link_id = arvif->link_id;
 
-       link_conf = wiphy_dereference(hw->wiphy, vif->link_conf[link_id]);
-       if (!link_conf) {
-               ath12k_warn(ar->ab, "unable to access bss link conf in vdev create for vif %pM link %u\n",
-                           vif->addr, arvif->link_id);
-               return -ENOLINK;
+       if (link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
+               link_conf = wiphy_dereference(hw->wiphy, vif->link_conf[link_id]);
+               if (!link_conf) {
+                       ath12k_warn(ar->ab, "unable to access bss link conf in vdev create for vif %pM link %u\n",
+                                   vif->addr, arvif->link_id);
+                       return -ENOLINK;
+               }
        }
 
-       memcpy(arvif->bssid, link_conf->addr, ETH_ALEN);
+       if (link_conf)
+               memcpy(arvif->bssid, link_conf->addr, ETH_ALEN);
+       else
+               memcpy(arvif->bssid, vif->addr, ETH_ALEN);
 
        arvif->ar = ar;
        vdev_id = __ffs64(ab->free_vdev_map);
                break;
        }
 
-       arvif->txpower = link_conf->txpower;
+       if (link_conf)
+               arvif->txpower = link_conf->txpower;
+       else
+               arvif->txpower = NL80211_TX_POWER_AUTOMATIC;
+
        ret = ath12k_mac_txpower_recalc(ar);
        if (ret)
                goto err_peer_del;