Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e109a691 authored by David S. Miller's avatar David S. Miller
Browse files


Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates 2015-10-15

This series contains updates to i40e, i40evf and ixgbe.

Emil changes the ixgbe driver to disable LRO by default in favor or GRO.

Mark provides two changes for ixgbe, first fixes a semaphore issue when
a reset never completes, it is necessary to retake the semaphore before
returning.

Jesse fixes up a missing function header comment variable reference.  Then
enables ethtool priv flags to control flow director at runtime.

Neerav changes several i40e error messages to debug only since the
messages were printing when there was no functional issue and were meant
for debug only.

Catherine changes the i40e driver to make only X722 support 100M SGMII,
since it is the only device to actually support it.

Anjali modifies the i40e/i40evf driver to add writeback on ITR offload
support for X722 since the device has a way to work around the
descriptor writeback issue.

Mitch cleans up obsolete code.  Also reduces the i40evf init time by
shortening up the delays in the init task to aid in performance in
load/unload tests and mitigates DMAR errors in VF enable/disable tests.

Shannon modifies i40e to allow flow director sideband when the device
is in MFP mode and only has one partition enabled, since we still have
plenty of interrupts for managing the flow director activity.  Also
cleaned up flow director ATR control in debugfs since the priv flag
has been added to our ethtool interface.  Makes several general code
cleanups of redundant or unnecessary code for i40e.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f6bba894 a85ce532
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@
/* Ethtool Private Flags */
#define I40E_PRIV_FLAGS_NPAR_FLAG	BIT(0)
#define I40E_PRIV_FLAGS_LINKPOLL_FLAG	BIT(1)
#define I40E_PRIV_FLAGS_FD_ATR		BIT(2)

#define I40E_NVM_VERSION_LO_SHIFT  0
#define I40E_NVM_VERSION_LO_MASK   (0xff << I40E_NVM_VERSION_LO_SHIFT)
@@ -332,6 +333,7 @@ struct i40e_pf {
#define I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE	BIT_ULL(38)
#define I40E_FLAG_LINK_POLLING_ENABLED		BIT_ULL(39)
#define I40E_FLAG_VEB_MODE_ENABLED		BIT_ULL(40)
#define I40E_FLAG_NO_PCI_LINK_CHECK		BIT_ULL(42)

	/* tracks features that get auto disabled by errors */
	u64 auto_disable_flags;
+3 −0
Original line number Diff line number Diff line
@@ -1617,6 +1617,9 @@ i40e_status i40e_aq_get_phy_capabilities(struct i40e_hw *hw,
	if (hw->aq.asq_last_status == I40E_AQ_RC_EIO)
		status = I40E_ERR_UNKNOWN_PHY;

	if (report_init)
		hw->phy.phy_types = le32_to_cpu(abilities->phy_type);

	return status;
}

+3 −4
Original line number Diff line number Diff line
@@ -240,8 +240,7 @@ static void i40e_dcbnl_del_app(struct i40e_pf *pf,
	for (v = 0; v < pf->num_alloc_vsi; v++) {
		if (pf->vsi[v] && pf->vsi[v]->netdev) {
			err = i40e_dcbnl_vsi_del_app(pf->vsi[v], app);
			if (err)
				dev_info(&pf->pdev->dev, "Failed deleting app for VSI seid=%d err=%d sel=%d proto=0x%x prio=%d\n",
			dev_dbg(&pf->pdev->dev, "Deleting app for VSI seid=%d err=%d sel=%d proto=0x%x prio=%d\n",
				pf->vsi[v]->seid, err, app->selector,
				app->protocolid, app->priority);
		}
+0 −24
Original line number Diff line number Diff line
@@ -953,24 +953,6 @@ static void i40e_dbg_dump_veb_all(struct i40e_pf *pf)
	}
}

/**
 * i40e_dbg_cmd_fd_ctrl - Enable/disable FD sideband/ATR
 * @pf: the PF that would be altered
 * @flag: flag that needs enabling or disabling
 * @enable: Enable/disable FD SD/ATR
 **/
static void i40e_dbg_cmd_fd_ctrl(struct i40e_pf *pf, u64 flag, bool enable)
{
	if (enable) {
		pf->flags |= flag;
	} else {
		pf->flags &= ~flag;
		pf->auto_disable_flags |= flag;
	}
	dev_info(&pf->pdev->dev, "requesting a PF reset\n");
	i40e_do_reset_safe(pf, BIT(__I40E_PF_RESET_REQUESTED));
}

#define I40E_MAX_DEBUG_OUT_BUFFER (4096*4)
/**
 * i40e_dbg_command_write - write into command datum
@@ -1759,10 +1741,6 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
		raw_packet = NULL;
		kfree(asc_packet);
		asc_packet = NULL;
	} else if (strncmp(cmd_buf, "fd-atr off", 10) == 0) {
		i40e_dbg_cmd_fd_ctrl(pf, I40E_FLAG_FD_ATR_ENABLED, false);
	} else if (strncmp(cmd_buf, "fd-atr on", 9) == 0) {
		i40e_dbg_cmd_fd_ctrl(pf, I40E_FLAG_FD_ATR_ENABLED, true);
	} else if (strncmp(cmd_buf, "fd current cnt", 14) == 0) {
		dev_info(&pf->pdev->dev, "FD current total filter count for this interface: %d\n",
			 i40e_get_current_fd_count(pf));
@@ -1989,8 +1967,6 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
		dev_info(&pf->pdev->dev, "  send indirect aq_cmd <flags> <opcode> <datalen> <retval> <cookie_h> <cookie_l> <param0> <param1> <param2> <param3> <buffer_len>\n");
		dev_info(&pf->pdev->dev, "  add fd_filter <dest q_index> <flex_off> <pctype> <dest_vsi> <dest_ctl> <fd_status> <cnt_index> <fd_id> <packet_len> <packet>\n");
		dev_info(&pf->pdev->dev, "  rem fd_filter <dest q_index> <flex_off> <pctype> <dest_vsi> <dest_ctl> <fd_status> <cnt_index> <fd_id> <packet_len> <packet>\n");
		dev_info(&pf->pdev->dev, "  fd-atr off\n");
		dev_info(&pf->pdev->dev, "  fd-atr on\n");
		dev_info(&pf->pdev->dev, "  fd current cnt");
		dev_info(&pf->pdev->dev, "  lldp start\n");
		dev_info(&pf->pdev->dev, "  lldp stop\n");
+40 −19
Original line number Diff line number Diff line
@@ -90,9 +90,6 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = {
	I40E_VSI_STAT("tx_linearize", tx_linearize),
};

static int i40e_add_fdir_ethtool(struct i40e_vsi *vsi,
				 struct ethtool_rxnfc *cmd);

/* These PF_STATs might look like duplicates of some NETDEV_STATs,
 * but they are separate.  This device supports Virtualization, and
 * as such might have several netdevs supporting VMDq and FCoE going
@@ -231,6 +228,7 @@ static const char i40e_gstrings_test[][ETH_GSTRING_LEN] = {
static const char i40e_priv_flags_strings[][ETH_GSTRING_LEN] = {
	"NPAR",
	"LinkPolling",
	"flow-director-atr",
};

#define I40E_PRIV_FLAGS_STR_LEN ARRAY_SIZE(i40e_priv_flags_strings)
@@ -254,7 +252,8 @@ static void i40e_partition_setting_complaint(struct i40e_pf *pf)
 **/
static void i40e_get_settings_link_up(struct i40e_hw *hw,
				      struct ethtool_cmd *ecmd,
				      struct net_device *netdev)
				      struct net_device *netdev,
				      struct i40e_pf *pf)
{
	struct i40e_link_status *hw_link_info = &hw->phy.link_info;
	u32 link_speed = hw_link_info->link_speed;
@@ -298,16 +297,18 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
		break;
	case I40E_PHY_TYPE_10GBASE_T:
	case I40E_PHY_TYPE_1000BASE_T:
	case I40E_PHY_TYPE_100BASE_TX:
		ecmd->supported = SUPPORTED_Autoneg |
				  SUPPORTED_10000baseT_Full |
				  SUPPORTED_1000baseT_Full |
				  SUPPORTED_100baseT_Full;
				  SUPPORTED_1000baseT_Full;
		ecmd->advertising = ADVERTISED_Autoneg;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
			ecmd->advertising |= ADVERTISED_10000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
			ecmd->advertising |= ADVERTISED_1000baseT_Full;
		break;
	case I40E_PHY_TYPE_100BASE_TX:
		ecmd->supported = SUPPORTED_Autoneg |
				  SUPPORTED_100baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB)
			ecmd->advertising |= ADVERTISED_100baseT_Full;
		break;
@@ -327,12 +328,15 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
		break;
	case I40E_PHY_TYPE_SGMII:
		ecmd->supported = SUPPORTED_Autoneg |
				  SUPPORTED_1000baseT_Full |
				  SUPPORTED_100baseT_Full;
				  SUPPORTED_1000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
			ecmd->advertising |= ADVERTISED_1000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB)
		if (pf->hw.mac.type == I40E_MAC_X722) {
			ecmd->supported |= SUPPORTED_100baseT_Full;
			if (hw_link_info->requested_speeds &
			    I40E_LINK_SPEED_100MB)
				ecmd->advertising |= ADVERTISED_100baseT_Full;
		}
		break;
	/* Backplane is set based on supported phy types in get_settings
	 * so don't set anything here but don't warn either
@@ -380,7 +384,8 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
 * Reports link settings that can be determined when link is down
 **/
static void i40e_get_settings_link_down(struct i40e_hw *hw,
					struct ethtool_cmd *ecmd)
					struct ethtool_cmd *ecmd,
					struct i40e_pf *pf)
{
	enum i40e_aq_capabilities_phy_type phy_types = hw->phy.phy_types;

@@ -391,11 +396,13 @@ static void i40e_get_settings_link_down(struct i40e_hw *hw,
	ecmd->advertising = 0x0;
	if (phy_types & I40E_CAP_PHY_TYPE_SGMII) {
		ecmd->supported |= SUPPORTED_Autoneg |
				   SUPPORTED_1000baseT_Full |
				   SUPPORTED_100baseT_Full;
				   SUPPORTED_1000baseT_Full;
		ecmd->advertising |= ADVERTISED_Autoneg |
				     ADVERTISED_1000baseT_Full |
				     ADVERTISED_100baseT_Full;
				     ADVERTISED_1000baseT_Full;
		if (pf->hw.mac.type == I40E_MAC_X722) {
			ecmd->supported |= SUPPORTED_100baseT_Full;
			ecmd->advertising |= ADVERTISED_100baseT_Full;
		}
	}
	if (phy_types & I40E_CAP_PHY_TYPE_XAUI ||
	    phy_types & I40E_CAP_PHY_TYPE_XFI ||
@@ -424,7 +431,8 @@ static void i40e_get_settings_link_down(struct i40e_hw *hw,
		ecmd->advertising |= ADVERTISED_Autoneg |
				    ADVERTISED_40000baseCR4_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) {
	if ((phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) &&
	    !(phy_types & I40E_CAP_PHY_TYPE_1000BASE_T)) {
		ecmd->supported |= SUPPORTED_Autoneg |
				   SUPPORTED_100baseT_Full;
		ecmd->advertising |= ADVERTISED_Autoneg |
@@ -466,9 +474,9 @@ static int i40e_get_settings(struct net_device *netdev,
	bool link_up = hw_link_info->link_info & I40E_AQ_LINK_UP;

	if (link_up)
		i40e_get_settings_link_up(hw, ecmd, netdev);
		i40e_get_settings_link_up(hw, ecmd, netdev, pf);
	else
		i40e_get_settings_link_down(hw, ecmd);
		i40e_get_settings_link_down(hw, ecmd, pf);

	/* Now set the settings that don't rely on link being up/down */

@@ -2666,6 +2674,8 @@ static u32 i40e_get_priv_flags(struct net_device *dev)
		I40E_PRIV_FLAGS_NPAR_FLAG : 0;
	ret_flags |= pf->flags & I40E_FLAG_LINK_POLLING_ENABLED ?
		I40E_PRIV_FLAGS_LINKPOLL_FLAG : 0;
	ret_flags |= pf->flags & I40E_FLAG_FD_ATR_ENABLED ?
		I40E_PRIV_FLAGS_FD_ATR : 0;

	return ret_flags;
}
@@ -2686,6 +2696,17 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
	else
		pf->flags &= ~I40E_FLAG_LINK_POLLING_ENABLED;

	/* allow the user to control the state of the Flow
	 * Director ATR (Application Targeted Routing) feature
	 * of the driver
	 */
	if (flags & I40E_PRIV_FLAGS_FD_ATR) {
		pf->flags |= I40E_FLAG_FD_ATR_ENABLED;
	} else {
		pf->flags &= ~I40E_FLAG_FD_ATR_ENABLED;
		pf->auto_disable_flags |= I40E_FLAG_FD_ATR_ENABLED;
	}

	return 0;
}

Loading