net/qede: disable per-VF Tx switching feature
[dpdk.git] / drivers / net / qede / qede_ethdev.c
index 75690d9..c228b06 100644 (file)
@@ -453,6 +453,12 @@ int qede_activate_vport(struct rte_eth_dev *eth_dev, bool flg)
        params.update_vport_active_tx_flg = 1;
        params.vport_active_rx_flg = flg;
        params.vport_active_tx_flg = flg;
+#ifndef RTE_LIBRTE_QEDE_VF_TX_SWITCH
+       if (IS_VF(edev)) {
+               params.update_tx_switching_flg = 1;
+               params.tx_switching_flg = !flg;
+       }
+#endif
        for_each_hwfn(edev, i) {
                p_hwfn = &edev->hwfns[i];
                params.opaque_fid = p_hwfn->hw_info.opaque_fid;
@@ -463,7 +469,8 @@ int qede_activate_vport(struct rte_eth_dev *eth_dev, bool flg)
                        break;
                }
        }
-       DP_INFO(edev, "vport %s\n", flg ? "activated" : "deactivated");
+       DP_INFO(edev, "vport %s VF tx-switch %s\n", flg ? "activated" : "deactivated",
+                       params.tx_switching_flg ? "enabled" : "disabled");
        return rc;
 }
 
@@ -520,7 +527,7 @@ int qede_enable_tpa(struct rte_eth_dev *eth_dev, bool flg)
                        return -1;
                }
        }
-
+       qdev->enable_lro = flg;
        DP_INFO(edev, "LRO is %s\n", flg ? "enabled" : "disabled");
 
        return 0;
@@ -1005,7 +1012,7 @@ static int qede_vlan_filter_set(struct rte_eth_dev *eth_dev,
        return rc;
 }
 
-static void qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
+static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
 {
        struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
        struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
@@ -1043,6 +1050,8 @@ static void qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
 
        DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n",
                mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter);
+
+       return 0;
 }
 
 static void qede_prandom_bytes(uint32_t *buff)
@@ -1108,6 +1117,7 @@ static void qede_fastpath_start(struct ecore_dev *edev)
 
 static int qede_dev_start(struct rte_eth_dev *eth_dev)
 {
+       struct rte_eth_rxmode *rxmode = &eth_dev->data->dev_conf.rxmode;
        struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
        struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
 
@@ -1118,10 +1128,15 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
                if (qede_update_mtu(eth_dev, qdev->new_mtu))
                        goto err;
                qdev->mtu = qdev->new_mtu;
-               /* If MTU has changed then update TPA too */
-               if (qdev->enable_lro)
-                       if (qede_enable_tpa(eth_dev, true))
-                               goto err;
+       }
+
+       /* Configure TPA parameters */
+       if (rxmode->enable_lro) {
+               if (qede_enable_tpa(eth_dev, true))
+                       return -EINVAL;
+               /* Enable scatter mode for LRO */
+               if (!rxmode->enable_scatter)
+                       eth_dev->data->scattered_rx = 1;
        }
 
        /* Start queues */
@@ -1133,7 +1148,7 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
         * Also, we would like to retain similar behavior in PF case, so we
         * don't do PF/VF specific check here.
         */
-       if (eth_dev->data->dev_conf.rxmode.mq_mode == ETH_MQ_RX_RSS)
+       if (rxmode->mq_mode == ETH_MQ_RX_RSS)
                if (qede_config_rss(eth_dev))
                        goto err;
 
@@ -1169,7 +1184,6 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
        if (qdev->enable_lro)
                qede_enable_tpa(eth_dev, false);
 
-       /* TODO: Do we need disable LRO or RSS */
        /* Stop queues */
        qede_stop_queues(eth_dev);
 
@@ -1187,6 +1201,7 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
        struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
        struct rte_eth_rxmode *rxmode = &eth_dev->data->dev_conf.rxmode;
+       int ret;
 
        PMD_INIT_FUNC_TRACE(edev);
 
@@ -1256,20 +1271,12 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        qdev->mtu = rxmode->max_rx_pkt_len;
        qdev->new_mtu = qdev->mtu;
 
-       /* Configure TPA parameters */
-       if (rxmode->enable_lro) {
-               if (qede_enable_tpa(eth_dev, true))
-                       return -EINVAL;
-               /* Enable scatter mode for LRO */
-               if (!rxmode->enable_scatter)
-                       eth_dev->data->scattered_rx = 1;
-       }
-       qdev->enable_lro = rxmode->enable_lro;
-
        /* Enable VLAN offloads by default */
-       qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |
+       ret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |
                        ETH_VLAN_FILTER_MASK |
                        ETH_VLAN_EXTEND_MASK);
+       if (ret)
+               return ret;
 
        DP_INFO(edev, "Device configured with RSS=%d TSS=%d\n",
                        QEDE_RSS_COUNT(qdev), QEDE_TSS_COUNT(qdev));