|
@@ -6097,6 +6097,10 @@ static int i40e_reconstitute_veb(struct i40e_veb *veb)
|
|
if (ret)
|
|
if (ret)
|
|
goto end_reconstitute;
|
|
goto end_reconstitute;
|
|
|
|
|
|
|
|
+ if (pf->flags & I40E_FLAG_VEB_MODE_ENABLED)
|
|
|
|
+ veb->bridge_mode = BRIDGE_MODE_VEB;
|
|
|
|
+ else
|
|
|
|
+ veb->bridge_mode = BRIDGE_MODE_VEPA;
|
|
i40e_config_bridge_mode(veb);
|
|
i40e_config_bridge_mode(veb);
|
|
|
|
|
|
/* create the remaining VSIs attached to this VEB */
|
|
/* create the remaining VSIs attached to this VEB */
|
|
@@ -8031,7 +8035,12 @@ static int i40e_ndo_bridge_setlink(struct net_device *dev,
|
|
} else if (mode != veb->bridge_mode) {
|
|
} else if (mode != veb->bridge_mode) {
|
|
/* Existing HW bridge but different mode needs reset */
|
|
/* Existing HW bridge but different mode needs reset */
|
|
veb->bridge_mode = mode;
|
|
veb->bridge_mode = mode;
|
|
- i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED));
|
|
|
|
|
|
+ /* TODO: If no VFs or VMDq VSIs, disallow VEB mode */
|
|
|
|
+ if (mode == BRIDGE_MODE_VEB)
|
|
|
|
+ pf->flags |= I40E_FLAG_VEB_MODE_ENABLED;
|
|
|
|
+ else
|
|
|
|
+ pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED;
|
|
|
|
+ i40e_do_reset(pf, BIT_ULL(__I40E_PF_RESET_REQUESTED));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -8343,11 +8352,12 @@ static int i40e_add_vsi(struct i40e_vsi *vsi)
|
|
ctxt.uplink_seid = vsi->uplink_seid;
|
|
ctxt.uplink_seid = vsi->uplink_seid;
|
|
ctxt.connection_type = I40E_AQ_VSI_CONN_TYPE_NORMAL;
|
|
ctxt.connection_type = I40E_AQ_VSI_CONN_TYPE_NORMAL;
|
|
ctxt.flags = I40E_AQ_VSI_TYPE_PF;
|
|
ctxt.flags = I40E_AQ_VSI_TYPE_PF;
|
|
- if (i40e_is_vsi_uplink_mode_veb(vsi)) {
|
|
|
|
|
|
+ if ((pf->flags & I40E_FLAG_VEB_MODE_ENABLED) &&
|
|
|
|
+ (i40e_is_vsi_uplink_mode_veb(vsi))) {
|
|
ctxt.info.valid_sections |=
|
|
ctxt.info.valid_sections |=
|
|
- cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
|
|
|
|
|
|
+ cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
|
|
ctxt.info.switch_id =
|
|
ctxt.info.switch_id =
|
|
- cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
|
|
|
|
|
|
+ cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
|
|
}
|
|
}
|
|
i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
|
|
i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
|
|
break;
|
|
break;
|
|
@@ -8746,6 +8756,9 @@ struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type,
|
|
__func__);
|
|
__func__);
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
+ /* We come up by default in VEPA mode */
|
|
|
|
+ veb->bridge_mode = BRIDGE_MODE_VEPA;
|
|
|
|
+ pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED;
|
|
i40e_config_bridge_mode(veb);
|
|
i40e_config_bridge_mode(veb);
|
|
}
|
|
}
|
|
for (i = 0; i < I40E_MAX_VEB && !veb; i++) {
|
|
for (i = 0; i < I40E_MAX_VEB && !veb; i++) {
|