int rc;
        struct wireless_dev *wdev = ndev->ieee80211_ptr;
        u8 wmi_nettype = wil_iftype_nl2wmi(wdev->iftype);
+       u8 is_go = (wdev->iftype == NL80211_IFTYPE_P2P_GO);
 
        if (pbss)
                wmi_nettype = WMI_NETTYPE_P2P;
 
+       wil_dbg_misc(wil, "%s: is_go=%d\n", __func__, is_go);
+       if (is_go && !pbss) {
+               wil_err(wil, "%s: P2P GO must be in PBSS\n", __func__);
+               return -ENOTSUPP;
+       }
+
        wil_set_recovery_state(wil, fw_recovery_idle);
 
        mutex_lock(&wil->mutex);
 
        netif_carrier_on(ndev);
 
-       rc = wmi_pcp_start(wil, bi, wmi_nettype, chan, hidden_ssid);
+       rc = wmi_pcp_start(wil, bi, wmi_nettype, chan, hidden_ssid, is_go);
        if (rc)
                goto err_pcp_start;
 
 
 
 int wmi_set_mac_address(struct wil6210_priv *wil, void *addr);
 int wmi_pcp_start(struct wil6210_priv *wil, int bi, u8 wmi_nettype,
-                 u8 chan, u8 hidden_ssid);
+                 u8 chan, u8 hidden_ssid, u8 is_go);
 int wmi_pcp_stop(struct wil6210_priv *wil);
 void wil6210_disconnect(struct wil6210_priv *wil, const u8 *bssid,
                        u16 reason_code, bool from_event);
 
 }
 
 int wmi_pcp_start(struct wil6210_priv *wil, int bi, u8 wmi_nettype,
-                 u8 chan, u8 hidden_ssid)
+                 u8 chan, u8 hidden_ssid, u8 is_go)
 {
        int rc;
 
                .channel = chan - 1,
                .pcp_max_assoc_sta = max_assoc_sta,
                .hidden_ssid = hidden_ssid,
+               .is_go = is_go,
        };
        struct {
                struct wmi_cmd_hdr wmi;