net/i40e: fix floating VEB

Turning off S-TAG identification will impact floating VEB,
VFs can't communicate with each other.
This patch fixes this issue by judging whether floating
VEB is enabled, S-TAG identification will be turned off
only when floating VEB is disabled.

Fixes: 4d61120d5ce7 ("net/i40e: fix dropping packets with ethertype 0x88A8")

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
This commit is contained in:
Beilei Xing 2016-11-04 19:08:08 +08:00 committed by Thomas Monjalon
parent c6431c891d
commit 0284624f14
2 changed files with 13 additions and 5 deletions
doc/guides/nics
drivers/net/i40e

@ -453,3 +453,9 @@ To work around this issue, ``ethtool -s <dev> autoneg on`` should be
set first and then the link can be brought up through ``ifconfig <dev> up``.
NOTE: requires Linux kernel i40e driver version >= 1.4.X
Receive packets with Ethertype 0x88A8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Due to the FW limitation, PF can receive packets with Ethertype 0x88A8
only when floating VEB is disabled.

@ -1121,11 +1121,13 @@ eth_i40e_dev_init(struct rte_eth_dev *dev)
/* Disable double vlan by default */
i40e_vsi_config_double_vlan(vsi, FALSE);
/* Disable S-TAG identification by default */
ret = I40E_READ_REG(hw, I40E_PRT_L2TAGSEN);
if (ret & I40E_L2_TAGS_S_TAG_MASK) {
ret &= ~I40E_L2_TAGS_S_TAG_MASK;
I40E_WRITE_REG(hw, I40E_PRT_L2TAGSEN, ret);
/* Disable S-TAG identification when floating_veb is disabled */
if (!pf->floating_veb) {
ret = I40E_READ_REG(hw, I40E_PRT_L2TAGSEN);
if (ret & I40E_L2_TAGS_S_TAG_MASK) {
ret &= ~I40E_L2_TAGS_S_TAG_MASK;
I40E_WRITE_REG(hw, I40E_PRT_L2TAGSEN, ret);
}
}
if (!vsi->max_macaddrs)