struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct ieee80211_chanctx_conf *ctx;
        u8 chains_static, chains_dynamic;
-       struct cfg80211_chan_def chandef;
+       struct cfg80211_chan_def chandef, ap_def;
        int ret, i;
        struct iwl_binding_cmd_v1 binding_cmd = {};
        struct iwl_time_quota_cmd quota_cmd = {};
                return -EINVAL;
        }
        chandef = ctx->def;
+       ap_def = ctx->ap;
        chains_static = ctx->rx_chains_static;
        chains_dynamic = ctx->rx_chains_dynamic;
        rcu_read_unlock();
 
        ret = iwl_mvm_phy_ctxt_add(mvm, mvmvif->deflink.phy_ctxt, &chandef,
-                                  chains_static, chains_dynamic);
+                                  &ap_def, chains_static, chains_dynamic);
        if (ret)
                return ret;
 
 
 
        for_each_vif_active_link(vif, link_conf, link_id) {
                struct ieee80211_chanctx_conf *chanctx_conf;
-               struct cfg80211_chan_def min_def;
+               struct cfg80211_chan_def min_def, ap_def;
                struct iwl_mvm_phy_ctxt *phy_ctxt;
                u8 chains_static, chains_dynamic;
 
                 * everything here and use it after unlocking
                 */
                min_def = chanctx_conf->min_def;
+               ap_def = chanctx_conf->ap;
                chains_static = chanctx_conf->rx_chains_static;
                chains_dynamic = chanctx_conf->rx_chains_dynamic;
                rcu_read_unlock();
                if (!phy_ctxt)
                        continue;
 
-               ret = iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, &min_def,
+               ret = iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, &min_def, &ap_def,
                                               chains_static, chains_dynamic);
        }
 
 
        rcu_read_unlock();
 
        phy_ctxt = &mvm->phy_ctxts[*phy_ctxt_id];
-       ret = iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, &ctx.def,
+       ret = iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, &ctx.def, &ctx.ap,
                                       ctx.rx_chains_static,
                                       ctx.rx_chains_dynamic);
        if (ret)
 
                                     IEEE80211_VIF_SUPPORTS_CQM_RSSI;
        }
 
+       if (vif->p2p || iwl_fw_lookup_cmd_ver(mvm->fw, PHY_CONTEXT_CMD, 1) < 5)
+               vif->driver_flags |= IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW;
+
        if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
                mvm->p2p_device_vif = vif;
 
        cfg80211_chandef_create(&chandef, channel, NL80211_CHAN_NO_HT);
 
        return iwl_mvm_phy_ctxt_add(mvm, mvmvif->deflink.phy_ctxt,
-                                   &chandef, 1, 1);
+                                   &chandef, NULL, 1, 1);
 }
 
 /* Execute the common part for MLD and non-MLD modes */
                goto out;
        }
 
-       ret = iwl_mvm_phy_ctxt_add(mvm, phy_ctxt, def,
+       ret = iwl_mvm_phy_ctxt_add(mvm, phy_ctxt, def, &ctx->ap,
                                   ctx->rx_chains_static,
                                   ctx->rx_chains_dynamic);
        if (ret) {
        }
 
        iwl_mvm_bt_coex_vif_change(mvm);
-       iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, def,
+       iwl_mvm_phy_ctxt_changed(mvm, phy_ctxt, def, &ctx->ap,
                                 ctx->rx_chains_static,
                                 ctx->rx_chains_dynamic);
 
 
 struct iwl_mvm_phy_ctxt *iwl_mvm_get_free_phy_ctxt(struct iwl_mvm *mvm);
 int iwl_mvm_phy_ctxt_add(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt,
                         const struct cfg80211_chan_def *chandef,
+                        const struct cfg80211_chan_def *ap,
                         u8 chains_static, u8 chains_dynamic);
 int iwl_mvm_phy_ctxt_changed(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt,
                             const struct cfg80211_chan_def *chandef,
+                            const struct cfg80211_chan_def *ap,
                             u8 chains_static, u8 chains_dynamic);
 void iwl_mvm_phy_ctxt_ref(struct iwl_mvm *mvm,
                          struct iwl_mvm_phy_ctxt *ctxt);
 
 static int iwl_mvm_phy_ctxt_apply(struct iwl_mvm *mvm,
                                  struct iwl_mvm_phy_ctxt *ctxt,
                                  const struct cfg80211_chan_def *chandef,
+                                 const struct cfg80211_chan_def *ap,
                                  u8 chains_static, u8 chains_dynamic,
                                  u32 action)
 {
        int ret;
        int ver = iwl_fw_lookup_cmd_ver(mvm->fw, PHY_CONTEXT_CMD, 1);
 
+       if (ver < 5 || !ap || !ap->chan)
+               ap = NULL;
+
        if (ver >= 3 && ver <= 5) {
                struct iwl_phy_context_cmd cmd = {};
 
                                          chains_static,
                                          chains_dynamic);
 
+               if (ap) {
+                       cmd.v5.sbb_bandwidth = iwl_mvm_get_channel_width(ap);
+                       cmd.v5.sbb_ctrl_channel_loc = iwl_mvm_get_ctrl_pos(ap);
+               }
+
                ret = iwl_mvm_send_cmd_pdu(mvm, PHY_CONTEXT_CMD,
                                           0, sizeof(cmd), &cmd);
        } else if (ver < 3) {
  */
 int iwl_mvm_phy_ctxt_add(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt,
                         const struct cfg80211_chan_def *chandef,
+                        const struct cfg80211_chan_def *ap,
                         u8 chains_static, u8 chains_dynamic)
 {
        int ret;
        ctxt->width = chandef->width;
        ctxt->center_freq1 = chandef->center_freq1;
 
-       ret = iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef,
+       ret = iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef, ap,
                                     chains_static, chains_dynamic,
                                     FW_CTXT_ACTION_ADD);
 
  */
 int iwl_mvm_phy_ctxt_changed(struct iwl_mvm *mvm, struct iwl_mvm_phy_ctxt *ctxt,
                             const struct cfg80211_chan_def *chandef,
+                            const struct cfg80211_chan_def *ap,
                             u8 chains_static, u8 chains_dynamic)
 {
        enum iwl_ctxt_action action = FW_CTXT_ACTION_MODIFY;
                int ret;
 
                /* ... remove it here ...*/
-               ret = iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef,
+               ret = iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef, NULL,
                                             chains_static, chains_dynamic,
                                             FW_CTXT_ACTION_REMOVE);
                if (ret)
        ctxt->width = chandef->width;
        ctxt->center_freq1 = chandef->center_freq1;
 
-       return iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef,
+       return iwl_mvm_phy_ctxt_apply(mvm, ctxt, chandef, ap,
                                      chains_static, chains_dynamic,
                                      action);
 }
 
        cfg80211_chandef_create(&chandef, ctxt->channel, NL80211_CHAN_NO_HT);
 
-       iwl_mvm_phy_ctxt_apply(mvm, ctxt, &chandef, 1, 1,
+       iwl_mvm_phy_ctxt_apply(mvm, ctxt, &chandef, NULL, 1, 1,
                               FW_CTXT_ACTION_REMOVE);
 }