aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
diff options
context:
space:
mode:
authorNeerav Parikh <neerav.parikh@intel.com>2014-11-11 19:18:57 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-11-18 04:09:27 -0500
commit4b7698cb95638693e3d9a2fc01a2bdbd8710ff81 (patch)
treee75a4fdfc2b404bbe80ad633fc4416731e6b87ab /drivers/net/ethernet/intel/i40e/i40e_ethtool.c
parentd341b7a52be79520f8e8b1ed0e3df657b2442e5b (diff)
i40e: Prevent link flow control settings when PFC is enabled
When PFC is enabled we should not proceed with setting the link flow control parameters. Also, always report the link flow Tx/Rx settings as off when PFC is enabled. Change-ID: Ib09ec58afdf0b2e587ac9d8851a5c80ad58206c4 Signed-off-by: Neerav Parikh <neerav.parikh@intel.com> Tested-By: Jack Morgan <jack.morgan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_ethtool.c')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_ethtool.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index afad5aa5a12b..bb1698a7b3d1 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -644,11 +644,19 @@ static void i40e_get_pauseparam(struct net_device *netdev,
644 struct i40e_pf *pf = np->vsi->back; 644 struct i40e_pf *pf = np->vsi->back;
645 struct i40e_hw *hw = &pf->hw; 645 struct i40e_hw *hw = &pf->hw;
646 struct i40e_link_status *hw_link_info = &hw->phy.link_info; 646 struct i40e_link_status *hw_link_info = &hw->phy.link_info;
647 struct i40e_dcbx_config *dcbx_cfg = &hw->local_dcbx_config;
647 648
648 pause->autoneg = 649 pause->autoneg =
649 ((hw_link_info->an_info & I40E_AQ_AN_COMPLETED) ? 650 ((hw_link_info->an_info & I40E_AQ_AN_COMPLETED) ?
650 AUTONEG_ENABLE : AUTONEG_DISABLE); 651 AUTONEG_ENABLE : AUTONEG_DISABLE);
651 652
653 /* PFC enabled so report LFC as off */
654 if (dcbx_cfg->pfc.pfcenable) {
655 pause->rx_pause = 0;
656 pause->tx_pause = 0;
657 return;
658 }
659
652 if (hw->fc.current_mode == I40E_FC_RX_PAUSE) { 660 if (hw->fc.current_mode == I40E_FC_RX_PAUSE) {
653 pause->rx_pause = 1; 661 pause->rx_pause = 1;
654 } else if (hw->fc.current_mode == I40E_FC_TX_PAUSE) { 662 } else if (hw->fc.current_mode == I40E_FC_TX_PAUSE) {
@@ -672,6 +680,7 @@ static int i40e_set_pauseparam(struct net_device *netdev,
672 struct i40e_vsi *vsi = np->vsi; 680 struct i40e_vsi *vsi = np->vsi;
673 struct i40e_hw *hw = &pf->hw; 681 struct i40e_hw *hw = &pf->hw;
674 struct i40e_link_status *hw_link_info = &hw->phy.link_info; 682 struct i40e_link_status *hw_link_info = &hw->phy.link_info;
683 struct i40e_dcbx_config *dcbx_cfg = &hw->local_dcbx_config;
675 bool link_up = hw_link_info->link_info & I40E_AQ_LINK_UP; 684 bool link_up = hw_link_info->link_info & I40E_AQ_LINK_UP;
676 i40e_status status; 685 i40e_status status;
677 u8 aq_failures; 686 u8 aq_failures;
@@ -693,8 +702,9 @@ static int i40e_set_pauseparam(struct net_device *netdev,
693 netdev_info(netdev, "Autoneg did not complete so changing settings may not result in an actual change.\n"); 702 netdev_info(netdev, "Autoneg did not complete so changing settings may not result in an actual change.\n");
694 } 703 }
695 704
696 if (hw->fc.current_mode == I40E_FC_PFC) { 705 if (dcbx_cfg->pfc.pfcenable) {
697 netdev_info(netdev, "Priority flow control enabled. Cannot set link flow control.\n"); 706 netdev_info(netdev,
707 "Priority flow control enabled. Cannot set link flow control.\n");
698 return -EOPNOTSUPP; 708 return -EOPNOTSUPP;
699 } 709 }
700 710