forked from Minki/linux
i40e: Add new update VSI flow to accommodate FW fix with VSI Loopback mode
All VSIs on a VEB should either have loopback enabled or disabled, a mixed mode is not supported for a VEB. Since our driver supports multiple VSIs per PF that need to talk to each other make sure to enable Loopback for the PF and FDIR VSI as well. Also, we now have to explicitly enable Loopback mode otherwise we fail VSI creation for VMDq and VF VSIs. Change-ID: Ib68c3ea4aeb730ac9468f930610de456efbe5b20 Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com> Tested-by: Jim Young <jamesx.m.young@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
b9a81b2b73
commit
79c21a827e
@ -7797,6 +7797,10 @@ static int i40e_add_vsi(struct i40e_vsi *vsi)
|
||||
ctxt.uplink_seid = vsi->uplink_seid;
|
||||
ctxt.connection_type = 0x1; /* regular data port */
|
||||
ctxt.flags = I40E_AQ_VSI_TYPE_PF;
|
||||
ctxt.info.valid_sections |=
|
||||
cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
|
||||
ctxt.info.switch_id =
|
||||
cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
|
||||
i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
|
||||
break;
|
||||
|
||||
@ -8182,7 +8186,15 @@ struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type,
|
||||
else if ((vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
|
||||
veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid,
|
||||
vsi->tc_config.enabled_tc);
|
||||
|
||||
if (veb) {
|
||||
if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) {
|
||||
dev_info(&vsi->back->pdev->dev,
|
||||
"%s: New VSI creation error, uplink seid of LAN VSI expected.\n",
|
||||
__func__);
|
||||
return NULL;
|
||||
}
|
||||
i40e_enable_pf_switch_lb(pf);
|
||||
}
|
||||
for (i = 0; i < I40E_MAX_VEB && !veb; i++) {
|
||||
if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid)
|
||||
veb = pf->veb[i];
|
||||
|
@ -707,7 +707,6 @@ complete_reset:
|
||||
wr32(hw, I40E_VFGEN_RSTAT1(vf->vf_id), I40E_VFR_VFACTIVE);
|
||||
i40e_flush(hw);
|
||||
}
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
|
||||
/**
|
||||
* i40e_enable_pf_switch_lb
|
||||
@ -715,7 +714,7 @@ complete_reset:
|
||||
*
|
||||
* enable switch loop back or die - no point in a return value
|
||||
**/
|
||||
static void i40e_enable_pf_switch_lb(struct i40e_pf *pf)
|
||||
void i40e_enable_pf_switch_lb(struct i40e_pf *pf)
|
||||
{
|
||||
struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
|
||||
struct i40e_vsi_context ctxt;
|
||||
@ -742,7 +741,6 @@ static void i40e_enable_pf_switch_lb(struct i40e_pf *pf)
|
||||
__func__, vsi->back->hw.aq.asq_last_status);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* i40e_disable_pf_switch_lb
|
||||
|
@ -126,5 +126,6 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable);
|
||||
|
||||
void i40e_vc_notify_link_state(struct i40e_pf *pf);
|
||||
void i40e_vc_notify_reset(struct i40e_pf *pf);
|
||||
void i40e_enable_pf_switch_lb(struct i40e_pf *pf);
|
||||
|
||||
#endif /* _I40E_VIRTCHNL_PF_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user