When PF establishes a connection with Switch Manager, it receives
a logic port range from SM, and registers certain logic ports from
that range, then a default VID will be send back from SM. This whole
transaction needs to be finished in dev_init, otherwise, in dev_start
the interrupt setting will be changed according to RX queue number,
and probably will cause this transaction failed.

Signed-off-by: Shaopeng He <shaopeng.he at intel.com>
Acked-by: Jing Chen <jing.d.chen at intel.com>
---
 drivers/net/fm10k/fm10k_ethdev.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index 9b210d7..2cb0b94 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -2786,6 +2786,21 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)

        fm10k_mbx_unlock(hw);

+       /* Make sure default VID is ready before going forward. */
+       if (hw->mac.type == fm10k_mac_pf) {
+               for (i = 0; i < MAX_QUERY_SWITCH_STATE_TIMES; i++) {
+                       if (hw->mac.default_vid)
+                               break;
+                       /* Delay some time to acquire async port VLAN info. */
+                       rte_delay_us(WAIT_SWITCH_MSG_US);
+               }
+
+               if (!hw->mac.default_vid) {
+                       PMD_INIT_LOG(ERR, "default VID is not ready");
+                       return -1;
+               }
+       }
+
        /* Add default mac address */
        fm10k_MAC_filter_set(dev, hw->mac.addr, true,
                MAIN_VSI_POOL_NUMBER);
-- 
1.9.3

Reply via email to