|
|
@@ -137,10 +137,26 @@ static int qede_set_vf_mac(struct net_device *ndev, int vfidx, u8 *mac)
|
|
|
static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param)
|
|
|
{
|
|
|
struct qede_dev *edev = netdev_priv(pci_get_drvdata(pdev));
|
|
|
+ struct qed_dev_info *qed_info = &edev->dev_info.common;
|
|
|
+ int rc;
|
|
|
|
|
|
DP_VERBOSE(edev, QED_MSG_IOV, "Requested %d VFs\n", num_vfs_param);
|
|
|
|
|
|
- return edev->ops->iov->configure(edev->cdev, num_vfs_param);
|
|
|
+ rc = edev->ops->iov->configure(edev->cdev, num_vfs_param);
|
|
|
+
|
|
|
+ /* Enable/Disable Tx switching for PF */
|
|
|
+ if ((rc == num_vfs_param) && netif_running(edev->ndev) &&
|
|
|
+ qed_info->mf_mode != QED_MF_NPAR && qed_info->tx_switching) {
|
|
|
+ struct qed_update_vport_params params;
|
|
|
+
|
|
|
+ memset(¶ms, 0, sizeof(params));
|
|
|
+ params.vport_id = 0;
|
|
|
+ params.update_tx_switching_flg = 1;
|
|
|
+ params.tx_switching_flg = num_vfs_param ? 1 : 0;
|
|
|
+ edev->ops->vport_update(edev->cdev, ¶ms);
|
|
|
+ }
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
@@ -3291,6 +3307,12 @@ static int qede_start_queues(struct qede_dev *edev)
|
|
|
vport_update_params.update_vport_active_flg = 1;
|
|
|
vport_update_params.vport_active_flg = 1;
|
|
|
|
|
|
+ if ((qed_info->mf_mode == QED_MF_NPAR || pci_num_vf(edev->pdev)) &&
|
|
|
+ qed_info->tx_switching) {
|
|
|
+ vport_update_params.update_tx_switching_flg = 1;
|
|
|
+ vport_update_params.tx_switching_flg = 1;
|
|
|
+ }
|
|
|
+
|
|
|
/* Fill struct with RSS params */
|
|
|
if (QEDE_RSS_CNT(edev) > 1) {
|
|
|
vport_update_params.update_rss_flg = 1;
|