On X550, as required by datasheet, E-tag packets are not expected
when double VLAN are used. So modify the register PFVTCTL after
enabling double VLAN to select pool by MAC but not MAC or E-tag.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu at intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 4c4c6df..83df0c0 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -138,6 +138,8 @@

 #define IXGBE_CYCLECOUNTER_MASK   0xffffffffffffffffULL

+#define IXGBE_VT_CTL_POOLING_MODE_MASK         0x00030000
+
 static int eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev);
 static int eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev);
 static int  ixgbe_dev_configure(struct rte_eth_dev *dev);
@@ -1725,6 +1727,14 @@ ixgbe_vlan_hw_extend_enable(struct rte_eth_dev *dev)
        ctrl |= IXGBE_EXTENDED_VLAN;
        IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl);

+       /* Clear pooling mode of PFVTCTL. It's required by X550. */
+       if (hw->mac.type == ixgbe_mac_X550 ||
+           hw->mac.type == ixgbe_mac_X550EM_x) {
+               ctrl = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
+               ctrl &= ~IXGBE_VT_CTL_POOLING_MODE_MASK;
+               IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, ctrl);
+       }
+
        /*
         * VET EXT field in the EXVET register = 0x8100 by default
         * So no need to change. Same to VT field of DMATXCTL register
-- 
1.9.3

Reply via email to