netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net 0/4][pull request] Intel Wired LAN Driver Updates
@ 2012-03-28  6:52 Jeff Kirsher
  2012-03-28  7:04 ` David Miller
  0 siblings, 1 reply; 10+ messages in thread
From: Jeff Kirsher @ 2012-03-28  6:52 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series of patches contains fixes for e1000, igb, igbvf, ixgb,
ixgbe and ixgbevf.

The following are changes since commit cc3425cdc04206f3c8b9efb2c693e89aa3cd9ec7:
  Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net master

Don Skidmore (2):
  ixgbe: fix typo in enumeration name
  ixgbe: update version number

Jiri Pirko (1):
  e1000: fix vlan processing regression

stephen hemminger (1):
  intel: make wired ethernet driver message level consistent (rev2)

 drivers/net/ethernet/intel/e1000/e1000_main.c     |   40 +++++++++++++--------
 drivers/net/ethernet/intel/e1000e/netdev.c        |    7 +++-
 drivers/net/ethernet/intel/igb/igb_main.c         |    7 +++-
 drivers/net/ethernet/intel/igbvf/netdev.c         |    7 +++-
 drivers/net/ethernet/intel/ixgb/ixgb_main.c       |    6 ++--
 drivers/net/ethernet/intel/ixgbe/ixgbe.h          |    2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c     |   13 ++++---
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |    7 +++-
 8 files changed, 60 insertions(+), 29 deletions(-)

-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [net 0/4][pull request] Intel Wired LAN Driver Updates
  2012-03-28  6:52 Jeff Kirsher
@ 2012-03-28  7:04 ` David Miller
  0 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2012-03-28  7:04 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Tue, 27 Mar 2012 23:52:24 -0700

> This series of patches contains fixes for e1000, igb, igbvf, ixgb,
> ixgbe and ixgbevf.
> 
> The following are changes since commit cc3425cdc04206f3c8b9efb2c693e89aa3cd9ec7:
>   Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [net 0/4][pull request] Intel Wired LAN Driver Updates
@ 2013-03-05  9:48 Jeff Kirsher
  2013-03-05  9:48 ` [net 1/4] e1000e: workaround DMA unit hang on I218 Jeff Kirsher
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Jeff Kirsher @ 2013-03-05  9:48 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains fixes to e1000e and igb.

The e1000e fix resolves an issue at 1000Mbps link speed, where one of the
MAC's internal clocks can be stopped for up to 4us when entering K1 (a
power mode of the MAC-PHY interconnect).  If the MAC is waiting for
completion indications for 2 DMA write requests into Host memory
(e.g. descriptor writeback or Rx packet writing) and the
indications occur while the clock is stopped, both indications will be
missed by the MAC causing the MAC to wait for the completion indications
and be unable to generate further DMA write requests.  This results in an
apparent hardware hang.  The patch works-around the issue by disabling
the de-assertion of the clock request when 1000Mbps link is acquired (K1
must be disabled while doing this).

The igb fix to drop BUILD_BUG_ON check from igb_build_rx_buffer resolves
a build error on s390 devices.  The igb driver was throwing a build error
due to the fact that a frame built using build_skb would be larger than 2K.
Since this is not likely to change at any point in the future we are better
off just dropping the check since we already had a check in
igb_set_rx_buffer_len that will just disable the usage of build_skb anyway.

The igb fix for i210 link setup changes the setup copper link function
to use a switch statement, so that the appropriate setup link function
is called for the given PHY types.

Lastly, the igb fix for a lockdep issue in igb_get_i2c_client resolves
the issue by re-factoring the initialization and usage of the i2c_client.

The following are changes since commit aab2b4bf224ef8358d262f95b568b8ad0cecf0a0:
  tcp: fix double-counted receiver RTT when leaving receiver fast path
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net master

Alexander Duyck (1):
  igb: Drop BUILD_BUG_ON check from igb_build_rx_buffer

Bruce Allan (1):
  e1000e: workaround DMA unit hang on I218

Carolyn Wyborny (2):
  igb: Fix link setup for I210 devices
  igb: Fix for lockdep issue in igb_get_i2c_client

 drivers/net/ethernet/intel/e1000e/ich8lan.c  | 71 +++++++++++++++++++++++++-
 drivers/net/ethernet/intel/e1000e/ich8lan.h  |  2 +
 drivers/net/ethernet/intel/e1000e/regs.h     |  1 +
 drivers/net/ethernet/intel/igb/e1000_82575.c | 11 ++--
 drivers/net/ethernet/intel/igb/igb.h         |  2 +-
 drivers/net/ethernet/intel/igb/igb_hwmon.c   | 14 +++++
 drivers/net/ethernet/intel/igb/igb_main.c    | 76 +---------------------------
 7 files changed, 98 insertions(+), 79 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [net 1/4] e1000e: workaround DMA unit hang on I218
  2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
@ 2013-03-05  9:48 ` Jeff Kirsher
  2013-03-05  9:48 ` [net 2/4] igb: Drop BUILD_BUG_ON check from igb_build_rx_buffer Jeff Kirsher
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Jeff Kirsher @ 2013-03-05  9:48 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

At 1000Mbps link speed, one of the MAC's internal clocks can be stopped for
up to 4us when entering K1 (a power mode of the MAC-PHY interconnect).  If
the MAC is waiting for completion indications for 2 DMA write requests into
Host memory (e.g. descriptor writeback or Rx packet writing) and the
indications occur while the clock is stopped, both indications will be
missed by the MAC causing the MAC to wait for the completion indications
and be unable to generate further DMA write requests.  This results in an
apparent hardware hang.

Work-around the issue by disabling the de-assertion of the clock request
when 1000Mbps link is acquired (K1 must be disabled while doing this).

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ich8lan.c | 71 ++++++++++++++++++++++++++++-
 drivers/net/ethernet/intel/e1000e/ich8lan.h |  2 +
 drivers/net/ethernet/intel/e1000e/regs.h    |  1 +
 3 files changed, 73 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index dff7bff..121a865 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -782,6 +782,59 @@ release:
 }
 
 /**
+ *  e1000_k1_workaround_lpt_lp - K1 workaround on Lynxpoint-LP
+ *  @hw:   pointer to the HW structure
+ *  @link: link up bool flag
+ *
+ *  When K1 is enabled for 1Gbps, the MAC can miss 2 DMA completion indications
+ *  preventing further DMA write requests.  Workaround the issue by disabling
+ *  the de-assertion of the clock request when in 1Gpbs mode.
+ **/
+static s32 e1000_k1_workaround_lpt_lp(struct e1000_hw *hw, bool link)
+{
+	u32 fextnvm6 = er32(FEXTNVM6);
+	s32 ret_val = 0;
+
+	if (link && (er32(STATUS) & E1000_STATUS_SPEED_1000)) {
+		u16 kmrn_reg;
+
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			return ret_val;
+
+		ret_val =
+		    e1000e_read_kmrn_reg_locked(hw, E1000_KMRNCTRLSTA_K1_CONFIG,
+						&kmrn_reg);
+		if (ret_val)
+			goto release;
+
+		ret_val =
+		    e1000e_write_kmrn_reg_locked(hw,
+						 E1000_KMRNCTRLSTA_K1_CONFIG,
+						 kmrn_reg &
+						 ~E1000_KMRNCTRLSTA_K1_ENABLE);
+		if (ret_val)
+			goto release;
+
+		usleep_range(10, 20);
+
+		ew32(FEXTNVM6, fextnvm6 | E1000_FEXTNVM6_REQ_PLL_CLK);
+
+		ret_val =
+		    e1000e_write_kmrn_reg_locked(hw,
+						 E1000_KMRNCTRLSTA_K1_CONFIG,
+						 kmrn_reg);
+release:
+		hw->phy.ops.release(hw);
+	} else {
+		/* clear FEXTNVM6 bit 8 on link down or 10/100 */
+		ew32(FEXTNVM6, fextnvm6 & ~E1000_FEXTNVM6_REQ_PLL_CLK);
+	}
+
+	return ret_val;
+}
+
+/**
  *  e1000_check_for_copper_link_ich8lan - Check for link (Copper)
  *  @hw: pointer to the HW structure
  *
@@ -818,6 +871,14 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 			return ret_val;
 	}
 
+	/* Work-around I218 hang issue */
+	if ((hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPTLP_I218_LM) ||
+	    (hw->adapter->pdev->device == E1000_DEV_ID_PCH_LPTLP_I218_V)) {
+		ret_val = e1000_k1_workaround_lpt_lp(hw, link);
+		if (ret_val)
+			return ret_val;
+	}
+
 	/* Clear link partner's EEE ability */
 	hw->dev_spec.ich8lan.eee_lp_ability = 0;
 
@@ -3954,8 +4015,16 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw)
 
 	phy_ctrl = er32(PHY_CTRL);
 	phy_ctrl |= E1000_PHY_CTRL_GBE_DISABLE;
+
 	if (hw->phy.type == e1000_phy_i217) {
-		u16 phy_reg;
+		u16 phy_reg, device_id = hw->adapter->pdev->device;
+
+		if ((device_id == E1000_DEV_ID_PCH_LPTLP_I218_LM) ||
+		    (device_id == E1000_DEV_ID_PCH_LPTLP_I218_V)) {
+			u32 fextnvm6 = er32(FEXTNVM6);
+
+			ew32(FEXTNVM6, fextnvm6 & ~E1000_FEXTNVM6_REQ_PLL_CLK);
+		}
 
 		ret_val = hw->phy.ops.acquire(hw);
 		if (ret_val)
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h
index b6d3174..8bf4655 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.h
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h
@@ -92,6 +92,8 @@
 #define E1000_FEXTNVM4_BEACON_DURATION_8USEC	0x7
 #define E1000_FEXTNVM4_BEACON_DURATION_16USEC	0x3
 
+#define E1000_FEXTNVM6_REQ_PLL_CLK	0x00000100
+
 #define PCIE_ICH8_SNOOP_ALL	PCIE_NO_SNOOP_ALL
 
 #define E1000_ICH_RAR_ENTRIES	7
diff --git a/drivers/net/ethernet/intel/e1000e/regs.h b/drivers/net/ethernet/intel/e1000e/regs.h
index 794fe14..a7e6a3e 100644
--- a/drivers/net/ethernet/intel/e1000e/regs.h
+++ b/drivers/net/ethernet/intel/e1000e/regs.h
@@ -42,6 +42,7 @@
 #define E1000_FEXTNVM	0x00028	/* Future Extended NVM - RW */
 #define E1000_FEXTNVM3	0x0003C	/* Future Extended NVM 3 - RW */
 #define E1000_FEXTNVM4	0x00024	/* Future Extended NVM 4 - RW */
+#define E1000_FEXTNVM6	0x00010	/* Future Extended NVM 6 - RW */
 #define E1000_FEXTNVM7	0x000E4	/* Future Extended NVM 7 - RW */
 #define E1000_FCT	0x00030	/* Flow Control Type - RW */
 #define E1000_VET	0x00038	/* VLAN Ether Type - RW */
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [net 2/4] igb: Drop BUILD_BUG_ON check from igb_build_rx_buffer
  2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
  2013-03-05  9:48 ` [net 1/4] e1000e: workaround DMA unit hang on I218 Jeff Kirsher
@ 2013-03-05  9:48 ` Jeff Kirsher
  2013-03-05  9:48 ` [net 3/4] igb: Fix link setup for I210 devices Jeff Kirsher
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Jeff Kirsher @ 2013-03-05  9:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Jeff Kirsher

From: Alexander Duyck <alexander.h.duyck@intel.com>

On s390 the igb driver was throwing a build error due to the fact that a frame
built using build_skb would be larger than 2K.  Since this is not likely to
change at any point in the future we are better off just dropping the check
since we already had a check in igb_set_rx_buffer_len that will just disable
the usage of build_skb anyway.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index ed79a1c..4d53a17 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -6227,13 +6227,6 @@ static struct sk_buff *igb_build_rx_buffer(struct igb_ring *rx_ring,
 	/* If we spanned a buffer we have a huge mess so test for it */
 	BUG_ON(unlikely(!igb_test_staterr(rx_desc, E1000_RXD_STAT_EOP)));
 
-	/* Guarantee this function can be used by verifying buffer sizes */
-	BUILD_BUG_ON(SKB_WITH_OVERHEAD(IGB_RX_BUFSZ) < (NET_SKB_PAD +
-							NET_IP_ALIGN +
-							IGB_TS_HDR_LEN +
-							ETH_FRAME_LEN +
-							ETH_FCS_LEN));
-
 	rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean];
 	page = rx_buffer->page;
 	prefetchw(page);
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [net 3/4] igb: Fix link setup for I210 devices
  2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
  2013-03-05  9:48 ` [net 1/4] e1000e: workaround DMA unit hang on I218 Jeff Kirsher
  2013-03-05  9:48 ` [net 2/4] igb: Drop BUILD_BUG_ON check from igb_build_rx_buffer Jeff Kirsher
@ 2013-03-05  9:48 ` Jeff Kirsher
  2013-03-05  9:48 ` [net 4/4] igb: Fix for lockdep issue in igb_get_i2c_client Jeff Kirsher
  2013-03-06  4:42 ` [net 0/4][pull request] Intel Wired LAN Driver Updates David Miller
  4 siblings, 0 replies; 10+ messages in thread
From: Jeff Kirsher @ 2013-03-05  9:48 UTC (permalink / raw)
  To: davem; +Cc: Carolyn Wyborny, netdev, gospo, sassmann, Jeff Kirsher

From: Carolyn Wyborny <carolyn.wyborny@intel.com>

This patch changes the setup copper link function to use a switch
statement for the PHY id's available for the given PHY types.  It
also adds a case for the I210 PHY id, so the appropriate setup link
function is called for it.

Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/igb/e1000_82575.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
index 84e7e09..b64542a 100644
--- a/drivers/net/ethernet/intel/igb/e1000_82575.c
+++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
@@ -1361,11 +1361,16 @@ static s32 igb_setup_copper_link_82575(struct e1000_hw *hw)
 	switch (hw->phy.type) {
 	case e1000_phy_i210:
 	case e1000_phy_m88:
-		if (hw->phy.id == I347AT4_E_PHY_ID ||
-		    hw->phy.id == M88E1112_E_PHY_ID)
+		switch (hw->phy.id) {
+		case I347AT4_E_PHY_ID:
+		case M88E1112_E_PHY_ID:
+		case I210_I_PHY_ID:
 			ret_val = igb_copper_link_setup_m88_gen2(hw);
-		else
+			break;
+		default:
 			ret_val = igb_copper_link_setup_m88(hw);
+			break;
+		}
 		break;
 	case e1000_phy_igp_3:
 		ret_val = igb_copper_link_setup_igp(hw);
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [net 4/4] igb: Fix for lockdep issue in igb_get_i2c_client
  2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (2 preceding siblings ...)
  2013-03-05  9:48 ` [net 3/4] igb: Fix link setup for I210 devices Jeff Kirsher
@ 2013-03-05  9:48 ` Jeff Kirsher
  2013-03-06  4:42 ` [net 0/4][pull request] Intel Wired LAN Driver Updates David Miller
  4 siblings, 0 replies; 10+ messages in thread
From: Jeff Kirsher @ 2013-03-05  9:48 UTC (permalink / raw)
  To: davem; +Cc: Carolyn Wyborny, netdev, gospo, sassmann, Jeff Kirsher

From: Carolyn Wyborny <carolyn.wyborny@intel.com>

This patch fixes a lockdep warning in igb_get_i2c_client by
refactoring the initialization and usage of the i2c_client
completely.  There is no on the fly allocation of the single
client needed today.

Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/igb/igb.h       |  2 +-
 drivers/net/ethernet/intel/igb/igb_hwmon.c | 14 ++++++
 drivers/net/ethernet/intel/igb/igb_main.c  | 69 +-----------------------------
 3 files changed, 17 insertions(+), 68 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index d27edbc..2515140 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -447,7 +447,7 @@ struct igb_adapter {
 #endif
 	struct i2c_algo_bit_data i2c_algo;
 	struct i2c_adapter i2c_adap;
-	struct igb_i2c_client_list *i2c_clients;
+	struct i2c_client *i2c_client;
 };
 
 #define IGB_FLAG_HAS_MSI		(1 << 0)
diff --git a/drivers/net/ethernet/intel/igb/igb_hwmon.c b/drivers/net/ethernet/intel/igb/igb_hwmon.c
index 0a9b073..4623502 100644
--- a/drivers/net/ethernet/intel/igb/igb_hwmon.c
+++ b/drivers/net/ethernet/intel/igb/igb_hwmon.c
@@ -39,6 +39,10 @@
 #include <linux/pci.h>
 
 #ifdef CONFIG_IGB_HWMON
+struct i2c_board_info i350_sensor_info = {
+	I2C_BOARD_INFO("i350bb", (0Xf8 >> 1)),
+};
+
 /* hwmon callback functions */
 static ssize_t igb_hwmon_show_location(struct device *dev,
 					 struct device_attribute *attr,
@@ -188,6 +192,7 @@ int igb_sysfs_init(struct igb_adapter *adapter)
 	unsigned int i;
 	int n_attrs;
 	int rc = 0;
+	struct i2c_client *client = NULL;
 
 	/* If this method isn't defined we don't support thermals */
 	if (adapter->hw.mac.ops.init_thermal_sensor_thresh == NULL)
@@ -198,6 +203,15 @@ int igb_sysfs_init(struct igb_adapter *adapter)
 		if (rc)
 			goto exit;
 
+	/* init i2c_client */
+	client = i2c_new_device(&adapter->i2c_adap, &i350_sensor_info);
+	if (client == NULL) {
+		dev_info(&adapter->pdev->dev,
+			"Failed to create new i2c device..\n");
+		goto exit;
+	}
+	adapter->i2c_client = client;
+
 	/* Allocation space for max attributes
 	 * max num sensors * values (loc, temp, max, caution)
 	 */
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 4d53a17..4dbd629 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -1923,10 +1923,6 @@ void igb_set_fw_version(struct igb_adapter *adapter)
 	return;
 }
 
-static const struct i2c_board_info i350_sensor_info = {
-	I2C_BOARD_INFO("i350bb", 0Xf8),
-};
-
 /*  igb_init_i2c - Init I2C interface
  *  @adapter: pointer to adapter structure
  *
@@ -7717,67 +7713,6 @@ static void igb_init_dmac(struct igb_adapter *adapter, u32 pba)
 	}
 }
 
-static DEFINE_SPINLOCK(i2c_clients_lock);
-
-/*  igb_get_i2c_client - returns matching client
- *  in adapters's client list.
- *  @adapter: adapter struct
- *  @dev_addr: device address of i2c needed.
- */
-static struct i2c_client *
-igb_get_i2c_client(struct igb_adapter *adapter, u8 dev_addr)
-{
-	ulong flags;
-	struct igb_i2c_client_list *client_list;
-	struct i2c_client *client = NULL;
-	struct i2c_board_info client_info = {
-		I2C_BOARD_INFO("igb", 0x00),
-	};
-
-	spin_lock_irqsave(&i2c_clients_lock, flags);
-	client_list = adapter->i2c_clients;
-
-	/* See if we already have an i2c_client */
-	while (client_list) {
-		if (client_list->client->addr == (dev_addr >> 1)) {
-			client = client_list->client;
-			goto exit;
-		} else {
-			client_list = client_list->next;
-		}
-	}
-
-	/* no client_list found, create a new one */
-	client_list = kzalloc(sizeof(*client_list), GFP_ATOMIC);
-	if (client_list == NULL)
-		goto exit;
-
-	/* dev_addr passed to us is left-shifted by 1 bit
-	 * i2c_new_device call expects it to be flush to the right.
-	 */
-	client_info.addr = dev_addr >> 1;
-	client_info.platform_data = adapter;
-	client_list->client = i2c_new_device(&adapter->i2c_adap, &client_info);
-	if (client_list->client == NULL) {
-		dev_info(&adapter->pdev->dev,
-			"Failed to create new i2c device..\n");
-		goto err_no_client;
-	}
-
-	/* insert new client at head of list */
-	client_list->next = adapter->i2c_clients;
-	adapter->i2c_clients = client_list;
-
-	client = client_list->client;
-	goto exit;
-
-err_no_client:
-	kfree(client_list);
-exit:
-	spin_unlock_irqrestore(&i2c_clients_lock, flags);
-	return client;
-}
-
 /*  igb_read_i2c_byte - Reads 8 bit word over I2C
  *  @hw: pointer to hardware structure
  *  @byte_offset: byte offset to read
@@ -7791,7 +7726,7 @@ s32 igb_read_i2c_byte(struct e1000_hw *hw, u8 byte_offset,
 				u8 dev_addr, u8 *data)
 {
 	struct igb_adapter *adapter = container_of(hw, struct igb_adapter, hw);
-	struct i2c_client *this_client = igb_get_i2c_client(adapter, dev_addr);
+	struct i2c_client *this_client = adapter->i2c_client;
 	s32 status;
 	u16 swfw_mask = 0;
 
@@ -7828,7 +7763,7 @@ s32 igb_write_i2c_byte(struct e1000_hw *hw, u8 byte_offset,
 				 u8 dev_addr, u8 data)
 {
 	struct igb_adapter *adapter = container_of(hw, struct igb_adapter, hw);
-	struct i2c_client *this_client = igb_get_i2c_client(adapter, dev_addr);
+	struct i2c_client *this_client = adapter->i2c_client;
 	s32 status;
 	u16 swfw_mask = E1000_SWFW_PHY0_SM;
 
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [net 0/4][pull request] Intel Wired LAN Driver Updates
  2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (3 preceding siblings ...)
  2013-03-05  9:48 ` [net 4/4] igb: Fix for lockdep issue in igb_get_i2c_client Jeff Kirsher
@ 2013-03-06  4:42 ` David Miller
  4 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2013-03-06  4:42 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Tue,  5 Mar 2013 01:48:33 -0800

> This series contains fixes to e1000e and igb.
> 
> The e1000e fix resolves an issue at 1000Mbps link speed, where one of the
> MAC's internal clocks can be stopped for up to 4us when entering K1 (a
> power mode of the MAC-PHY interconnect).  If the MAC is waiting for
> completion indications for 2 DMA write requests into Host memory
> (e.g. descriptor writeback or Rx packet writing) and the
> indications occur while the clock is stopped, both indications will be
> missed by the MAC causing the MAC to wait for the completion indications
> and be unable to generate further DMA write requests.  This results in an
> apparent hardware hang.  The patch works-around the issue by disabling
> the de-assertion of the clock request when 1000Mbps link is acquired (K1
> must be disabled while doing this).
> 
> The igb fix to drop BUILD_BUG_ON check from igb_build_rx_buffer resolves
> a build error on s390 devices.  The igb driver was throwing a build error
> due to the fact that a frame built using build_skb would be larger than 2K.
> Since this is not likely to change at any point in the future we are better
> off just dropping the check since we already had a check in
> igb_set_rx_buffer_len that will just disable the usage of build_skb anyway.
> 
> The igb fix for i210 link setup changes the setup copper link function
> to use a switch statement, so that the appropriate setup link function
> is called for the given PHY types.
> 
> Lastly, the igb fix for a lockdep issue in igb_get_i2c_client resolves
> the issue by re-factoring the initialization and usage of the i2c_client.

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [net 0/4][pull request] Intel Wired LAN Driver Updates
@ 2014-05-05 20:07 Jeff Kirsher
  2014-05-05 20:31 ` David Miller
  0 siblings, 1 reply; 10+ messages in thread
From: Jeff Kirsher @ 2014-05-05 20:07 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to e1000e only.

David provides four fixes for e1000e, first is a workaround for a hardware
erratum on 82579 devices which experienced packet loss in gigabit and 100
speeds when interconnect between the PHY and MAC is exiting K1 power saving
state.  Second expands the scope of a workaround to include i217 and i218
parts as well to address over aggressive transmit behavior when connecting
at 10Mbs half-duplex.  Next is to resolve a reported link flap issue on
82579 parts which was root caused as an interoperability problem between
82579 and at least some Broadcom PHYs in the Energy Efficient Ethernet wake
mechanism.  Lastly, restricts the workaround of putting the PHY into MDIO
slow mode to access the PHY id to relevant parts since this issue has been
fixed on the newer hardware.

The following are changes since commit 9d4619c492c84e4c1e6d7127f1cbf55da04599d0:
  Altera TSE: ALTERA_TSE should depend on HAS_DMA
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net master

David Ertman (4):
  e1000e: Workaround for dropped packets in Gig/100 speeds on 82579
  e1000e: Expand workaround for 10Mb HD throughput bug
  e1000e: Fix issue with link flap on 82579
  e1000e: Restrict MDIO Slow Mode workaround to relevant parts

 drivers/net/ethernet/intel/e1000e/ich8lan.c | 71 +++++++++++++++++------------
 drivers/net/ethernet/intel/e1000e/ich8lan.h |  3 ++
 drivers/net/ethernet/intel/e1000e/phy.h     |  1 +
 3 files changed, 46 insertions(+), 29 deletions(-)

-- 
1.9.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [net 0/4][pull request] Intel Wired LAN Driver Updates
  2014-05-05 20:07 Jeff Kirsher
@ 2014-05-05 20:31 ` David Miller
  0 siblings, 0 replies; 10+ messages in thread
From: David Miller @ 2014-05-05 20:31 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Mon,  5 May 2014 13:07:36 -0700

> This series contains updates to e1000e only.
> 
> David provides four fixes for e1000e, first is a workaround for a hardware
> erratum on 82579 devices which experienced packet loss in gigabit and 100
> speeds when interconnect between the PHY and MAC is exiting K1 power saving
> state.  Second expands the scope of a workaround to include i217 and i218
> parts as well to address over aggressive transmit behavior when connecting
> at 10Mbs half-duplex.  Next is to resolve a reported link flap issue on
> 82579 parts which was root caused as an interoperability problem between
> 82579 and at least some Broadcom PHYs in the Energy Efficient Ethernet wake
> mechanism.  Lastly, restricts the workaround of putting the PHY into MDIO
> slow mode to access the PHY id to relevant parts since this issue has been
> fixed on the newer hardware.
> 
> The following are changes since commit 9d4619c492c84e4c1e6d7127f1cbf55da04599d0:
>   Altera TSE: ALTERA_TSE should depend on HAS_DMA
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-05-05 20:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-05  9:48 [net 0/4][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2013-03-05  9:48 ` [net 1/4] e1000e: workaround DMA unit hang on I218 Jeff Kirsher
2013-03-05  9:48 ` [net 2/4] igb: Drop BUILD_BUG_ON check from igb_build_rx_buffer Jeff Kirsher
2013-03-05  9:48 ` [net 3/4] igb: Fix link setup for I210 devices Jeff Kirsher
2013-03-05  9:48 ` [net 4/4] igb: Fix for lockdep issue in igb_get_i2c_client Jeff Kirsher
2013-03-06  4:42 ` [net 0/4][pull request] Intel Wired LAN Driver Updates David Miller
  -- strict thread matches above, loose matches on Subject: below --
2014-05-05 20:07 Jeff Kirsher
2014-05-05 20:31 ` David Miller
2012-03-28  6:52 Jeff Kirsher
2012-03-28  7:04 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).