* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2012-01-27 3:08 Jeff Kirsher 2012-01-27 3:08 ` [net-next 01/11] e1000e: disable Early Receive DMA on ICH LOMs Jeff Kirsher ` (11 more replies) 0 siblings, 12 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann The following series contains updates to e1000e only. This is the second batch of e1000e patches and these changes contain fixups/cleanups/conversions. Most notably is the split up of lib.c into mac.c, manage.c and nvm.c. The following are changes since commit a7563f342db6490e66dbf2c8a50577a72a158c9a: ipv6: Use ipv6_addr_any() and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Bruce Allan (11): e1000e: disable Early Receive DMA on ICH LOMs e1000e: update workaround for 82579 intermittently disabled during S0->Sx e1000e: ICHx/PCHx LOMs should use LPLU setting in NVM when going to Sx e1000e: increase Rx PBA to prevent dropping received packets on 82566/82567 e1000e: conditionally restart autoneg on 82577/8/9 when setting LPLU state e1000e: concatenate long debug strings which span multiple lines e1000e: convert final strncpy() to strlcpy() e1000e: increase version number e1000e: call er16flash() instead of __er16flash() e1000e: split lib.c into three more-appropriate files e1000e: update copyright year drivers/net/ethernet/intel/e1000e/80003es2lan.c | 5 +- drivers/net/ethernet/intel/e1000e/82571.c | 2 +- drivers/net/ethernet/intel/e1000e/Makefile | 5 +- drivers/net/ethernet/intel/e1000e/defines.h | 2 +- drivers/net/ethernet/intel/e1000e/e1000.h | 4 +- drivers/net/ethernet/intel/e1000e/ethtool.c | 2 +- drivers/net/ethernet/intel/e1000e/hw.h | 2 +- drivers/net/ethernet/intel/e1000e/ich8lan.c | 141 ++-- drivers/net/ethernet/intel/e1000e/{lib.c => mac.c} | 1041 +------------------- drivers/net/ethernet/intel/e1000e/manage.c | 377 +++++++ drivers/net/ethernet/intel/e1000e/netdev.c | 72 +- drivers/net/ethernet/intel/e1000e/nvm.c | 647 ++++++++++++ drivers/net/ethernet/intel/e1000e/param.c | 2 +- drivers/net/ethernet/intel/e1000e/phy.c | 5 +- 14 files changed, 1168 insertions(+), 1139 deletions(-) rename drivers/net/ethernet/intel/e1000e/{lib.c => mac.c} (64%) create mode 100644 drivers/net/ethernet/intel/e1000e/manage.c create mode 100644 drivers/net/ethernet/intel/e1000e/nvm.c -- 1.7.7.6 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 01/11] e1000e: disable Early Receive DMA on ICH LOMs 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 02/11] e1000e: update workaround for 82579 intermittently disabled during S0->Sx Jeff Kirsher ` (10 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> Internal stress testing with jumbo frames shows the reliability of ICH9 and ICH10D devices is improved in certain corner cases by disabling the Early Receive feature. To reduce the performance impact caused by disabling this feature, the packet buffer sizes and relevant flow control settings are modified accordingly. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/e1000.h | 2 +- drivers/net/ethernet/intel/e1000e/ich8lan.c | 2 - drivers/net/ethernet/intel/e1000e/netdev.c | 60 +++++++++++---------------- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h index 4b3a276..70bc9e9 100644 --- a/drivers/net/ethernet/intel/e1000e/e1000.h +++ b/drivers/net/ethernet/intel/e1000e/e1000.h @@ -420,7 +420,7 @@ struct e1000_info { #define FLAG_HAS_FLASH (1 << 1) #define FLAG_HAS_HW_VLAN_FILTER (1 << 2) #define FLAG_HAS_WOL (1 << 3) -#define FLAG_HAS_ERT (1 << 4) +/* reserved bit4 */ #define FLAG_HAS_CTRLEXT_ON_LOAD (1 << 5) #define FLAG_HAS_SWSM_ON_LOAD (1 << 6) #define FLAG_HAS_JUMBO_FRAMES (1 << 7) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 1b69c2d..e446e05 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -4110,7 +4110,6 @@ const struct e1000_info e1000_ich9_info = { | FLAG_HAS_WOL | FLAG_HAS_CTRLEXT_ON_LOAD | FLAG_HAS_AMT - | FLAG_HAS_ERT | FLAG_HAS_FLASH | FLAG_APME_IN_WUC, .pba = 10, @@ -4128,7 +4127,6 @@ const struct e1000_info e1000_ich10_info = { | FLAG_HAS_WOL | FLAG_HAS_CTRLEXT_ON_LOAD | FLAG_HAS_AMT - | FLAG_HAS_ERT | FLAG_HAS_FLASH | FLAG_APME_IN_WUC, .pba = 10, diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 89af6c0..49b5ded 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -2947,8 +2947,7 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter) * per packet. */ pages = PAGE_USE_COUNT(adapter->netdev->mtu); - if (!(adapter->flags & FLAG_HAS_ERT) && (pages <= 3) && - (PAGE_SIZE <= 16384) && (rctl & E1000_RCTL_LPE)) + if ((pages <= 3) && (PAGE_SIZE <= 16384) && (rctl & E1000_RCTL_LPE)) adapter->rx_ps_pages = pages; else adapter->rx_ps_pages = 0; @@ -3095,23 +3094,14 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) } ew32(RXCSUM, rxcsum); - /* - * Enable early receives on supported devices, only takes effect when - * packet size is equal or larger than the specified value (in 8 byte - * units), e.g. using jumbo frames when setting to E1000_ERT_2048 - */ - if ((adapter->flags & FLAG_HAS_ERT) || - (adapter->hw.mac.type == e1000_pch2lan)) { + if (adapter->hw.mac.type == e1000_pch2lan) { + /* + * With jumbo frames, excessive C-state transition + * latencies result in dropped transactions. + */ if (adapter->netdev->mtu > ETH_DATA_LEN) { u32 rxdctl = er32(RXDCTL(0)); ew32(RXDCTL(0), rxdctl | 0x3); - if (adapter->flags & FLAG_HAS_ERT) - ew32(ERT, E1000_ERT_2048 | (1 << 13)); - /* - * With jumbo frames and early-receive enabled, - * excessive C-state transition latencies result in - * dropped transactions. - */ pm_qos_update_request(&adapter->netdev->pm_qos_req, 55); } else { pm_qos_update_request(&adapter->netdev->pm_qos_req, @@ -3422,9 +3412,7 @@ void e1000e_reset(struct e1000_adapter *adapter) * if short on Rx space, Rx wins and must trump Tx * adjustment or use Early Receive if available */ - if ((pba < min_rx_space) && - (!(adapter->flags & FLAG_HAS_ERT))) - /* ERT enabled in e1000_configure_rx */ + if (pba < min_rx_space) pba = min_rx_space; } @@ -3438,8 +3426,6 @@ void e1000e_reset(struct e1000_adapter *adapter) * (or the size used for early receive) above it in the Rx FIFO. * Set it to the lower of: * - 90% of the Rx FIFO size, and - * - the full Rx FIFO size minus the early receive size (for parts - * with ERT support assuming ERT set to E1000_ERT_2048), or * - the full Rx FIFO size minus one full frame */ if (adapter->flags & FLAG_DISABLE_FC_PAUSE_TIME) @@ -3450,14 +3436,19 @@ void e1000e_reset(struct e1000_adapter *adapter) fc->current_mode = fc->requested_mode; switch (hw->mac.type) { + case e1000_ich9lan: + case e1000_ich10lan: + if (adapter->netdev->mtu > ETH_DATA_LEN) { + pba = 14; + ew32(PBA, pba); + fc->high_water = 0x2800; + fc->low_water = fc->high_water - 8; + break; + } + /* fall-through */ default: - if ((adapter->flags & FLAG_HAS_ERT) && - (adapter->netdev->mtu > ETH_DATA_LEN)) - hwm = min(((pba << 10) * 9 / 10), - ((pba << 10) - (E1000_ERT_2048 << 3))); - else - hwm = min(((pba << 10) * 9 / 10), - ((pba << 10) - adapter->max_frame_size)); + hwm = min(((pba << 10) * 9 / 10), + ((pba << 10) - adapter->max_frame_size)); fc->high_water = hwm & E1000_FCRTH_RTH; /* 8-byte granularity */ fc->low_water = fc->high_water - 8; @@ -3490,11 +3481,10 @@ void e1000e_reset(struct e1000_adapter *adapter) /* * Disable Adaptive Interrupt Moderation if 2 full packets cannot - * fit in receive buffer and early-receive not supported. + * fit in receive buffer. */ if (adapter->itr_setting & 0x3) { - if (((adapter->max_frame_size * 2) > (pba << 10)) && - !(adapter->flags & FLAG_HAS_ERT)) { + if ((adapter->max_frame_size * 2) > (pba << 10)) { if (!(adapter->flags2 & FLAG2_DISABLE_AIM)) { dev_info(&adapter->pdev->dev, "Interrupt Throttle Rate turned off\n"); @@ -3862,9 +3852,8 @@ static int e1000_open(struct net_device *netdev) E1000_MNG_DHCP_COOKIE_STATUS_VLAN)) e1000_update_mng_vlan(adapter); - /* DMA latency requirement to workaround early-receive/jumbo issue */ - if ((adapter->flags & FLAG_HAS_ERT) || - (adapter->hw.mac.type == e1000_pch2lan)) + /* DMA latency requirement to workaround jumbo issue */ + if (adapter->hw.mac.type == e1000_pch2lan) pm_qos_add_request(&adapter->netdev->pm_qos_req, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); @@ -3975,8 +3964,7 @@ static int e1000_close(struct net_device *netdev) !test_bit(__E1000_TESTING, &adapter->state)) e1000e_release_hw_control(adapter); - if ((adapter->flags & FLAG_HAS_ERT) || - (adapter->hw.mac.type == e1000_pch2lan)) + if (adapter->hw.mac.type == e1000_pch2lan) pm_qos_remove_request(&adapter->netdev->pm_qos_req); pm_runtime_put_sync(&pdev->dev); -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 02/11] e1000e: update workaround for 82579 intermittently disabled during S0->Sx 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher 2012-01-27 3:08 ` [net-next 01/11] e1000e: disable Early Receive DMA on ICH LOMs Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 03/11] e1000e: ICHx/PCHx LOMs should use LPLU setting in NVM when going to Sx Jeff Kirsher ` (9 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> The workaround which toggles the LANPHYPC (LAN PHY Power Control) value bit to force the MAC-Phy interconnect into PCIe mode from SMBus mode during driver load and resume should always be done except if PHY resets are blocked by the Manageability Engine (ME). Previously, the toggle was done only if PHY resets are blocked and the ME was disabled. The rest of the patch is just indentation changes as a consequence of the updated workaround. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/ich8lan.c | 103 +++++++++++++-------------- 1 files changed, 49 insertions(+), 54 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index e446e05..50a61fc 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -306,7 +306,6 @@ static void e1000_toggle_lanphypc_value_ich8lan(struct e1000_hw *hw) static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw) { struct e1000_phy_info *phy = &hw->phy; - u32 fwsm; s32 ret_val = 0; phy->addr = 1; @@ -325,14 +324,14 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw) phy->ops.power_down = e1000_power_down_phy_copper_ich8lan; phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT; - /* - * The MAC-PHY interconnect may still be in SMBus mode - * after Sx->S0. If the manageability engine (ME) is - * disabled, then toggle the LANPHYPC Value bit to force - * the interconnect to PCIe mode. - */ - fwsm = er32(FWSM); - if (!(fwsm & E1000_ICH_FWSM_FW_VALID) && !e1000_check_reset_block(hw)) { + if (!e1000_check_reset_block(hw)) { + u32 fwsm = er32(FWSM); + + /* + * The MAC-PHY interconnect may still be in SMBus mode after + * Sx->S0. If resetting the PHY is not blocked, toggle the + * LANPHYPC Value bit to force the interconnect to PCIe mode. + */ e1000_toggle_lanphypc_value_ich8lan(hw); msleep(50); @@ -340,25 +339,26 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw) * Gate automatic PHY configuration by hardware on * non-managed 82579 */ - if (hw->mac.type == e1000_pch2lan) + if ((hw->mac.type == e1000_pch2lan) && + !(fwsm & E1000_ICH_FWSM_FW_VALID)) e1000_gate_hw_phy_config_ich8lan(hw, true); - } - /* - * Reset the PHY before any access to it. Doing so, ensures that - * the PHY is in a known good state before we read/write PHY registers. - * The generic reset is sufficient here, because we haven't determined - * the PHY type yet. - */ - ret_val = e1000e_phy_hw_reset_generic(hw); - if (ret_val) - goto out; + /* + * Reset the PHY before any access to it. Doing so, ensures + * that the PHY is in a known good state before we read/write + * PHY registers. The generic reset is sufficient here, + * because we haven't determined the PHY type yet. + */ + ret_val = e1000e_phy_hw_reset_generic(hw); + if (ret_val) + goto out; - /* Ungate automatic PHY configuration on non-managed 82579 */ - if ((hw->mac.type == e1000_pch2lan) && - !(fwsm & E1000_ICH_FWSM_FW_VALID)) { - usleep_range(10000, 20000); - e1000_gate_hw_phy_config_ich8lan(hw, false); + /* Ungate automatic PHY configuration on non-managed 82579 */ + if ((hw->mac.type == e1000_pch2lan) && + !(fwsm & E1000_ICH_FWSM_FW_VALID)) { + usleep_range(10000, 20000); + e1000_gate_hw_phy_config_ich8lan(hw, false); + } } phy->id = e1000_phy_unknown; @@ -3736,42 +3736,37 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw) **/ void e1000_resume_workarounds_pchlan(struct e1000_hw *hw) { - u32 fwsm; + u16 phy_id1, phy_id2; + s32 ret_val; - if (hw->mac.type != e1000_pch2lan) + if ((hw->mac.type != e1000_pch2lan) || e1000_check_reset_block(hw)) return; - fwsm = er32(FWSM); - if (!(fwsm & E1000_ICH_FWSM_FW_VALID) || !e1000_check_reset_block(hw)) { - u16 phy_id1, phy_id2; - s32 ret_val; - - ret_val = hw->phy.ops.acquire(hw); - if (ret_val) { - e_dbg("Failed to acquire PHY semaphore in resume\n"); - return; - } + ret_val = hw->phy.ops.acquire(hw); + if (ret_val) { + e_dbg("Failed to acquire PHY semaphore in resume\n"); + return; + } - /* Test access to the PHY registers by reading the ID regs */ - ret_val = hw->phy.ops.read_reg_locked(hw, PHY_ID1, &phy_id1); - if (ret_val) - goto release; - ret_val = hw->phy.ops.read_reg_locked(hw, PHY_ID2, &phy_id2); - if (ret_val) - goto release; + /* Test access to the PHY registers by reading the ID regs */ + ret_val = hw->phy.ops.read_reg_locked(hw, PHY_ID1, &phy_id1); + if (ret_val) + goto release; + ret_val = hw->phy.ops.read_reg_locked(hw, PHY_ID2, &phy_id2); + if (ret_val) + goto release; - if (hw->phy.id == ((u32)(phy_id1 << 16) | - (u32)(phy_id2 & PHY_REVISION_MASK))) - goto release; + if (hw->phy.id == ((u32)(phy_id1 << 16) | + (u32)(phy_id2 & PHY_REVISION_MASK))) + goto release; - e1000_toggle_lanphypc_value_ich8lan(hw); + e1000_toggle_lanphypc_value_ich8lan(hw); - hw->phy.ops.release(hw); - msleep(50); - e1000_phy_hw_reset(hw); - msleep(50); - return; - } + hw->phy.ops.release(hw); + msleep(50); + e1000_phy_hw_reset(hw); + msleep(50); + return; release: hw->phy.ops.release(hw); -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 03/11] e1000e: ICHx/PCHx LOMs should use LPLU setting in NVM when going to Sx 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher 2012-01-27 3:08 ` [net-next 01/11] e1000e: disable Early Receive DMA on ICH LOMs Jeff Kirsher 2012-01-27 3:08 ` [net-next 02/11] e1000e: update workaround for 82579 intermittently disabled during S0->Sx Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 04/11] e1000e: increase Rx PBA to prevent dropping received packets on 82566/82567 Jeff Kirsher ` (8 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> When going to Sx with an ICHx/PCH device, the default Low Power Link Up (LPLU, a.k.a. reverse auto-negotiation) behavior should be whatever is set in the NVM. However, the function e1000_suspend_workarounds_ich8lan() called when going to Sx always enabled LPLU in all power states. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/ich8lan.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 50a61fc..00b5e34 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -3698,9 +3698,10 @@ void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw) * * During S0 to Sx transition, it is possible the link remains at gig * instead of negotiating to a lower speed. Before going to Sx, set - * 'LPLU Enabled' and 'Gig Disable' to force link speed negotiation - * to a lower speed. For PCH and newer parts, the OEM bits PHY register - * (LED, GbE disable and LPLU configurations) also needs to be written. + * 'Gig Disable' to force link speed negotiation to a lower speed based on + * the LPLU setting in the NVM or custom setting. For PCH and newer parts, + * the OEM bits PHY register (LED, GbE disable and LPLU configurations) also + * needs to be written. **/ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw) { @@ -3708,7 +3709,7 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw) s32 ret_val; phy_ctrl = er32(PHY_CTRL); - phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU | E1000_PHY_CTRL_GBE_DISABLE; + phy_ctrl |= E1000_PHY_CTRL_GBE_DISABLE; ew32(PHY_CTRL, phy_ctrl); if (hw->mac.type == e1000_ich8lan) -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 04/11] e1000e: increase Rx PBA to prevent dropping received packets on 82566/82567 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (2 preceding siblings ...) 2012-01-27 3:08 ` [net-next 03/11] e1000e: ICHx/PCHx LOMs should use LPLU setting in NVM when going to Sx Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 05/11] e1000e: conditionally restart autoneg on 82577/8/9 when setting LPLU state Jeff Kirsher ` (7 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> During bi-directional stress on some 82566/82567 devices, some received packets were dropped. Increasing the Receive Packet Buffer Allocation resolves this. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/ich8lan.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 00b5e34..d99548c 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -4108,7 +4108,7 @@ const struct e1000_info e1000_ich9_info = { | FLAG_HAS_AMT | FLAG_HAS_FLASH | FLAG_APME_IN_WUC, - .pba = 10, + .pba = 18, .max_hw_frame_size = DEFAULT_JUMBO, .get_variants = e1000_get_variants_ich8lan, .mac_ops = &ich8_mac_ops, @@ -4125,7 +4125,7 @@ const struct e1000_info e1000_ich10_info = { | FLAG_HAS_AMT | FLAG_HAS_FLASH | FLAG_APME_IN_WUC, - .pba = 10, + .pba = 18, .max_hw_frame_size = DEFAULT_JUMBO, .get_variants = e1000_get_variants_ich8lan, .mac_ops = &ich8_mac_ops, -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 05/11] e1000e: conditionally restart autoneg on 82577/8/9 when setting LPLU state 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (3 preceding siblings ...) 2012-01-27 3:08 ` [net-next 04/11] e1000e: increase Rx PBA to prevent dropping received packets on 82566/82567 Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 06/11] e1000e: concatenate long debug strings which span multiple lines Jeff Kirsher ` (6 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> When setting the Low Power Link Up (LPLU, a.k.a. reverse auto-negotiation) on 82577/8278/82579, do not restart auto-negotiation if reset of the Phy is blocked by the Manageability Engine. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/ich8lan.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index d99548c..6a6e6f6 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -1921,7 +1921,9 @@ static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active) else oem_reg &= ~HV_OEM_BITS_LPLU; - oem_reg |= HV_OEM_BITS_RESTART_AN; + if (!e1000_check_reset_block(hw)) + oem_reg |= HV_OEM_BITS_RESTART_AN; + ret_val = e1e_wphy(hw, HV_OEM_BITS, oem_reg); out: -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 06/11] e1000e: concatenate long debug strings which span multiple lines 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (4 preceding siblings ...) 2012-01-27 3:08 ` [net-next 05/11] e1000e: conditionally restart autoneg on 82577/8/9 when setting LPLU state Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 07/11] e1000e: convert final strncpy() to strlcpy() Jeff Kirsher ` (5 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> To ease searching for debug message strings, concatenate strings that span multiple lines even if the resulting line exceeds 80 columns; these will not cause checkpatch warnings. Also, add '\n' and remove unnecessary '\r' from a few debug strings. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/80003es2lan.c | 3 +-- drivers/net/ethernet/intel/e1000e/ich8lan.c | 15 +++++---------- drivers/net/ethernet/intel/e1000e/lib.c | 20 ++++++++------------ drivers/net/ethernet/intel/e1000e/phy.c | 3 +-- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c index b3a235c..f323ce5 100644 --- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c +++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c @@ -667,8 +667,7 @@ static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw) udelay(1); if (hw->phy.autoneg_wait_to_complete) { - e_dbg("Waiting for forced speed/duplex link " - "on GG82563 phy.\n"); + e_dbg("Waiting for forced speed/duplex link on GG82563 phy.\n"); ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, 100000, &link); diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 6a6e6f6..53e5447 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -902,8 +902,7 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw) } if (!timeout) { - e_dbg("Failed to acquire the semaphore, FW or HW has it: " - "FWSM=0x%8.8x EXTCNF_CTRL=0x%8.8x)\n", + e_dbg("Failed to acquire the semaphore, FW or HW has it: FWSM=0x%8.8x EXTCNF_CTRL=0x%8.8x)\n", er32(FWSM), extcnf_ctrl); extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG; ew32(EXTCNF_CTRL, extcnf_ctrl); @@ -2132,8 +2131,7 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank) return 0; } - e_dbg("Unable to determine valid NVM bank via EEC - " - "reading flash signature\n"); + e_dbg("Unable to determine valid NVM bank via EEC - reading flash signature\n"); /* fall-thru */ default: /* set bank to 0 in case flash read fails */ @@ -2245,8 +2243,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw) /* Check if the flash descriptor is valid */ if (hsfsts.hsf_status.fldesvalid == 0) { - e_dbg("Flash descriptor invalid. " - "SW Sequencing must be used.\n"); + e_dbg("Flash descriptor invalid. SW Sequencing must be used.\n"); return -E1000_ERR_NVM; } @@ -2446,8 +2443,7 @@ static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset, /* Repeat for some time before giving up. */ continue; } else if (hsfsts.hsf_status.flcdone == 0) { - e_dbg("Timeout error - flash cycle " - "did not complete.\n"); + e_dbg("Timeout error - flash cycle did not complete.\n"); break; } } @@ -2798,8 +2794,7 @@ static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset, /* Repeat for some time before giving up. */ continue; if (hsfsts.hsf_status.flcdone == 0) { - e_dbg("Timeout error - flash cycle " - "did not complete."); + e_dbg("Timeout error - flash cycle did not complete.\n"); break; } } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT); diff --git a/drivers/net/ethernet/intel/e1000e/lib.c b/drivers/net/ethernet/intel/e1000e/lib.c index 78e3f4c..e2678bd 100644 --- a/drivers/net/ethernet/intel/e1000e/lib.c +++ b/drivers/net/ethernet/intel/e1000e/lib.c @@ -653,12 +653,10 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw) if (rxcw & E1000_RXCW_SYNCH) { if (!(rxcw & E1000_RXCW_IV)) { mac->serdes_has_link = true; - e_dbg("SERDES: Link up - autoneg " - "completed successfully.\n"); + e_dbg("SERDES: Link up - autoneg completed successfully.\n"); } else { mac->serdes_has_link = false; - e_dbg("SERDES: Link down - invalid" - "codewords detected in autoneg.\n"); + e_dbg("SERDES: Link down - invalid codewords detected in autoneg.\n"); } } else { mac->serdes_has_link = false; @@ -1118,8 +1116,7 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) return ret_val; if (!(mii_status_reg & MII_SR_AUTONEG_COMPLETE)) { - e_dbg("Copper PHY and Auto Neg " - "has not completed.\n"); + e_dbg("Copper PHY and Auto Neg has not completed.\n"); return ret_val; } @@ -1183,11 +1180,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) */ if (hw->fc.requested_mode == e1000_fc_full) { hw->fc.current_mode = e1000_fc_full; - e_dbg("Flow Control = FULL.\r\n"); + e_dbg("Flow Control = FULL.\n"); } else { hw->fc.current_mode = e1000_fc_rx_pause; - e_dbg("Flow Control = " - "Rx PAUSE frames only.\r\n"); + e_dbg("Flow Control = Rx PAUSE frames only.\n"); } } /* @@ -1203,7 +1199,7 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { hw->fc.current_mode = e1000_fc_tx_pause; - e_dbg("Flow Control = Tx PAUSE frames only.\r\n"); + e_dbg("Flow Control = Tx PAUSE frames only.\n"); } /* * For transmitting PAUSE frames ONLY. @@ -1218,14 +1214,14 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { hw->fc.current_mode = e1000_fc_rx_pause; - e_dbg("Flow Control = Rx PAUSE frames only.\r\n"); + e_dbg("Flow Control = Rx PAUSE frames only.\n"); } else { /* * Per the IEEE spec, at this point flow control * should be disabled. */ hw->fc.current_mode = e1000_fc_none; - e_dbg("Flow Control = NONE.\r\n"); + e_dbg("Flow Control = NONE.\n"); } /* diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c index 8666476..ed70d08 100644 --- a/drivers/net/ethernet/intel/e1000e/phy.c +++ b/drivers/net/ethernet/intel/e1000e/phy.c @@ -1136,8 +1136,7 @@ static s32 e1000_copper_link_autoneg(struct e1000_hw *hw) if (phy->autoneg_wait_to_complete) { ret_val = e1000_wait_autoneg(hw); if (ret_val) { - e_dbg("Error while waiting for " - "autoneg to complete\n"); + e_dbg("Error while waiting for autoneg to complete\n"); return ret_val; } } -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 07/11] e1000e: convert final strncpy() to strlcpy() 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (5 preceding siblings ...) 2012-01-27 3:08 ` [net-next 06/11] e1000e: concatenate long debug strings which span multiple lines Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 08/11] e1000e: increase version number Jeff Kirsher ` (4 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> Convert the last instances of strncpy() to the preferred strlcpy(). Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/netdev.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 49b5ded..d6b451f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -5947,7 +5947,7 @@ static void e1000_print_device_info(struct e1000_adapter *adapter) ret_val = e1000_read_pba_string_generic(hw, pba_str, E1000_PBANUM_LENGTH); if (ret_val) - strncpy((char *)pba_str, "Unknown", sizeof(pba_str) - 1); + strlcpy((char *)pba_str, "Unknown", sizeof(pba_str)); e_info("MAC: %d, PHY: %d, PBA No: %s\n", hw->mac.type, hw->phy.type, pba_str); } @@ -6139,7 +6139,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, e1000e_set_ethtool_ops(netdev); netdev->watchdog_timeo = 5 * HZ; netif_napi_add(netdev, &adapter->napi, e1000_clean, 64); - strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1); + strlcpy(netdev->name, pci_name(pdev), sizeof(netdev->name)); netdev->mem_start = mmio_start; netdev->mem_end = mmio_start + mmio_len; @@ -6321,7 +6321,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, if (!(adapter->flags & FLAG_HAS_AMT)) e1000e_get_hw_control(adapter); - strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1); + strlcpy(netdev->name, "eth%d", sizeof(netdev->name)); err = register_netdev(netdev); if (err) goto err_register; -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 08/11] e1000e: increase version number 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (6 preceding siblings ...) 2012-01-27 3:08 ` [net-next 07/11] e1000e: convert final strncpy() to strlcpy() Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 09/11] e1000e: call er16flash() instead of __er16flash() Jeff Kirsher ` (3 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/netdev.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index d6b451f..210d27d 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -56,7 +56,7 @@ #define DRV_EXTRAVERSION "-k" -#define DRV_VERSION "1.5.1" DRV_EXTRAVERSION +#define DRV_VERSION "1.9.5" DRV_EXTRAVERSION char e1000e_driver_name[] = "e1000e"; const char e1000e_driver_version[] = DRV_VERSION; -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 09/11] e1000e: call er16flash() instead of __er16flash() 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (7 preceding siblings ...) 2012-01-27 3:08 ` [net-next 08/11] e1000e: increase version number Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 10/11] e1000e: split lib.c into three more-appropriate files Jeff Kirsher ` (2 subsequent siblings) 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> __er16flash() is not meant to be called directly. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/ich8lan.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 53e5447..070a90f 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -2279,7 +2279,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw) * cycle has a chance to end before giving up. */ for (i = 0; i < ICH_FLASH_READ_COMMAND_TIMEOUT; i++) { - hsfsts.regval = __er16flash(hw, ICH_FLASH_HSFSTS); + hsfsts.regval = er16flash(ICH_FLASH_HSFSTS); if (hsfsts.hsf_status.flcinprog == 0) { ret_val = 0; break; -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 10/11] e1000e: split lib.c into three more-appropriate files 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (8 preceding siblings ...) 2012-01-27 3:08 ` [net-next 09/11] e1000e: call er16flash() instead of __er16flash() Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-27 3:08 ` [net-next 11/11] e1000e: update copyright year Jeff Kirsher 2012-01-28 1:47 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates David Miller 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> The generic lib.c file contains code relative to the various MACs, NVM and Manageability supported by the driver. This patch splits the file into three which are specific to those areas similar to how the PHY-specific code is in phy.c and code specific to the 80003es2lan, 8257x, and ichX MAC families are in their own files. The generic code that is applicable to all MAC/PHY parts supported by the driver remains in netdev.c, param.c and ethtool.c files. No change in functionality, just moving code around for ease of maintenance, with some whitespace and other checkpatch cleanups. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/Makefile | 3 +- drivers/net/ethernet/intel/e1000e/{lib.c => mac.c} | 1019 +------------------- drivers/net/ethernet/intel/e1000e/manage.c | 377 ++++++++ drivers/net/ethernet/intel/e1000e/nvm.c | 647 +++++++++++++ 4 files changed, 1051 insertions(+), 995 deletions(-) rename drivers/net/ethernet/intel/e1000e/{lib.c => mac.c} (65%) create mode 100644 drivers/net/ethernet/intel/e1000e/manage.c create mode 100644 drivers/net/ethernet/intel/e1000e/nvm.c diff --git a/drivers/net/ethernet/intel/e1000e/Makefile b/drivers/net/ethernet/intel/e1000e/Makefile index 948c05d..8b888e5 100644 --- a/drivers/net/ethernet/intel/e1000e/Makefile +++ b/drivers/net/ethernet/intel/e1000e/Makefile @@ -33,5 +33,6 @@ obj-$(CONFIG_E1000E) += e1000e.o e1000e-objs := 82571.o ich8lan.o 80003es2lan.o \ - lib.o phy.o param.o ethtool.o netdev.o + mac.o manage.o nvm.o phy.o \ + param.o ethtool.o netdev.o diff --git a/drivers/net/ethernet/intel/e1000e/lib.c b/drivers/net/ethernet/intel/e1000e/mac.c similarity index 65% rename from drivers/net/ethernet/intel/e1000e/lib.c rename to drivers/net/ethernet/intel/e1000e/mac.c index e2678bd..64b6f43 100644 --- a/drivers/net/ethernet/intel/e1000e/lib.c +++ b/drivers/net/ethernet/intel/e1000e/mac.c @@ -28,19 +28,6 @@ #include "e1000.h" -enum e1000_mng_mode { - e1000_mng_mode_none = 0, - e1000_mng_mode_asf, - e1000_mng_mode_pt, - e1000_mng_mode_ipmi, - e1000_mng_mode_host_if_only -}; - -#define E1000_FACTPS_MNGCG 0x20000000 - -/* Intel(R) Active Management Technology signature */ -#define E1000_IAMT_SIGNATURE 0x544D4149 - /** * e1000e_get_bus_info_pcie - Get PCIe bus information * @hw: pointer to the HW structure @@ -151,7 +138,7 @@ void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value) void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count) { u32 i; - u8 mac_addr[ETH_ALEN] = {0}; + u8 mac_addr[ETH_ALEN] = { 0 }; /* Setup the receive address */ e_dbg("Programming MAC Address into RAR[0]\n"); @@ -159,7 +146,7 @@ void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count) e1000e_rar_set(hw, hw->mac.addr, 0); /* Zero out the other (rar_entry_count - 1) receive addresses */ - e_dbg("Clearing RAR[1-%u]\n", rar_count-1); + e_dbg("Clearing RAR[1-%u]\n", rar_count - 1); for (i = 1; i < rar_count; i++) e1000e_rar_set(hw, mac_addr, i); } @@ -192,7 +179,7 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw) goto out; ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, - &nvm_alt_mac_addr_offset); + &nvm_alt_mac_addr_offset); if (ret_val) { e_dbg("NVM Read Error\n"); goto out; @@ -251,11 +238,10 @@ void e1000e_rar_set(struct e1000_hw *hw, u8 *addr, u32 index) * HW expects these in little endian so we reverse the byte order * from network order (big endian) to little endian */ - rar_low = ((u32) addr[0] | - ((u32) addr[1] << 8) | - ((u32) addr[2] << 16) | ((u32) addr[3] << 24)); + rar_low = ((u32)addr[0] | ((u32)addr[1] << 8) | + ((u32)addr[2] << 16) | ((u32)addr[3] << 24)); - rar_high = ((u32) addr[4] | ((u32) addr[5] << 8)); + rar_high = ((u32)addr[4] | ((u32)addr[5] << 8)); /* If MAC address zero, no need to set the AV bit */ if (rar_low || rar_high) @@ -315,7 +301,7 @@ static u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) * values resulting from each mc_filter_type... * [0] [1] [2] [3] [4] [5] * 01 AA 00 12 34 56 - * LSB MSB + * LSB MSB * * case 0: hash_value = ((0x34 >> 4) | (0x56 << 4)) & 0xFFF = 0x563 * case 1: hash_value = ((0x34 >> 3) | (0x56 << 5)) & 0xFFF = 0xAC6 @@ -338,7 +324,7 @@ static u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) } hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | - (((u16) mc_addr[5]) << bit_shift))); + (((u16)mc_addr[5]) << bit_shift))); return hash_value; } @@ -362,7 +348,7 @@ void e1000e_update_mc_addr_list_generic(struct e1000_hw *hw, memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow)); /* update mta_shadow from mc_addr_list */ - for (i = 0; (u32) i < mc_addr_count; i++) { + for (i = 0; (u32)i < mc_addr_count; i++) { hash_value = e1000_hash_mc_addr(hw, mc_addr_list); hash_reg = (hash_value >> 5) & (hw->mac.mta_reg_count - 1); @@ -458,7 +444,7 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw) return ret_val; if (!link) - return ret_val; /* No link detected */ + return ret_val; /* No link detected */ mac->get_link_status = false; @@ -701,8 +687,7 @@ static s32 e1000_set_default_fc_generic(struct e1000_hw *hw) if ((nvm_data & NVM_WORD0F_PAUSE_MASK) == 0) hw->fc.requested_mode = e1000_fc_none; - else if ((nvm_data & NVM_WORD0F_PAUSE_MASK) == - NVM_WORD0F_ASM_DIR) + else if ((nvm_data & NVM_WORD0F_PAUSE_MASK) == NVM_WORD0F_ASM_DIR) hw->fc.requested_mode = e1000_fc_tx_pause; else hw->fc.requested_mode = e1000_fc_full; @@ -748,8 +733,7 @@ s32 e1000e_setup_link(struct e1000_hw *hw) */ hw->fc.current_mode = hw->fc.requested_mode; - e_dbg("After fix-ups FlowControl is now = %x\n", - hw->fc.current_mode); + e_dbg("After fix-ups FlowControl is now = %x\n", hw->fc.current_mode); /* Call the necessary media_type subroutine to configure the link. */ ret_val = mac->ops.setup_physical_interface(hw); @@ -1195,9 +1179,9 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) * 0 | 1 | 1 | 1 | e1000_fc_tx_pause */ else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) && - (mii_nway_adv_reg & NWAY_AR_ASM_DIR) && - (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && - (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { + (mii_nway_adv_reg & NWAY_AR_ASM_DIR) && + (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && + (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { hw->fc.current_mode = e1000_fc_tx_pause; e_dbg("Flow Control = Tx PAUSE frames only.\n"); } @@ -1261,7 +1245,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) * Read the status register for the current speed/duplex and store the current * speed and duplex for copper connections. **/ -s32 e1000e_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed, u16 *duplex) +s32 e1000e_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed, + u16 *duplex) { u32 status; @@ -1294,7 +1279,8 @@ s32 e1000e_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed, u16 *dup * Sets the speed and duplex to gigabit full duplex (the only possible option) * for fiber/serdes links. **/ -s32 e1000e_get_speed_and_duplex_fiber_serdes(struct e1000_hw *hw, u16 *speed, u16 *duplex) +s32 e1000e_get_speed_and_duplex_fiber_serdes(struct e1000_hw *hw, u16 *speed, + u16 *duplex) { *speed = SPEED_1000; *duplex = FULL_DUPLEX; @@ -1497,11 +1483,10 @@ s32 e1000e_setup_led_generic(struct e1000_hw *hw) ledctl = er32(LEDCTL); hw->mac.ledctl_default = ledctl; /* Turn off LED0 */ - ledctl &= ~(E1000_LEDCTL_LED0_IVRT | - E1000_LEDCTL_LED0_BLINK | - E1000_LEDCTL_LED0_MODE_MASK); + ledctl &= ~(E1000_LEDCTL_LED0_IVRT | E1000_LEDCTL_LED0_BLINK | + E1000_LEDCTL_LED0_MODE_MASK); ledctl |= (E1000_LEDCTL_MODE_LED_OFF << - E1000_LEDCTL_LED0_MODE_SHIFT); + E1000_LEDCTL_LED0_MODE_SHIFT); ew32(LEDCTL, ledctl); } else if (hw->phy.media_type == e1000_media_type_copper) { ew32(LEDCTL, hw->mac.ledctl_mode1); @@ -1537,7 +1522,7 @@ s32 e1000e_blink_led_generic(struct e1000_hw *hw) if (hw->phy.media_type == e1000_media_type_fiber) { /* always blink LED0 for PCI-E fiber */ ledctl_blink = E1000_LEDCTL_LED0_BLINK | - (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT); + (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT); } else { /* * set the blink bit for each LED that's "on" (0x0E) @@ -1650,8 +1635,7 @@ s32 e1000e_disable_pcie_master(struct e1000_hw *hw) ew32(CTRL, ctrl); while (timeout) { - if (!(er32(STATUS) & - E1000_STATUS_GIO_MASTER_ENABLE)) + if (!(er32(STATUS) & E1000_STATUS_GIO_MASTER_ENABLE)) break; udelay(100); timeout--; @@ -1716,7 +1700,7 @@ void e1000e_update_adaptive(struct e1000_hw *hw) mac->current_ifs_val = mac->ifs_min_val; else mac->current_ifs_val += - mac->ifs_step_size; + mac->ifs_step_size; ew32(AIT, mac->current_ifs_val); } } @@ -1731,956 +1715,3 @@ void e1000e_update_adaptive(struct e1000_hw *hw) out: return; } - -/** - * e1000_raise_eec_clk - Raise EEPROM clock - * @hw: pointer to the HW structure - * @eecd: pointer to the EEPROM - * - * Enable/Raise the EEPROM clock bit. - **/ -static void e1000_raise_eec_clk(struct e1000_hw *hw, u32 *eecd) -{ - *eecd = *eecd | E1000_EECD_SK; - ew32(EECD, *eecd); - e1e_flush(); - udelay(hw->nvm.delay_usec); -} - -/** - * e1000_lower_eec_clk - Lower EEPROM clock - * @hw: pointer to the HW structure - * @eecd: pointer to the EEPROM - * - * Clear/Lower the EEPROM clock bit. - **/ -static void e1000_lower_eec_clk(struct e1000_hw *hw, u32 *eecd) -{ - *eecd = *eecd & ~E1000_EECD_SK; - ew32(EECD, *eecd); - e1e_flush(); - udelay(hw->nvm.delay_usec); -} - -/** - * e1000_shift_out_eec_bits - Shift data bits our to the EEPROM - * @hw: pointer to the HW structure - * @data: data to send to the EEPROM - * @count: number of bits to shift out - * - * We need to shift 'count' bits out to the EEPROM. So, the value in the - * "data" parameter will be shifted out to the EEPROM one bit at a time. - * In order to do this, "data" must be broken down into bits. - **/ -static void e1000_shift_out_eec_bits(struct e1000_hw *hw, u16 data, u16 count) -{ - struct e1000_nvm_info *nvm = &hw->nvm; - u32 eecd = er32(EECD); - u32 mask; - - mask = 0x01 << (count - 1); - if (nvm->type == e1000_nvm_eeprom_spi) - eecd |= E1000_EECD_DO; - - do { - eecd &= ~E1000_EECD_DI; - - if (data & mask) - eecd |= E1000_EECD_DI; - - ew32(EECD, eecd); - e1e_flush(); - - udelay(nvm->delay_usec); - - e1000_raise_eec_clk(hw, &eecd); - e1000_lower_eec_clk(hw, &eecd); - - mask >>= 1; - } while (mask); - - eecd &= ~E1000_EECD_DI; - ew32(EECD, eecd); -} - -/** - * e1000_shift_in_eec_bits - Shift data bits in from the EEPROM - * @hw: pointer to the HW structure - * @count: number of bits to shift in - * - * In order to read a register from the EEPROM, we need to shift 'count' bits - * in from the EEPROM. Bits are "shifted in" by raising the clock input to - * the EEPROM (setting the SK bit), and then reading the value of the data out - * "DO" bit. During this "shifting in" process the data in "DI" bit should - * always be clear. - **/ -static u16 e1000_shift_in_eec_bits(struct e1000_hw *hw, u16 count) -{ - u32 eecd; - u32 i; - u16 data; - - eecd = er32(EECD); - - eecd &= ~(E1000_EECD_DO | E1000_EECD_DI); - data = 0; - - for (i = 0; i < count; i++) { - data <<= 1; - e1000_raise_eec_clk(hw, &eecd); - - eecd = er32(EECD); - - eecd &= ~E1000_EECD_DI; - if (eecd & E1000_EECD_DO) - data |= 1; - - e1000_lower_eec_clk(hw, &eecd); - } - - return data; -} - -/** - * e1000e_poll_eerd_eewr_done - Poll for EEPROM read/write completion - * @hw: pointer to the HW structure - * @ee_reg: EEPROM flag for polling - * - * Polls the EEPROM status bit for either read or write completion based - * upon the value of 'ee_reg'. - **/ -s32 e1000e_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg) -{ - u32 attempts = 100000; - u32 i, reg = 0; - - for (i = 0; i < attempts; i++) { - if (ee_reg == E1000_NVM_POLL_READ) - reg = er32(EERD); - else - reg = er32(EEWR); - - if (reg & E1000_NVM_RW_REG_DONE) - return 0; - - udelay(5); - } - - return -E1000_ERR_NVM; -} - -/** - * e1000e_acquire_nvm - Generic request for access to EEPROM - * @hw: pointer to the HW structure - * - * Set the EEPROM access request bit and wait for EEPROM access grant bit. - * Return successful if access grant bit set, else clear the request for - * EEPROM access and return -E1000_ERR_NVM (-1). - **/ -s32 e1000e_acquire_nvm(struct e1000_hw *hw) -{ - u32 eecd = er32(EECD); - s32 timeout = E1000_NVM_GRANT_ATTEMPTS; - - ew32(EECD, eecd | E1000_EECD_REQ); - eecd = er32(EECD); - - while (timeout) { - if (eecd & E1000_EECD_GNT) - break; - udelay(5); - eecd = er32(EECD); - timeout--; - } - - if (!timeout) { - eecd &= ~E1000_EECD_REQ; - ew32(EECD, eecd); - e_dbg("Could not acquire NVM grant\n"); - return -E1000_ERR_NVM; - } - - return 0; -} - -/** - * e1000_standby_nvm - Return EEPROM to standby state - * @hw: pointer to the HW structure - * - * Return the EEPROM to a standby state. - **/ -static void e1000_standby_nvm(struct e1000_hw *hw) -{ - struct e1000_nvm_info *nvm = &hw->nvm; - u32 eecd = er32(EECD); - - if (nvm->type == e1000_nvm_eeprom_spi) { - /* Toggle CS to flush commands */ - eecd |= E1000_EECD_CS; - ew32(EECD, eecd); - e1e_flush(); - udelay(nvm->delay_usec); - eecd &= ~E1000_EECD_CS; - ew32(EECD, eecd); - e1e_flush(); - udelay(nvm->delay_usec); - } -} - -/** - * e1000_stop_nvm - Terminate EEPROM command - * @hw: pointer to the HW structure - * - * Terminates the current command by inverting the EEPROM's chip select pin. - **/ -static void e1000_stop_nvm(struct e1000_hw *hw) -{ - u32 eecd; - - eecd = er32(EECD); - if (hw->nvm.type == e1000_nvm_eeprom_spi) { - /* Pull CS high */ - eecd |= E1000_EECD_CS; - e1000_lower_eec_clk(hw, &eecd); - } -} - -/** - * e1000e_release_nvm - Release exclusive access to EEPROM - * @hw: pointer to the HW structure - * - * Stop any current commands to the EEPROM and clear the EEPROM request bit. - **/ -void e1000e_release_nvm(struct e1000_hw *hw) -{ - u32 eecd; - - e1000_stop_nvm(hw); - - eecd = er32(EECD); - eecd &= ~E1000_EECD_REQ; - ew32(EECD, eecd); -} - -/** - * e1000_ready_nvm_eeprom - Prepares EEPROM for read/write - * @hw: pointer to the HW structure - * - * Setups the EEPROM for reading and writing. - **/ -static s32 e1000_ready_nvm_eeprom(struct e1000_hw *hw) -{ - struct e1000_nvm_info *nvm = &hw->nvm; - u32 eecd = er32(EECD); - u8 spi_stat_reg; - - if (nvm->type == e1000_nvm_eeprom_spi) { - u16 timeout = NVM_MAX_RETRY_SPI; - - /* Clear SK and CS */ - eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); - ew32(EECD, eecd); - e1e_flush(); - udelay(1); - - /* - * Read "Status Register" repeatedly until the LSB is cleared. - * The EEPROM will signal that the command has been completed - * by clearing bit 0 of the internal status register. If it's - * not cleared within 'timeout', then error out. - */ - while (timeout) { - e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI, - hw->nvm.opcode_bits); - spi_stat_reg = (u8)e1000_shift_in_eec_bits(hw, 8); - if (!(spi_stat_reg & NVM_STATUS_RDY_SPI)) - break; - - udelay(5); - e1000_standby_nvm(hw); - timeout--; - } - - if (!timeout) { - e_dbg("SPI NVM Status error\n"); - return -E1000_ERR_NVM; - } - } - - return 0; -} - -/** - * e1000e_read_nvm_eerd - Reads EEPROM using EERD register - * @hw: pointer to the HW structure - * @offset: offset of word in the EEPROM to read - * @words: number of words to read - * @data: word read from the EEPROM - * - * Reads a 16 bit word from the EEPROM using the EERD register. - **/ -s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) -{ - struct e1000_nvm_info *nvm = &hw->nvm; - u32 i, eerd = 0; - s32 ret_val = 0; - - /* - * A check for invalid values: offset too large, too many words, - * too many words for the offset, and not enough words. - */ - if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || - (words == 0)) { - e_dbg("nvm parameter(s) out of bounds\n"); - return -E1000_ERR_NVM; - } - - for (i = 0; i < words; i++) { - eerd = ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) + - E1000_NVM_RW_REG_START; - - ew32(EERD, eerd); - ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ); - if (ret_val) - break; - - data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA); - } - - return ret_val; -} - -/** - * e1000e_write_nvm_spi - Write to EEPROM using SPI - * @hw: pointer to the HW structure - * @offset: offset within the EEPROM to be written to - * @words: number of words to write - * @data: 16 bit word(s) to be written to the EEPROM - * - * Writes data to EEPROM at offset using SPI interface. - * - * If e1000e_update_nvm_checksum is not called after this function , the - * EEPROM will most likely contain an invalid checksum. - **/ -s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) -{ - struct e1000_nvm_info *nvm = &hw->nvm; - s32 ret_val; - u16 widx = 0; - - /* - * A check for invalid values: offset too large, too many words, - * and not enough words. - */ - if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || - (words == 0)) { - e_dbg("nvm parameter(s) out of bounds\n"); - return -E1000_ERR_NVM; - } - - ret_val = nvm->ops.acquire(hw); - if (ret_val) - return ret_val; - - while (widx < words) { - u8 write_opcode = NVM_WRITE_OPCODE_SPI; - - ret_val = e1000_ready_nvm_eeprom(hw); - if (ret_val) { - nvm->ops.release(hw); - return ret_val; - } - - e1000_standby_nvm(hw); - - /* Send the WRITE ENABLE command (8 bit opcode) */ - e1000_shift_out_eec_bits(hw, NVM_WREN_OPCODE_SPI, - nvm->opcode_bits); - - e1000_standby_nvm(hw); - - /* - * Some SPI eeproms use the 8th address bit embedded in the - * opcode - */ - if ((nvm->address_bits == 8) && (offset >= 128)) - write_opcode |= NVM_A8_OPCODE_SPI; - - /* Send the Write command (8-bit opcode + addr) */ - e1000_shift_out_eec_bits(hw, write_opcode, nvm->opcode_bits); - e1000_shift_out_eec_bits(hw, (u16)((offset + widx) * 2), - nvm->address_bits); - - /* Loop to allow for up to whole page write of eeprom */ - while (widx < words) { - u16 word_out = data[widx]; - word_out = (word_out >> 8) | (word_out << 8); - e1000_shift_out_eec_bits(hw, word_out, 16); - widx++; - - if ((((offset + widx) * 2) % nvm->page_size) == 0) { - e1000_standby_nvm(hw); - break; - } - } - } - - usleep_range(10000, 20000); - nvm->ops.release(hw); - return 0; -} - -/** - * e1000_read_pba_string_generic - Read device part number - * @hw: pointer to the HW structure - * @pba_num: pointer to device part number - * @pba_num_size: size of part number buffer - * - * Reads the product board assembly (PBA) number from the EEPROM and stores - * the value in pba_num. - **/ -s32 e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num, - u32 pba_num_size) -{ - s32 ret_val; - u16 nvm_data; - u16 pba_ptr; - u16 offset; - u16 length; - - if (pba_num == NULL) { - e_dbg("PBA string buffer was null\n"); - ret_val = E1000_ERR_INVALID_ARGUMENT; - goto out; - } - - ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_0, 1, &nvm_data); - if (ret_val) { - e_dbg("NVM Read Error\n"); - goto out; - } - - ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_1, 1, &pba_ptr); - if (ret_val) { - e_dbg("NVM Read Error\n"); - goto out; - } - - /* - * if nvm_data is not ptr guard the PBA must be in legacy format which - * means pba_ptr is actually our second data word for the PBA number - * and we can decode it into an ascii string - */ - if (nvm_data != NVM_PBA_PTR_GUARD) { - e_dbg("NVM PBA number is not stored as string\n"); - - /* we will need 11 characters to store the PBA */ - if (pba_num_size < 11) { - e_dbg("PBA string buffer too small\n"); - return E1000_ERR_NO_SPACE; - } - - /* extract hex string from data and pba_ptr */ - pba_num[0] = (nvm_data >> 12) & 0xF; - pba_num[1] = (nvm_data >> 8) & 0xF; - pba_num[2] = (nvm_data >> 4) & 0xF; - pba_num[3] = nvm_data & 0xF; - pba_num[4] = (pba_ptr >> 12) & 0xF; - pba_num[5] = (pba_ptr >> 8) & 0xF; - pba_num[6] = '-'; - pba_num[7] = 0; - pba_num[8] = (pba_ptr >> 4) & 0xF; - pba_num[9] = pba_ptr & 0xF; - - /* put a null character on the end of our string */ - pba_num[10] = '\0'; - - /* switch all the data but the '-' to hex char */ - for (offset = 0; offset < 10; offset++) { - if (pba_num[offset] < 0xA) - pba_num[offset] += '0'; - else if (pba_num[offset] < 0x10) - pba_num[offset] += 'A' - 0xA; - } - - goto out; - } - - ret_val = e1000_read_nvm(hw, pba_ptr, 1, &length); - if (ret_val) { - e_dbg("NVM Read Error\n"); - goto out; - } - - if (length == 0xFFFF || length == 0) { - e_dbg("NVM PBA number section invalid length\n"); - ret_val = E1000_ERR_NVM_PBA_SECTION; - goto out; - } - /* check if pba_num buffer is big enough */ - if (pba_num_size < (((u32)length * 2) - 1)) { - e_dbg("PBA string buffer too small\n"); - ret_val = E1000_ERR_NO_SPACE; - goto out; - } - - /* trim pba length from start of string */ - pba_ptr++; - length--; - - for (offset = 0; offset < length; offset++) { - ret_val = e1000_read_nvm(hw, pba_ptr + offset, 1, &nvm_data); - if (ret_val) { - e_dbg("NVM Read Error\n"); - goto out; - } - pba_num[offset * 2] = (u8)(nvm_data >> 8); - pba_num[(offset * 2) + 1] = (u8)(nvm_data & 0xFF); - } - pba_num[offset * 2] = '\0'; - -out: - return ret_val; -} - -/** - * e1000_read_mac_addr_generic - Read device MAC address - * @hw: pointer to the HW structure - * - * Reads the device MAC address from the EEPROM and stores the value. - * Since devices with two ports use the same EEPROM, we increment the - * last bit in the MAC address for the second port. - **/ -s32 e1000_read_mac_addr_generic(struct e1000_hw *hw) -{ - u32 rar_high; - u32 rar_low; - u16 i; - - rar_high = er32(RAH(0)); - rar_low = er32(RAL(0)); - - for (i = 0; i < E1000_RAL_MAC_ADDR_LEN; i++) - hw->mac.perm_addr[i] = (u8)(rar_low >> (i*8)); - - for (i = 0; i < E1000_RAH_MAC_ADDR_LEN; i++) - hw->mac.perm_addr[i+4] = (u8)(rar_high >> (i*8)); - - for (i = 0; i < ETH_ALEN; i++) - hw->mac.addr[i] = hw->mac.perm_addr[i]; - - return 0; -} - -/** - * e1000e_validate_nvm_checksum_generic - Validate EEPROM checksum - * @hw: pointer to the HW structure - * - * Calculates the EEPROM checksum by reading/adding each word of the EEPROM - * and then verifies that the sum of the EEPROM is equal to 0xBABA. - **/ -s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw) -{ - s32 ret_val; - u16 checksum = 0; - u16 i, nvm_data; - - for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) { - ret_val = e1000_read_nvm(hw, i, 1, &nvm_data); - if (ret_val) { - e_dbg("NVM Read Error\n"); - return ret_val; - } - checksum += nvm_data; - } - - if (checksum != (u16) NVM_SUM) { - e_dbg("NVM Checksum Invalid\n"); - return -E1000_ERR_NVM; - } - - return 0; -} - -/** - * e1000e_update_nvm_checksum_generic - Update EEPROM checksum - * @hw: pointer to the HW structure - * - * Updates the EEPROM checksum by reading/adding each word of the EEPROM - * up to the checksum. Then calculates the EEPROM checksum and writes the - * value to the EEPROM. - **/ -s32 e1000e_update_nvm_checksum_generic(struct e1000_hw *hw) -{ - s32 ret_val; - u16 checksum = 0; - u16 i, nvm_data; - - for (i = 0; i < NVM_CHECKSUM_REG; i++) { - ret_val = e1000_read_nvm(hw, i, 1, &nvm_data); - if (ret_val) { - e_dbg("NVM Read Error while updating checksum.\n"); - return ret_val; - } - checksum += nvm_data; - } - checksum = (u16) NVM_SUM - checksum; - ret_val = e1000_write_nvm(hw, NVM_CHECKSUM_REG, 1, &checksum); - if (ret_val) - e_dbg("NVM Write Error while updating checksum.\n"); - - return ret_val; -} - -/** - * e1000e_reload_nvm - Reloads EEPROM - * @hw: pointer to the HW structure - * - * Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the - * extended control register. - **/ -void e1000e_reload_nvm(struct e1000_hw *hw) -{ - u32 ctrl_ext; - - udelay(10); - ctrl_ext = er32(CTRL_EXT); - ctrl_ext |= E1000_CTRL_EXT_EE_RST; - ew32(CTRL_EXT, ctrl_ext); - e1e_flush(); -} - -/** - * e1000_calculate_checksum - Calculate checksum for buffer - * @buffer: pointer to EEPROM - * @length: size of EEPROM to calculate a checksum for - * - * Calculates the checksum for some buffer on a specified length. The - * checksum calculated is returned. - **/ -static u8 e1000_calculate_checksum(u8 *buffer, u32 length) -{ - u32 i; - u8 sum = 0; - - if (!buffer) - return 0; - - for (i = 0; i < length; i++) - sum += buffer[i]; - - return (u8) (0 - sum); -} - -/** - * e1000_mng_enable_host_if - Checks host interface is enabled - * @hw: pointer to the HW structure - * - * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND - * - * This function checks whether the HOST IF is enabled for command operation - * and also checks whether the previous command is completed. It busy waits - * in case of previous command is not completed. - **/ -static s32 e1000_mng_enable_host_if(struct e1000_hw *hw) -{ - u32 hicr; - u8 i; - - if (!(hw->mac.arc_subsystem_valid)) { - e_dbg("ARC subsystem not valid.\n"); - return -E1000_ERR_HOST_INTERFACE_COMMAND; - } - - /* Check that the host interface is enabled. */ - hicr = er32(HICR); - if ((hicr & E1000_HICR_EN) == 0) { - e_dbg("E1000_HOST_EN bit disabled.\n"); - return -E1000_ERR_HOST_INTERFACE_COMMAND; - } - /* check the previous command is completed */ - for (i = 0; i < E1000_MNG_DHCP_COMMAND_TIMEOUT; i++) { - hicr = er32(HICR); - if (!(hicr & E1000_HICR_C)) - break; - mdelay(1); - } - - if (i == E1000_MNG_DHCP_COMMAND_TIMEOUT) { - e_dbg("Previous command timeout failed .\n"); - return -E1000_ERR_HOST_INTERFACE_COMMAND; - } - - return 0; -} - -/** - * e1000e_check_mng_mode_generic - check management mode - * @hw: pointer to the HW structure - * - * Reads the firmware semaphore register and returns true (>0) if - * manageability is enabled, else false (0). - **/ -bool e1000e_check_mng_mode_generic(struct e1000_hw *hw) -{ - u32 fwsm = er32(FWSM); - - return (fwsm & E1000_FWSM_MODE_MASK) == - (E1000_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT); -} - -/** - * e1000e_enable_tx_pkt_filtering - Enable packet filtering on Tx - * @hw: pointer to the HW structure - * - * Enables packet filtering on transmit packets if manageability is enabled - * and host interface is enabled. - **/ -bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw) -{ - struct e1000_host_mng_dhcp_cookie *hdr = &hw->mng_cookie; - u32 *buffer = (u32 *)&hw->mng_cookie; - u32 offset; - s32 ret_val, hdr_csum, csum; - u8 i, len; - - hw->mac.tx_pkt_filtering = true; - - /* No manageability, no filtering */ - if (!e1000e_check_mng_mode(hw)) { - hw->mac.tx_pkt_filtering = false; - goto out; - } - - /* - * If we can't read from the host interface for whatever - * reason, disable filtering. - */ - ret_val = e1000_mng_enable_host_if(hw); - if (ret_val) { - hw->mac.tx_pkt_filtering = false; - goto out; - } - - /* Read in the header. Length and offset are in dwords. */ - len = E1000_MNG_DHCP_COOKIE_LENGTH >> 2; - offset = E1000_MNG_DHCP_COOKIE_OFFSET >> 2; - for (i = 0; i < len; i++) - *(buffer + i) = E1000_READ_REG_ARRAY(hw, E1000_HOST_IF, offset + i); - hdr_csum = hdr->checksum; - hdr->checksum = 0; - csum = e1000_calculate_checksum((u8 *)hdr, - E1000_MNG_DHCP_COOKIE_LENGTH); - /* - * If either the checksums or signature don't match, then - * the cookie area isn't considered valid, in which case we - * take the safe route of assuming Tx filtering is enabled. - */ - if ((hdr_csum != csum) || (hdr->signature != E1000_IAMT_SIGNATURE)) { - hw->mac.tx_pkt_filtering = true; - goto out; - } - - /* Cookie area is valid, make the final check for filtering. */ - if (!(hdr->status & E1000_MNG_DHCP_COOKIE_STATUS_PARSING)) { - hw->mac.tx_pkt_filtering = false; - goto out; - } - -out: - return hw->mac.tx_pkt_filtering; -} - -/** - * e1000_mng_write_cmd_header - Writes manageability command header - * @hw: pointer to the HW structure - * @hdr: pointer to the host interface command header - * - * Writes the command header after does the checksum calculation. - **/ -static s32 e1000_mng_write_cmd_header(struct e1000_hw *hw, - struct e1000_host_mng_command_header *hdr) -{ - u16 i, length = sizeof(struct e1000_host_mng_command_header); - - /* Write the whole command header structure with new checksum. */ - - hdr->checksum = e1000_calculate_checksum((u8 *)hdr, length); - - length >>= 2; - /* Write the relevant command block into the ram area. */ - for (i = 0; i < length; i++) { - E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, i, - *((u32 *) hdr + i)); - e1e_flush(); - } - - return 0; -} - -/** - * e1000_mng_host_if_write - Write to the manageability host interface - * @hw: pointer to the HW structure - * @buffer: pointer to the host interface buffer - * @length: size of the buffer - * @offset: location in the buffer to write to - * @sum: sum of the data (not checksum) - * - * This function writes the buffer content at the offset given on the host if. - * It also does alignment considerations to do the writes in most efficient - * way. Also fills up the sum of the buffer in *buffer parameter. - **/ -static s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, - u16 length, u16 offset, u8 *sum) -{ - u8 *tmp; - u8 *bufptr = buffer; - u32 data = 0; - u16 remaining, i, j, prev_bytes; - - /* sum = only sum of the data and it is not checksum */ - - if (length == 0 || offset + length > E1000_HI_MAX_MNG_DATA_LENGTH) - return -E1000_ERR_PARAM; - - tmp = (u8 *)&data; - prev_bytes = offset & 0x3; - offset >>= 2; - - if (prev_bytes) { - data = E1000_READ_REG_ARRAY(hw, E1000_HOST_IF, offset); - for (j = prev_bytes; j < sizeof(u32); j++) { - *(tmp + j) = *bufptr++; - *sum += *(tmp + j); - } - E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset, data); - length -= j - prev_bytes; - offset++; - } - - remaining = length & 0x3; - length -= remaining; - - /* Calculate length in DWORDs */ - length >>= 2; - - /* - * The device driver writes the relevant command block into the - * ram area. - */ - for (i = 0; i < length; i++) { - for (j = 0; j < sizeof(u32); j++) { - *(tmp + j) = *bufptr++; - *sum += *(tmp + j); - } - - E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset + i, data); - } - if (remaining) { - for (j = 0; j < sizeof(u32); j++) { - if (j < remaining) - *(tmp + j) = *bufptr++; - else - *(tmp + j) = 0; - - *sum += *(tmp + j); - } - E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset + i, data); - } - - return 0; -} - -/** - * e1000e_mng_write_dhcp_info - Writes DHCP info to host interface - * @hw: pointer to the HW structure - * @buffer: pointer to the host interface - * @length: size of the buffer - * - * Writes the DHCP information to the host interface. - **/ -s32 e1000e_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length) -{ - struct e1000_host_mng_command_header hdr; - s32 ret_val; - u32 hicr; - - hdr.command_id = E1000_MNG_DHCP_TX_PAYLOAD_CMD; - hdr.command_length = length; - hdr.reserved1 = 0; - hdr.reserved2 = 0; - hdr.checksum = 0; - - /* Enable the host interface */ - ret_val = e1000_mng_enable_host_if(hw); - if (ret_val) - return ret_val; - - /* Populate the host interface with the contents of "buffer". */ - ret_val = e1000_mng_host_if_write(hw, buffer, length, - sizeof(hdr), &(hdr.checksum)); - if (ret_val) - return ret_val; - - /* Write the manageability command header */ - ret_val = e1000_mng_write_cmd_header(hw, &hdr); - if (ret_val) - return ret_val; - - /* Tell the ARC a new command is pending. */ - hicr = er32(HICR); - ew32(HICR, hicr | E1000_HICR_C); - - return 0; -} - -/** - * e1000e_enable_mng_pass_thru - Check if management passthrough is needed - * @hw: pointer to the HW structure - * - * Verifies the hardware needs to leave interface enabled so that frames can - * be directed to and from the management interface. - **/ -bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw) -{ - u32 manc; - u32 fwsm, factps; - bool ret_val = false; - - manc = er32(MANC); - - if (!(manc & E1000_MANC_RCV_TCO_EN)) - goto out; - - if (hw->mac.has_fwsm) { - fwsm = er32(FWSM); - factps = er32(FACTPS); - - if (!(factps & E1000_FACTPS_MNGCG) && - ((fwsm & E1000_FWSM_MODE_MASK) == - (e1000_mng_mode_pt << E1000_FWSM_MODE_SHIFT))) { - ret_val = true; - goto out; - } - } else if ((hw->mac.type == e1000_82574) || - (hw->mac.type == e1000_82583)) { - u16 data; - - factps = er32(FACTPS); - e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data); - - if (!(factps & E1000_FACTPS_MNGCG) && - ((data & E1000_NVM_INIT_CTRL2_MNGM) == - (e1000_mng_mode_pt << 13))) { - ret_val = true; - goto out; - } - } else if ((manc & E1000_MANC_SMBUS_EN) && - !(manc & E1000_MANC_ASF_EN)) { - ret_val = true; - goto out; - } - -out: - return ret_val; -} diff --git a/drivers/net/ethernet/intel/e1000e/manage.c b/drivers/net/ethernet/intel/e1000e/manage.c new file mode 100644 index 0000000..3dae265 --- /dev/null +++ b/drivers/net/ethernet/intel/e1000e/manage.c @@ -0,0 +1,377 @@ +/******************************************************************************* + + Intel PRO/1000 Linux driver + Copyright(c) 1999 - 2011 Intel Corporation. + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information: + Linux NICS <linux.nics@intel.com> + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +*******************************************************************************/ + +#include "e1000.h" + +enum e1000_mng_mode { + e1000_mng_mode_none = 0, + e1000_mng_mode_asf, + e1000_mng_mode_pt, + e1000_mng_mode_ipmi, + e1000_mng_mode_host_if_only +}; + +#define E1000_FACTPS_MNGCG 0x20000000 + +/* Intel(R) Active Management Technology signature */ +#define E1000_IAMT_SIGNATURE 0x544D4149 + +/** + * e1000_calculate_checksum - Calculate checksum for buffer + * @buffer: pointer to EEPROM + * @length: size of EEPROM to calculate a checksum for + * + * Calculates the checksum for some buffer on a specified length. The + * checksum calculated is returned. + **/ +static u8 e1000_calculate_checksum(u8 *buffer, u32 length) +{ + u32 i; + u8 sum = 0; + + if (!buffer) + return 0; + + for (i = 0; i < length; i++) + sum += buffer[i]; + + return (u8)(0 - sum); +} + +/** + * e1000_mng_enable_host_if - Checks host interface is enabled + * @hw: pointer to the HW structure + * + * Returns E1000_success upon success, else E1000_ERR_HOST_INTERFACE_COMMAND + * + * This function checks whether the HOST IF is enabled for command operation + * and also checks whether the previous command is completed. It busy waits + * in case of previous command is not completed. + **/ +static s32 e1000_mng_enable_host_if(struct e1000_hw *hw) +{ + u32 hicr; + u8 i; + + if (!(hw->mac.arc_subsystem_valid)) { + e_dbg("ARC subsystem not valid.\n"); + return -E1000_ERR_HOST_INTERFACE_COMMAND; + } + + /* Check that the host interface is enabled. */ + hicr = er32(HICR); + if ((hicr & E1000_HICR_EN) == 0) { + e_dbg("E1000_HOST_EN bit disabled.\n"); + return -E1000_ERR_HOST_INTERFACE_COMMAND; + } + /* check the previous command is completed */ + for (i = 0; i < E1000_MNG_DHCP_COMMAND_TIMEOUT; i++) { + hicr = er32(HICR); + if (!(hicr & E1000_HICR_C)) + break; + mdelay(1); + } + + if (i == E1000_MNG_DHCP_COMMAND_TIMEOUT) { + e_dbg("Previous command timeout failed .\n"); + return -E1000_ERR_HOST_INTERFACE_COMMAND; + } + + return 0; +} + +/** + * e1000e_check_mng_mode_generic - check management mode + * @hw: pointer to the HW structure + * + * Reads the firmware semaphore register and returns true (>0) if + * manageability is enabled, else false (0). + **/ +bool e1000e_check_mng_mode_generic(struct e1000_hw *hw) +{ + u32 fwsm = er32(FWSM); + + return (fwsm & E1000_FWSM_MODE_MASK) == + (E1000_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT); +} + +/** + * e1000e_enable_tx_pkt_filtering - Enable packet filtering on Tx + * @hw: pointer to the HW structure + * + * Enables packet filtering on transmit packets if manageability is enabled + * and host interface is enabled. + **/ +bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw) +{ + struct e1000_host_mng_dhcp_cookie *hdr = &hw->mng_cookie; + u32 *buffer = (u32 *)&hw->mng_cookie; + u32 offset; + s32 ret_val, hdr_csum, csum; + u8 i, len; + + hw->mac.tx_pkt_filtering = true; + + /* No manageability, no filtering */ + if (!e1000e_check_mng_mode(hw)) { + hw->mac.tx_pkt_filtering = false; + goto out; + } + + /* + * If we can't read from the host interface for whatever + * reason, disable filtering. + */ + ret_val = e1000_mng_enable_host_if(hw); + if (ret_val) { + hw->mac.tx_pkt_filtering = false; + goto out; + } + + /* Read in the header. Length and offset are in dwords. */ + len = E1000_MNG_DHCP_COOKIE_LENGTH >> 2; + offset = E1000_MNG_DHCP_COOKIE_OFFSET >> 2; + for (i = 0; i < len; i++) + *(buffer + i) = E1000_READ_REG_ARRAY(hw, E1000_HOST_IF, + offset + i); + hdr_csum = hdr->checksum; + hdr->checksum = 0; + csum = e1000_calculate_checksum((u8 *)hdr, + E1000_MNG_DHCP_COOKIE_LENGTH); + /* + * If either the checksums or signature don't match, then + * the cookie area isn't considered valid, in which case we + * take the safe route of assuming Tx filtering is enabled. + */ + if ((hdr_csum != csum) || (hdr->signature != E1000_IAMT_SIGNATURE)) { + hw->mac.tx_pkt_filtering = true; + goto out; + } + + /* Cookie area is valid, make the final check for filtering. */ + if (!(hdr->status & E1000_MNG_DHCP_COOKIE_STATUS_PARSING)) { + hw->mac.tx_pkt_filtering = false; + goto out; + } + +out: + return hw->mac.tx_pkt_filtering; +} + +/** + * e1000_mng_write_cmd_header - Writes manageability command header + * @hw: pointer to the HW structure + * @hdr: pointer to the host interface command header + * + * Writes the command header after does the checksum calculation. + **/ +static s32 e1000_mng_write_cmd_header(struct e1000_hw *hw, + struct e1000_host_mng_command_header *hdr) +{ + u16 i, length = sizeof(struct e1000_host_mng_command_header); + + /* Write the whole command header structure with new checksum. */ + + hdr->checksum = e1000_calculate_checksum((u8 *)hdr, length); + + length >>= 2; + /* Write the relevant command block into the ram area. */ + for (i = 0; i < length; i++) { + E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, i, *((u32 *)hdr + i)); + e1e_flush(); + } + + return 0; +} + +/** + * e1000_mng_host_if_write - Write to the manageability host interface + * @hw: pointer to the HW structure + * @buffer: pointer to the host interface buffer + * @length: size of the buffer + * @offset: location in the buffer to write to + * @sum: sum of the data (not checksum) + * + * This function writes the buffer content at the offset given on the host if. + * It also does alignment considerations to do the writes in most efficient + * way. Also fills up the sum of the buffer in *buffer parameter. + **/ +static s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, + u16 length, u16 offset, u8 *sum) +{ + u8 *tmp; + u8 *bufptr = buffer; + u32 data = 0; + u16 remaining, i, j, prev_bytes; + + /* sum = only sum of the data and it is not checksum */ + + if (length == 0 || offset + length > E1000_HI_MAX_MNG_DATA_LENGTH) + return -E1000_ERR_PARAM; + + tmp = (u8 *)&data; + prev_bytes = offset & 0x3; + offset >>= 2; + + if (prev_bytes) { + data = E1000_READ_REG_ARRAY(hw, E1000_HOST_IF, offset); + for (j = prev_bytes; j < sizeof(u32); j++) { + *(tmp + j) = *bufptr++; + *sum += *(tmp + j); + } + E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset, data); + length -= j - prev_bytes; + offset++; + } + + remaining = length & 0x3; + length -= remaining; + + /* Calculate length in DWORDs */ + length >>= 2; + + /* + * The device driver writes the relevant command block into the + * ram area. + */ + for (i = 0; i < length; i++) { + for (j = 0; j < sizeof(u32); j++) { + *(tmp + j) = *bufptr++; + *sum += *(tmp + j); + } + + E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset + i, data); + } + if (remaining) { + for (j = 0; j < sizeof(u32); j++) { + if (j < remaining) + *(tmp + j) = *bufptr++; + else + *(tmp + j) = 0; + + *sum += *(tmp + j); + } + E1000_WRITE_REG_ARRAY(hw, E1000_HOST_IF, offset + i, data); + } + + return 0; +} + +/** + * e1000e_mng_write_dhcp_info - Writes DHCP info to host interface + * @hw: pointer to the HW structure + * @buffer: pointer to the host interface + * @length: size of the buffer + * + * Writes the DHCP information to the host interface. + **/ +s32 e1000e_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length) +{ + struct e1000_host_mng_command_header hdr; + s32 ret_val; + u32 hicr; + + hdr.command_id = E1000_MNG_DHCP_TX_PAYLOAD_CMD; + hdr.command_length = length; + hdr.reserved1 = 0; + hdr.reserved2 = 0; + hdr.checksum = 0; + + /* Enable the host interface */ + ret_val = e1000_mng_enable_host_if(hw); + if (ret_val) + return ret_val; + + /* Populate the host interface with the contents of "buffer". */ + ret_val = e1000_mng_host_if_write(hw, buffer, length, + sizeof(hdr), &(hdr.checksum)); + if (ret_val) + return ret_val; + + /* Write the manageability command header */ + ret_val = e1000_mng_write_cmd_header(hw, &hdr); + if (ret_val) + return ret_val; + + /* Tell the ARC a new command is pending. */ + hicr = er32(HICR); + ew32(HICR, hicr | E1000_HICR_C); + + return 0; +} + +/** + * e1000e_enable_mng_pass_thru - Check if management passthrough is needed + * @hw: pointer to the HW structure + * + * Verifies the hardware needs to leave interface enabled so that frames can + * be directed to and from the management interface. + **/ +bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw) +{ + u32 manc; + u32 fwsm, factps; + bool ret_val = false; + + manc = er32(MANC); + + if (!(manc & E1000_MANC_RCV_TCO_EN)) + goto out; + + if (hw->mac.has_fwsm) { + fwsm = er32(FWSM); + factps = er32(FACTPS); + + if (!(factps & E1000_FACTPS_MNGCG) && + ((fwsm & E1000_FWSM_MODE_MASK) == + (e1000_mng_mode_pt << E1000_FWSM_MODE_SHIFT))) { + ret_val = true; + goto out; + } + } else if ((hw->mac.type == e1000_82574) || + (hw->mac.type == e1000_82583)) { + u16 data; + + factps = er32(FACTPS); + e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data); + + if (!(factps & E1000_FACTPS_MNGCG) && + ((data & E1000_NVM_INIT_CTRL2_MNGM) == + (e1000_mng_mode_pt << 13))) { + ret_val = true; + goto out; + } + } else if ((manc & E1000_MANC_SMBUS_EN) && + !(manc & E1000_MANC_ASF_EN)) { + ret_val = true; + goto out; + } + +out: + return ret_val; +} diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c new file mode 100644 index 0000000..dbdaa00 --- /dev/null +++ b/drivers/net/ethernet/intel/e1000e/nvm.c @@ -0,0 +1,647 @@ +/******************************************************************************* + + Intel PRO/1000 Linux driver + Copyright(c) 1999 - 2011 Intel Corporation. + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information: + Linux NICS <linux.nics@intel.com> + e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> + Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + +*******************************************************************************/ + +#include "e1000.h" + +/** + * e1000_raise_eec_clk - Raise EEPROM clock + * @hw: pointer to the HW structure + * @eecd: pointer to the EEPROM + * + * Enable/Raise the EEPROM clock bit. + **/ +static void e1000_raise_eec_clk(struct e1000_hw *hw, u32 *eecd) +{ + *eecd = *eecd | E1000_EECD_SK; + ew32(EECD, *eecd); + e1e_flush(); + udelay(hw->nvm.delay_usec); +} + +/** + * e1000_lower_eec_clk - Lower EEPROM clock + * @hw: pointer to the HW structure + * @eecd: pointer to the EEPROM + * + * Clear/Lower the EEPROM clock bit. + **/ +static void e1000_lower_eec_clk(struct e1000_hw *hw, u32 *eecd) +{ + *eecd = *eecd & ~E1000_EECD_SK; + ew32(EECD, *eecd); + e1e_flush(); + udelay(hw->nvm.delay_usec); +} + +/** + * e1000_shift_out_eec_bits - Shift data bits our to the EEPROM + * @hw: pointer to the HW structure + * @data: data to send to the EEPROM + * @count: number of bits to shift out + * + * We need to shift 'count' bits out to the EEPROM. So, the value in the + * "data" parameter will be shifted out to the EEPROM one bit at a time. + * In order to do this, "data" must be broken down into bits. + **/ +static void e1000_shift_out_eec_bits(struct e1000_hw *hw, u16 data, u16 count) +{ + struct e1000_nvm_info *nvm = &hw->nvm; + u32 eecd = er32(EECD); + u32 mask; + + mask = 0x01 << (count - 1); + if (nvm->type == e1000_nvm_eeprom_spi) + eecd |= E1000_EECD_DO; + + do { + eecd &= ~E1000_EECD_DI; + + if (data & mask) + eecd |= E1000_EECD_DI; + + ew32(EECD, eecd); + e1e_flush(); + + udelay(nvm->delay_usec); + + e1000_raise_eec_clk(hw, &eecd); + e1000_lower_eec_clk(hw, &eecd); + + mask >>= 1; + } while (mask); + + eecd &= ~E1000_EECD_DI; + ew32(EECD, eecd); +} + +/** + * e1000_shift_in_eec_bits - Shift data bits in from the EEPROM + * @hw: pointer to the HW structure + * @count: number of bits to shift in + * + * In order to read a register from the EEPROM, we need to shift 'count' bits + * in from the EEPROM. Bits are "shifted in" by raising the clock input to + * the EEPROM (setting the SK bit), and then reading the value of the data out + * "DO" bit. During this "shifting in" process the data in "DI" bit should + * always be clear. + **/ +static u16 e1000_shift_in_eec_bits(struct e1000_hw *hw, u16 count) +{ + u32 eecd; + u32 i; + u16 data; + + eecd = er32(EECD); + + eecd &= ~(E1000_EECD_DO | E1000_EECD_DI); + data = 0; + + for (i = 0; i < count; i++) { + data <<= 1; + e1000_raise_eec_clk(hw, &eecd); + + eecd = er32(EECD); + + eecd &= ~E1000_EECD_DI; + if (eecd & E1000_EECD_DO) + data |= 1; + + e1000_lower_eec_clk(hw, &eecd); + } + + return data; +} + +/** + * e1000e_poll_eerd_eewr_done - Poll for EEPROM read/write completion + * @hw: pointer to the HW structure + * @ee_reg: EEPROM flag for polling + * + * Polls the EEPROM status bit for either read or write completion based + * upon the value of 'ee_reg'. + **/ +s32 e1000e_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg) +{ + u32 attempts = 100000; + u32 i, reg = 0; + + for (i = 0; i < attempts; i++) { + if (ee_reg == E1000_NVM_POLL_READ) + reg = er32(EERD); + else + reg = er32(EEWR); + + if (reg & E1000_NVM_RW_REG_DONE) + return 0; + + udelay(5); + } + + return -E1000_ERR_NVM; +} + +/** + * e1000e_acquire_nvm - Generic request for access to EEPROM + * @hw: pointer to the HW structure + * + * Set the EEPROM access request bit and wait for EEPROM access grant bit. + * Return successful if access grant bit set, else clear the request for + * EEPROM access and return -E1000_ERR_NVM (-1). + **/ +s32 e1000e_acquire_nvm(struct e1000_hw *hw) +{ + u32 eecd = er32(EECD); + s32 timeout = E1000_NVM_GRANT_ATTEMPTS; + + ew32(EECD, eecd | E1000_EECD_REQ); + eecd = er32(EECD); + + while (timeout) { + if (eecd & E1000_EECD_GNT) + break; + udelay(5); + eecd = er32(EECD); + timeout--; + } + + if (!timeout) { + eecd &= ~E1000_EECD_REQ; + ew32(EECD, eecd); + e_dbg("Could not acquire NVM grant\n"); + return -E1000_ERR_NVM; + } + + return 0; +} + +/** + * e1000_standby_nvm - Return EEPROM to standby state + * @hw: pointer to the HW structure + * + * Return the EEPROM to a standby state. + **/ +static void e1000_standby_nvm(struct e1000_hw *hw) +{ + struct e1000_nvm_info *nvm = &hw->nvm; + u32 eecd = er32(EECD); + + if (nvm->type == e1000_nvm_eeprom_spi) { + /* Toggle CS to flush commands */ + eecd |= E1000_EECD_CS; + ew32(EECD, eecd); + e1e_flush(); + udelay(nvm->delay_usec); + eecd &= ~E1000_EECD_CS; + ew32(EECD, eecd); + e1e_flush(); + udelay(nvm->delay_usec); + } +} + +/** + * e1000_stop_nvm - Terminate EEPROM command + * @hw: pointer to the HW structure + * + * Terminates the current command by inverting the EEPROM's chip select pin. + **/ +static void e1000_stop_nvm(struct e1000_hw *hw) +{ + u32 eecd; + + eecd = er32(EECD); + if (hw->nvm.type == e1000_nvm_eeprom_spi) { + /* Pull CS high */ + eecd |= E1000_EECD_CS; + e1000_lower_eec_clk(hw, &eecd); + } +} + +/** + * e1000e_release_nvm - Release exclusive access to EEPROM + * @hw: pointer to the HW structure + * + * Stop any current commands to the EEPROM and clear the EEPROM request bit. + **/ +void e1000e_release_nvm(struct e1000_hw *hw) +{ + u32 eecd; + + e1000_stop_nvm(hw); + + eecd = er32(EECD); + eecd &= ~E1000_EECD_REQ; + ew32(EECD, eecd); +} + +/** + * e1000_ready_nvm_eeprom - Prepares EEPROM for read/write + * @hw: pointer to the HW structure + * + * Setups the EEPROM for reading and writing. + **/ +static s32 e1000_ready_nvm_eeprom(struct e1000_hw *hw) +{ + struct e1000_nvm_info *nvm = &hw->nvm; + u32 eecd = er32(EECD); + u8 spi_stat_reg; + + if (nvm->type == e1000_nvm_eeprom_spi) { + u16 timeout = NVM_MAX_RETRY_SPI; + + /* Clear SK and CS */ + eecd &= ~(E1000_EECD_CS | E1000_EECD_SK); + ew32(EECD, eecd); + e1e_flush(); + udelay(1); + + /* + * Read "Status Register" repeatedly until the LSB is cleared. + * The EEPROM will signal that the command has been completed + * by clearing bit 0 of the internal status register. If it's + * not cleared within 'timeout', then error out. + */ + while (timeout) { + e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI, + hw->nvm.opcode_bits); + spi_stat_reg = (u8)e1000_shift_in_eec_bits(hw, 8); + if (!(spi_stat_reg & NVM_STATUS_RDY_SPI)) + break; + + udelay(5); + e1000_standby_nvm(hw); + timeout--; + } + + if (!timeout) { + e_dbg("SPI NVM Status error\n"); + return -E1000_ERR_NVM; + } + } + + return 0; +} + +/** + * e1000e_read_nvm_eerd - Reads EEPROM using EERD register + * @hw: pointer to the HW structure + * @offset: offset of word in the EEPROM to read + * @words: number of words to read + * @data: word read from the EEPROM + * + * Reads a 16 bit word from the EEPROM using the EERD register. + **/ +s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) +{ + struct e1000_nvm_info *nvm = &hw->nvm; + u32 i, eerd = 0; + s32 ret_val = 0; + + /* + * A check for invalid values: offset too large, too many words, + * too many words for the offset, and not enough words. + */ + if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || + (words == 0)) { + e_dbg("nvm parameter(s) out of bounds\n"); + return -E1000_ERR_NVM; + } + + for (i = 0; i < words; i++) { + eerd = ((offset + i) << E1000_NVM_RW_ADDR_SHIFT) + + E1000_NVM_RW_REG_START; + + ew32(EERD, eerd); + ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_READ); + if (ret_val) + break; + + data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA); + } + + return ret_val; +} + +/** + * e1000e_write_nvm_spi - Write to EEPROM using SPI + * @hw: pointer to the HW structure + * @offset: offset within the EEPROM to be written to + * @words: number of words to write + * @data: 16 bit word(s) to be written to the EEPROM + * + * Writes data to EEPROM at offset using SPI interface. + * + * If e1000e_update_nvm_checksum is not called after this function , the + * EEPROM will most likely contain an invalid checksum. + **/ +s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) +{ + struct e1000_nvm_info *nvm = &hw->nvm; + s32 ret_val; + u16 widx = 0; + + /* + * A check for invalid values: offset too large, too many words, + * and not enough words. + */ + if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || + (words == 0)) { + e_dbg("nvm parameter(s) out of bounds\n"); + return -E1000_ERR_NVM; + } + + ret_val = nvm->ops.acquire(hw); + if (ret_val) + return ret_val; + + while (widx < words) { + u8 write_opcode = NVM_WRITE_OPCODE_SPI; + + ret_val = e1000_ready_nvm_eeprom(hw); + if (ret_val) { + nvm->ops.release(hw); + return ret_val; + } + + e1000_standby_nvm(hw); + + /* Send the WRITE ENABLE command (8 bit opcode) */ + e1000_shift_out_eec_bits(hw, NVM_WREN_OPCODE_SPI, + nvm->opcode_bits); + + e1000_standby_nvm(hw); + + /* + * Some SPI eeproms use the 8th address bit embedded in the + * opcode + */ + if ((nvm->address_bits == 8) && (offset >= 128)) + write_opcode |= NVM_A8_OPCODE_SPI; + + /* Send the Write command (8-bit opcode + addr) */ + e1000_shift_out_eec_bits(hw, write_opcode, nvm->opcode_bits); + e1000_shift_out_eec_bits(hw, (u16)((offset + widx) * 2), + nvm->address_bits); + + /* Loop to allow for up to whole page write of eeprom */ + while (widx < words) { + u16 word_out = data[widx]; + word_out = (word_out >> 8) | (word_out << 8); + e1000_shift_out_eec_bits(hw, word_out, 16); + widx++; + + if ((((offset + widx) * 2) % nvm->page_size) == 0) { + e1000_standby_nvm(hw); + break; + } + } + } + + usleep_range(10000, 20000); + nvm->ops.release(hw); + return 0; +} + +/** + * e1000_read_pba_string_generic - Read device part number + * @hw: pointer to the HW structure + * @pba_num: pointer to device part number + * @pba_num_size: size of part number buffer + * + * Reads the product board assembly (PBA) number from the EEPROM and stores + * the value in pba_num. + **/ +s32 e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num, + u32 pba_num_size) +{ + s32 ret_val; + u16 nvm_data; + u16 pba_ptr; + u16 offset; + u16 length; + + if (pba_num == NULL) { + e_dbg("PBA string buffer was null\n"); + ret_val = E1000_ERR_INVALID_ARGUMENT; + goto out; + } + + ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_0, 1, &nvm_data); + if (ret_val) { + e_dbg("NVM Read Error\n"); + goto out; + } + + ret_val = e1000_read_nvm(hw, NVM_PBA_OFFSET_1, 1, &pba_ptr); + if (ret_val) { + e_dbg("NVM Read Error\n"); + goto out; + } + + /* + * if nvm_data is not ptr guard the PBA must be in legacy format which + * means pba_ptr is actually our second data word for the PBA number + * and we can decode it into an ascii string + */ + if (nvm_data != NVM_PBA_PTR_GUARD) { + e_dbg("NVM PBA number is not stored as string\n"); + + /* we will need 11 characters to store the PBA */ + if (pba_num_size < 11) { + e_dbg("PBA string buffer too small\n"); + return E1000_ERR_NO_SPACE; + } + + /* extract hex string from data and pba_ptr */ + pba_num[0] = (nvm_data >> 12) & 0xF; + pba_num[1] = (nvm_data >> 8) & 0xF; + pba_num[2] = (nvm_data >> 4) & 0xF; + pba_num[3] = nvm_data & 0xF; + pba_num[4] = (pba_ptr >> 12) & 0xF; + pba_num[5] = (pba_ptr >> 8) & 0xF; + pba_num[6] = '-'; + pba_num[7] = 0; + pba_num[8] = (pba_ptr >> 4) & 0xF; + pba_num[9] = pba_ptr & 0xF; + + /* put a null character on the end of our string */ + pba_num[10] = '\0'; + + /* switch all the data but the '-' to hex char */ + for (offset = 0; offset < 10; offset++) { + if (pba_num[offset] < 0xA) + pba_num[offset] += '0'; + else if (pba_num[offset] < 0x10) + pba_num[offset] += 'A' - 0xA; + } + + goto out; + } + + ret_val = e1000_read_nvm(hw, pba_ptr, 1, &length); + if (ret_val) { + e_dbg("NVM Read Error\n"); + goto out; + } + + if (length == 0xFFFF || length == 0) { + e_dbg("NVM PBA number section invalid length\n"); + ret_val = E1000_ERR_NVM_PBA_SECTION; + goto out; + } + /* check if pba_num buffer is big enough */ + if (pba_num_size < (((u32)length * 2) - 1)) { + e_dbg("PBA string buffer too small\n"); + ret_val = E1000_ERR_NO_SPACE; + goto out; + } + + /* trim pba length from start of string */ + pba_ptr++; + length--; + + for (offset = 0; offset < length; offset++) { + ret_val = e1000_read_nvm(hw, pba_ptr + offset, 1, &nvm_data); + if (ret_val) { + e_dbg("NVM Read Error\n"); + goto out; + } + pba_num[offset * 2] = (u8)(nvm_data >> 8); + pba_num[(offset * 2) + 1] = (u8)(nvm_data & 0xFF); + } + pba_num[offset * 2] = '\0'; + +out: + return ret_val; +} + +/** + * e1000_read_mac_addr_generic - Read device MAC address + * @hw: pointer to the HW structure + * + * Reads the device MAC address from the EEPROM and stores the value. + * Since devices with two ports use the same EEPROM, we increment the + * last bit in the MAC address for the second port. + **/ +s32 e1000_read_mac_addr_generic(struct e1000_hw *hw) +{ + u32 rar_high; + u32 rar_low; + u16 i; + + rar_high = er32(RAH(0)); + rar_low = er32(RAL(0)); + + for (i = 0; i < E1000_RAL_MAC_ADDR_LEN; i++) + hw->mac.perm_addr[i] = (u8)(rar_low >> (i * 8)); + + for (i = 0; i < E1000_RAH_MAC_ADDR_LEN; i++) + hw->mac.perm_addr[i + 4] = (u8)(rar_high >> (i * 8)); + + for (i = 0; i < ETH_ALEN; i++) + hw->mac.addr[i] = hw->mac.perm_addr[i]; + + return 0; +} + +/** + * e1000e_validate_nvm_checksum_generic - Validate EEPROM checksum + * @hw: pointer to the HW structure + * + * Calculates the EEPROM checksum by reading/adding each word of the EEPROM + * and then verifies that the sum of the EEPROM is equal to 0xBABA. + **/ +s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw) +{ + s32 ret_val; + u16 checksum = 0; + u16 i, nvm_data; + + for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) { + ret_val = e1000_read_nvm(hw, i, 1, &nvm_data); + if (ret_val) { + e_dbg("NVM Read Error\n"); + return ret_val; + } + checksum += nvm_data; + } + + if (checksum != (u16)NVM_SUM) { + e_dbg("NVM Checksum Invalid\n"); + return -E1000_ERR_NVM; + } + + return 0; +} + +/** + * e1000e_update_nvm_checksum_generic - Update EEPROM checksum + * @hw: pointer to the HW structure + * + * Updates the EEPROM checksum by reading/adding each word of the EEPROM + * up to the checksum. Then calculates the EEPROM checksum and writes the + * value to the EEPROM. + **/ +s32 e1000e_update_nvm_checksum_generic(struct e1000_hw *hw) +{ + s32 ret_val; + u16 checksum = 0; + u16 i, nvm_data; + + for (i = 0; i < NVM_CHECKSUM_REG; i++) { + ret_val = e1000_read_nvm(hw, i, 1, &nvm_data); + if (ret_val) { + e_dbg("NVM Read Error while updating checksum.\n"); + return ret_val; + } + checksum += nvm_data; + } + checksum = (u16)NVM_SUM - checksum; + ret_val = e1000_write_nvm(hw, NVM_CHECKSUM_REG, 1, &checksum); + if (ret_val) + e_dbg("NVM Write Error while updating checksum.\n"); + + return ret_val; +} + +/** + * e1000e_reload_nvm - Reloads EEPROM + * @hw: pointer to the HW structure + * + * Reloads the EEPROM by setting the "Reinitialize from EEPROM" bit in the + * extended control register. + **/ +void e1000e_reload_nvm(struct e1000_hw *hw) +{ + u32 ctrl_ext; + + udelay(10); + ctrl_ext = er32(CTRL_EXT); + ctrl_ext |= E1000_CTRL_EXT_EE_RST; + ew32(CTRL_EXT, ctrl_ext); + e1e_flush(); +} -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* [net-next 11/11] e1000e: update copyright year 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (9 preceding siblings ...) 2012-01-27 3:08 ` [net-next 10/11] e1000e: split lib.c into three more-appropriate files Jeff Kirsher @ 2012-01-27 3:08 ` Jeff Kirsher 2012-01-28 1:47 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates David Miller 11 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-27 3:08 UTC (permalink / raw) To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher From: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/80003es2lan.c | 2 +- drivers/net/ethernet/intel/e1000e/82571.c | 2 +- drivers/net/ethernet/intel/e1000e/Makefile | 2 +- drivers/net/ethernet/intel/e1000e/defines.h | 2 +- drivers/net/ethernet/intel/e1000e/e1000.h | 2 +- drivers/net/ethernet/intel/e1000e/ethtool.c | 2 +- drivers/net/ethernet/intel/e1000e/hw.h | 2 +- drivers/net/ethernet/intel/e1000e/ich8lan.c | 2 +- drivers/net/ethernet/intel/e1000e/mac.c | 2 +- drivers/net/ethernet/intel/e1000e/manage.c | 2 +- drivers/net/ethernet/intel/e1000e/netdev.c | 4 ++-- drivers/net/ethernet/intel/e1000e/nvm.c | 2 +- drivers/net/ethernet/intel/e1000e/param.c | 2 +- drivers/net/ethernet/intel/e1000e/phy.c | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c index f323ce5..82a5d87 100644 --- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c +++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c index 0609ac6..844907d 100644 --- a/drivers/net/ethernet/intel/e1000e/82571.c +++ b/drivers/net/ethernet/intel/e1000e/82571.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/Makefile b/drivers/net/ethernet/intel/e1000e/Makefile index 8b888e5..591b713 100644 --- a/drivers/net/ethernet/intel/e1000e/Makefile +++ b/drivers/net/ethernet/intel/e1000e/Makefile @@ -1,7 +1,7 @@ ################################################################################ # # Intel PRO/1000 Linux driver -# Copyright(c) 1999 - 2011 Intel Corporation. +# Copyright(c) 1999 - 2012 Intel Corporation. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h index c73795f..1af30b9 100644 --- a/drivers/net/ethernet/intel/e1000e/defines.h +++ b/drivers/net/ethernet/intel/e1000e/defines.h @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h index 70bc9e9..45e5ae8 100644 --- a/drivers/net/ethernet/intel/e1000e/e1000.h +++ b/drivers/net/ethernet/intel/e1000e/e1000.h @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c index 1ea317f..92d5b62 100644 --- a/drivers/net/ethernet/intel/e1000e/ethtool.c +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h index a15da47..197059b 100644 --- a/drivers/net/ethernet/intel/e1000e/hw.h +++ b/drivers/net/ethernet/intel/e1000e/hw.h @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 070a90f..907b17b 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c index 64b6f43..e1cf107 100644 --- a/drivers/net/ethernet/intel/e1000e/mac.c +++ b/drivers/net/ethernet/intel/e1000e/mac.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/manage.c b/drivers/net/ethernet/intel/e1000e/manage.c index 3dae265..6594dbf 100644 --- a/drivers/net/ethernet/intel/e1000e/manage.c +++ b/drivers/net/ethernet/intel/e1000e/manage.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 210d27d..1a8dd2f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, @@ -6538,7 +6538,7 @@ static int __init e1000_init_module(void) int ret; pr_info("Intel(R) PRO/1000 Network Driver - %s\n", e1000e_driver_version); - pr_info("Copyright(c) 1999 - 2011 Intel Corporation.\n"); + pr_info("Copyright(c) 1999 - 2012 Intel Corporation.\n"); ret = pci_register_driver(&e1000_driver); return ret; diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c index dbdaa00..f6fb7a7 100644 --- a/drivers/net/ethernet/intel/e1000e/nvm.c +++ b/drivers/net/ethernet/intel/e1000e/nvm.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/param.c b/drivers/net/ethernet/intel/e1000e/param.c index 40664f5..9c6a56d 100644 --- a/drivers/net/ethernet/intel/e1000e/param.c +++ b/drivers/net/ethernet/intel/e1000e/param.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c index ed70d08..8dd2ff0 100644 --- a/drivers/net/ethernet/intel/e1000e/phy.c +++ b/drivers/net/ethernet/intel/e1000e/phy.c @@ -1,7 +1,7 @@ /******************************************************************************* Intel PRO/1000 Linux driver - Copyright(c) 1999 - 2011 Intel Corporation. + Copyright(c) 1999 - 2012 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher ` (10 preceding siblings ...) 2012-01-27 3:08 ` [net-next 11/11] e1000e: update copyright year Jeff Kirsher @ 2012-01-28 1:47 ` David Miller 11 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2012-01-28 1:47 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Thu, 26 Jan 2012 19:08:38 -0800 > The following series contains updates to e1000e only. This is the > second batch of e1000e patches and these changes contain > fixups/cleanups/conversions. Most notably is the split up of lib.c > into mac.c, manage.c and nvm.c. > > The following are changes since commit a7563f342db6490e66dbf2c8a50577a72a158c9a: > ipv6: Use ipv6_addr_any() > and are available in the git repository at: > git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Pulled, thanks Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2014-05-14 8:54 Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2014-05-14 8:54 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series contains updates to igb, igbvf, ixgbe, i40e and i40evf. Emil provides a ixgbe patch to fix the detection of SFP+ capable interfaces by identifying 82599 based NICs with no PHY type set as SFP capable which allows the driver to detect the SFP module when the interface is brought up. Jacob provides eight patches to cleanup the ixgbe driver to resolve various checkpatch.pl warnings/errors as well as minor coding style issues. Stephen Hemminger and I provide simple cleanups of void functions which had useless return statements at the end of the function which are not needed. The following are changes since commit 86b5d251d5ac4dda51a022b34cb29b4ce65a8cd5: sh_eth: replace devm_kzalloc() with devm_kmalloc_array() and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Emil Tantilov (1): ixgbe: fix detection of SFP+ capable interfaces Jacob Keller (8): ixgbe: clean up checkpatch warnings about CODE_INDENT and LEADING_SPACE ixgbe: fix function-like macro, remove semicolon ixgbe: fix checkpatch style of blank line after declaration ixgbe: fix several concatenated strings to single line ixgbe: add braces around else block ixgbe: don't check NULL for debugfs_remove_recursive ixgbe: add space between operands to & ixgbe: add /* fallthrough */ comment to case statements Jeff Kirsher (1): igb/ixgbe: remove return statements for void functions Stephen Hemminger (1): i40e,igb,ixgbe: remove usless return statements drivers/net/ethernet/intel/i40e/i40e_main.c | 4 - drivers/net/ethernet/intel/i40evf/i40evf_main.c | 4 - drivers/net/ethernet/intel/igb/e1000_nvm.c | 1 - drivers/net/ethernet/intel/igb/igb_main.c | 1 - drivers/net/ethernet/intel/igbvf/ethtool.c | 1 - drivers/net/ethernet/intel/ixgbe/ixgbe.h | 2 +- drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 62 ++++++++------- drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 85 ++++++++++---------- drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 45 +++++------ drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 16 ++-- drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c | 3 +- drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h | 24 +++--- drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 28 +++---- drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c | 3 +- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 90 ++++++++++------------ drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 4 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 8 +- drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c | 10 +-- drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 6 +- drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 68 ++++++++-------- drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | 32 ++++---- drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 4 +- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 60 +++++++-------- drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 15 ++-- 24 files changed, 275 insertions(+), 301 deletions(-) -- 1.9.0 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2013-10-29 12:02 Jeff Kirsher 2013-10-29 22:58 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2013-10-29 12:02 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series contains updates to vxlan, net, ixgbe, ixgbevf, and i40e. Joseph provides a single patch against vxlan which removes the burden from the NIC drivers to check if the vxlan driver is enabled in the kernel and also makes available the vxlan headrooms to the drivers. Jacob provides majority of the patches, with patches against net, ixgbe and ixgbevf. His net patch adds might_sleep() call to napi_disable so that every use of napi_disable during atomic context will be visible. Then Jacob provides a patch to fix qv_lock_napi call in ixgbe_napi_disable_all. The other ixgbe patches cleanup ixgbe_check_minimum_link function to correctly show that there are some minor loss of encoding, even though we don't calculate it and remove unnecessary duplication of PCIe bandwidth display. Lastly, Jacob provides 4 patches against ixgbevf to add ixgbevf_rx_skb in line with how ixgbe handles the variations on how packets can be received, adds support in order to track how many packets were cleaned during busy poll as part of the extended statistics. Wei Yongjun provides a fix for i40e to return -ENOMEN in the memory allocation error handling case instead of returning 0, as done elsewhere in this function. The following are changes since commit cdfb97bc010d9e9d994eb68f2cbac3a8ada26104: net, mc: fix the incorrect comments in two mc-related functions and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Don Skidmore (1): ixgbevf: Add zero_base handler to network statistics Jacob Keller (8): net: add might_sleep() call to napi_disable ixgbe: fix qv_lock_napi call in ixgbe_napi_disable_all ixgbe: show <2% for encoding loss on PCIe Gen3 ixgbe: remove unnecessary duplication of PCIe bandwidth display ixgbevf: add ixgbevf_rx_skb ixgbevf: have clean_rx_irq return total_rx_packets cleaned ixgbevf: implement CONFIG_NET_RX_BUSY_POLL ixgbevf: add BP_EXTENDED_STATS for CONFIG_NET_RX_BUSY_POLL Joseph Gasparakis (1): vxlan: Have the NIC drivers do less work for offloads Wei Yongjun (1): i40e: fix error return code in i40e_probe() drivers/net/ethernet/intel/i40e/i40e_main.c | 4 +- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 48 ++++++-- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 46 +++----- drivers/net/ethernet/intel/ixgbevf/ethtool.c | 98 +++++++++++----- drivers/net/ethernet/intel/ixgbevf/ixgbevf.h | 132 +++++++++++++++++++++- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 103 +++++++++++++++-- drivers/net/vxlan.c | 4 - include/linux/netdevice.h | 1 + include/net/vxlan.h | 11 ++ 9 files changed, 366 insertions(+), 81 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2013-10-29 12:02 Jeff Kirsher @ 2013-10-29 22:58 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2013-10-29 22:58 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Tue, 29 Oct 2013 05:02:20 -0700 > This series contains updates to vxlan, net, ixgbe, ixgbevf, and i40e. Pulled, thanks a lot Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2013-10-24 15:27 Jeff Kirsher 2013-10-26 4:30 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2013-10-24 15:27 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series contains updates to igb, igbvf, i40e, ixgbe and ixgbevf. Dan Carpenter provides a patch for igbvf to fix a bug found by a static checker. If the new MTU is very large, then "new_mtu + ETH_HLEN + ETH_FCS_LEN" can wrap and the check on the next line can underflow. Wei Yongjun provides 2 patches, the first against igbvf adds a missing iounmap() before the return from igbvf_probe(). The second against i40e, removes the include <linux/version.h> because it is not needed. Carolyn provides a patch for igb to fix a call to set the master/slave mode for all m88 generation 2 PHY's and removes the call for I210 devices which do not need it. Stefan Assmann provides a patch for igb to fix an issue which was broke by: commit fa44f2f185f7f9da19d331929bb1b56c1ccd1d93 Author: Greg Rose <gregory.v.rose@intel.com> Date: Thu Jan 17 01:03:06 2013 -0800 igb: Enable SR-IOV configuration via PCI sysfs interface which breaks the reloading of igb when VFs are assigned to a guest, in several ways. Jacob provides a patch for ixgbe and ixgbevf. First, against ixgbe, cleans up ixgbe_enumerate_functions to reduce code complexity. The second, against ixgbevf, adds support for ethtool's get_coalesce and set_coalesce command for the ixgbevf driver. Yijing Wang provides a patch for ixgbe to use pcie_capability_read_word() to simplify the code. Emil provides a ixgbe patch to fix an issue where the logic used to detect changes in rx-usecs was incorrect and was masked by the call to ixgbe_update_rsc(). Don provides 2 patches for ixgbevf. First creates a new function to set PSRTYPE. The second bumps the ixgbevf driver version. The following are changes since commit b45bd46decd947eaa3497699d450e0851d247534: Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Carolyn Wyborny (1): igb: Fix master/slave mode for all m88 i354 PHY's Dan Carpenter (1): igbvf: integer wrapping bug setting the mtu Don Skidmore (2): ixgbevf: Adds function to set PSRTYPE register ixgbevf: bump driver version Emil Tantilov (1): ixgbe: fix rx-usecs range checks for BQL Jacob Keller (2): ixgbe: cleanup ixgbe_enumerate_functions ixgbevf: implement ethtool get/set coalesce Stefan Assmann (1): igb: fix driver reload with VF assigned to guest Wei Yongjun (2): igbvf: add missing iounmap() on error in igbvf_probe() i40e: remove unused including <linux/version.h> Yijing Wang (1): ixgbe: use pcie_capability_read_word() to simplify code drivers/net/ethernet/intel/i40e/i40e.h | 1 - drivers/net/ethernet/intel/igb/e1000_phy.c | 8 +-- drivers/net/ethernet/intel/igb/igb_main.c | 37 +++++------ drivers/net/ethernet/intel/igbvf/netdev.c | 8 +-- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 6 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 19 ++---- drivers/net/ethernet/intel/ixgbevf/ethtool.c | 81 +++++++++++++++++++++++ drivers/net/ethernet/intel/ixgbevf/ixgbevf.h | 2 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 22 ++++-- 9 files changed, 134 insertions(+), 50 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2013-10-24 15:27 Jeff Kirsher @ 2013-10-26 4:30 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2013-10-26 4:30 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Thu, 24 Oct 2013 08:27:27 -0700 > This series contains updates to igb, igbvf, i40e, ixgbe and ixgbevf. Pulled, thanks a lot Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2013-04-12 11:24 Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2013-04-12 11:24 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series contains updates to ixgbe only. My previous pull request had a mix of ixgbe and igb patches, and while Akeem works on the changes requested on the igb patches, I going ahead and re-submitting the originally submitted ixgbe patches with several other ixgbe patches. Alex provides a performance improvement with the enabling the use of build_skb for instances where jumbo frames are disabled. In addition, Alex provides a fix where we were incorrectly checking the entire frag_off field when we only wanted the fragment offset. Lastly, he cleans up the check for PAGE_SIZE, since the default configuration allocates 32K for all buffers. Emil provides a change to the calculation of eerd so that it is consistent between the read and write functions by using | instead of +. Jacob adds support for displaying PCIe Gen3 link speed, which was previously missing from the ixgbe driver. He also provides a patch to clean up ixgbe_get_bus_info_generic to call some conversion functions, which are used also in another patch provided by Jacob. Jacob modifies the driver to enable certain devices (which have an internal switch) to read from the physical slot rather than reading data from the internal switch. Lastly, Jacob adds a function which enables the ixgbe driver to walk up the PCI bus for the device and query the PCI config space for the bus width at each point. Don provides a couple of fixes (which are more appropriate for net-next), one of which resolves an issue where ixgbe was only turning on the laser when the adapter was up which caused issues for those who wanted to access the MNG firmware while the port was in a down state. The other fix is for WoL when currently linked at 1G. Lastly Don bumps the driver version keep the in-kernel driver up to date with the current functionality. The following are changes since commit 6c6779856a294649dbb468ef46e893e80b0d72ad: Revert "netprio_cgroup: make local table static" and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Alexander Duyck (3): ixgbe: Support using build_skb in the case that jumbo frames are disabled ixgbe: Mask off check of frag_off as we only want fragment offset ixgbe: Drop check for PAGE_SIZE from ixgbe_xmit_frame_ring Don Skidmore (3): ixgbe: fix MNG FW support when adapter not up ixgbe: Fix 1G link WoL ixgbe: bump version number Emil Tantilov (1): ixgbe: don't do arithmetic operations on bitmasks Jacob Keller (4): ixgbe: Enable support for recognizing PCI-e Gen3 link speed ixgbe: create conversion functions from link_status to bus/speed ixgbe: enable devices with internal switch to read pci parent ixgbe: walk pci-e bus to find minimum width drivers/net/ethernet/intel/ixgbe/ixgbe.h | 7 + drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 51 ++++- drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 63 +++--- drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 2 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 289 ++++++++++++++++++++---- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 13 ++ drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 1 + 8 files changed, 343 insertions(+), 84 deletions(-) -- 1.7.11.7 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2012-11-13 14:03 Jeff Kirsher 2012-11-13 19:19 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2012-11-13 14:03 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series contains updates to ixgbe, ixgbevf and igb. The following are changes since commit 9fafd65ad407d4e0c96919a325f568dd95d032af: ipv6 ndisc: Use pre-defined in6addr_linklocal_allnodes. and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Akeem G. Abodunrin (2): igb: Support for modifying UDP RSS flow hashing igb: Ethtool support to enable and disable EEE Alexander Duyck (4): ixgbe: Do not use DCA to prefetch the entire packet into the cache igb: Make TSO check for CHECKSUM_PARTIAL to avoid skb_is_gso check igb: Update igb Tx flags to improve code efficiency igb: Improve performance and reduce size of igb_tx_map Carolyn Wyborny (1): igb: Clear Go Link Disconnect for 82580 and later devices Emil Tantilov (1): ixgbevf: fix possible use of uninitialized variable Greg Rose (2): ixgbevf: Add flag to indicate when rx is in net poll ixgbevf: Reduce size of maximum rx buffer Jakub Kicinski (1): ixgbevf: make sure probe fails on MSI-X enable error drivers/net/ethernet/intel/igb/e1000_82575.c | 8 + drivers/net/ethernet/intel/igb/e1000_defines.h | 1 + drivers/net/ethernet/intel/igb/e1000_phy.h | 1 + drivers/net/ethernet/intel/igb/igb.h | 31 ++- drivers/net/ethernet/intel/igb/igb_ethtool.c | 281 ++++++++++++++++++++++ drivers/net/ethernet/intel/igb/igb_main.c | 124 +++++----- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 - drivers/net/ethernet/intel/ixgbevf/ixgbevf.h | 9 +- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 54 +++-- 9 files changed, 412 insertions(+), 98 deletions(-) -- 1.7.11.7 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2012-11-13 14:03 Jeff Kirsher @ 2012-11-13 19:19 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2012-11-13 19:19 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Tue, 13 Nov 2012 06:03:14 -0800 > This series contains updates to ixgbe, ixgbevf and igb. > > The following are changes since commit 9fafd65ad407d4e0c96919a325f568dd95d032af: > ipv6 ndisc: Use pre-defined in6addr_linklocal_allnodes. > and are available in the git repository at: > git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Pulled, but I have some long term feedback to give on one of the patches, thanks. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2012-02-25 5:49 Jeff Kirsher 2012-02-26 1:31 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2012-02-25 5:49 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann This series of patches contains cleanups of the e1000e driver. The following are changes since commit 5d74f1757001f5b9a7739c2a9053435e16ce516b: Staging: wlags49_h2: print MAC via printk format specifier and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Bruce Allan (11): e1000e: cleanup: rename e1000e_id_led_init() and call as function pointer e1000e: cleanup: rename e1000e_setup_link() and call as function pointer e1000e: cleanup use of check_mng_mode function pointer e1000e: cleanup use of check_reset_block function pointer e1000e: cleanup calls to setup_physical_interface function pointer e1000e: comment correction in e1000e_set_kmrn_lock_loss_workaround_ich8lan e1000e: rename e1000e_config_collision_dist() and call as function pointer e1000e: cleanup comment in e1000_hash_mc_addr() e1000e: use true/false for boolean send_xon, do not assume always true e1000e: cleanup - remove unnecessary variable e1000e: rename e1000e_reload_nvm() and call as function pointer drivers/net/ethernet/intel/e1000e/80003es2lan.c | 12 +++++--- drivers/net/ethernet/intel/e1000e/82571.c | 10 ++++--- drivers/net/ethernet/intel/e1000e/e1000.h | 18 +++---------- drivers/net/ethernet/intel/e1000e/ethtool.c | 6 +++- drivers/net/ethernet/intel/e1000e/hw.h | 2 + drivers/net/ethernet/intel/e1000e/ich8lan.c | 32 ++++++++++++---------- drivers/net/ethernet/intel/e1000e/mac.c | 31 ++++++++++----------- drivers/net/ethernet/intel/e1000e/manage.c | 4 +- drivers/net/ethernet/intel/e1000e/netdev.c | 8 +++--- drivers/net/ethernet/intel/e1000e/nvm.c | 4 +- drivers/net/ethernet/intel/e1000e/phy.c | 6 ++-- 11 files changed, 66 insertions(+), 67 deletions(-) -- 1.7.7.6 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2012-02-25 5:49 Jeff Kirsher @ 2012-02-26 1:31 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2012-02-26 1:31 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Fri, 24 Feb 2012 21:49:49 -0800 > This series of patches contains cleanups of the e1000e driver. > > The following are changes since commit 5d74f1757001f5b9a7739c2a9053435e16ce516b: > Staging: wlags49_h2: print MAC via printk format specifier > and are available in the git repository at: > git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Pulled, thanks Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2012-02-07 12:33 Jeff Kirsher 2012-02-07 17:27 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann The following series contains updates to e1000, igbvf and e1000e. Majority of the updates are to e1000e and do the following: - cleanup 82571 and 80003es2lan code - fix checkpatch and sparse warnings - fix whitespace/indentation - add missing initializers The following are changes since commit 59d74026fa4b5df72a268f1e9578af500154ad07: Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Bruce Allan (9): e1000e: add missing initializers reported when compiling with W=1 e1000e: cleanup - check return values consistently e1000e: cleanup e1000_init_mac_params_80003es2lan() e1000e: cleanup e1000_init_mac_params_82571() e1000e: cleanup e1000_set_phys_id e1000e: cleanup - use braces in both branches of a conditional statement e1000e: fix checkpatch warning from MINMAX test e1000e: fix sparse warnings with -D__CHECK_ENDIAN__ e1000e: minor whitespace and indentation cleanup Mitch A Williams (1): igbvf: refactor Interrupt Throttle Rate code Tushar Dave (1): e1000: Adding e1000_dump function drivers/net/ethernet/intel/e1000/e1000.h | 1 + drivers/net/ethernet/intel/e1000/e1000_hw.h | 10 + drivers/net/ethernet/intel/e1000/e1000_main.c | 224 +++++++++++++++++++++++ drivers/net/ethernet/intel/e1000e/80003es2lan.c | 28 +-- drivers/net/ethernet/intel/e1000e/82571.c | 72 +++----- drivers/net/ethernet/intel/e1000e/ethtool.c | 8 +- drivers/net/ethernet/intel/e1000e/ich8lan.c | 12 +- drivers/net/ethernet/intel/e1000e/netdev.c | 104 ++++++----- drivers/net/ethernet/intel/igbvf/ethtool.c | 19 +- drivers/net/ethernet/intel/igbvf/igbvf.h | 27 ++-- drivers/net/ethernet/intel/igbvf/netdev.c | 131 ++++++++------ 11 files changed, 438 insertions(+), 198 deletions(-) -- 1.7.7.6 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2012-02-07 12:33 Jeff Kirsher @ 2012-02-07 17:27 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2012-02-07 17:27 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Tue, 7 Feb 2012 04:33:47 -0800 > The following series contains updates to e1000, igbvf and e1000e. > Majority of the updates are to e1000e and do the following: > - cleanup 82571 and 80003es2lan code > - fix checkpatch and sparse warnings > - fix whitespace/indentation > - add missing initializers > > The following are changes since commit 59d74026fa4b5df72a268f1e9578af500154ad07: > Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next > and are available in the git repository at: > git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Pulled, thanks Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2012-01-03 19:19 Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2012-01-03 19:19 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann The following series contains updates to e1000, e1000e, igb and netdev/ixgbe. There are 2 fixes and the remaining patches are either add support or cleanup. Here is a list of the new support added: - igb adds support for byte queue limits and basic runtime PM - e1000e adds Receive Packet Steering (RPS) - FCoE adds ndo_get_fcoe_hbainfo() call The following are changes since commit fa0f5aa74316c636427ac92dad0bc5714c34ca17: net_sched: qdisc_alloc_handle() can be too slow and are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master Bruce Allan (5): e1000e: cleanup Rx checksum offload code e1000e: add Receive Packet Steering (RPS) support e1000e: re-enable alternate MAC address for all devices which support it e1000e: convert head, tail and itr_register offsets to __iomem pointers e1000e: pass pointer to ring struct instead of adapter struct Eric Dumazet (1): igb: Add support for byte queue limits. Jesse Brandeburg (1): e1000: fix lockdep splat in shutdown handler Koki Sanagi (1): igb: reset PHY after recovering from PHY power down Neerav Parikh (2): netdev: FCoE: Add new ndo_get_fcoe_hbainfo() call ixgbe: FCoE: Add support for ndo_get_fcoe_hbainfo() call Yan, Zheng (1): igb: add basic runtime PM support drivers/net/ethernet/intel/e1000/e1000_main.c | 8 +- drivers/net/ethernet/intel/e1000e/defines.h | 7 + drivers/net/ethernet/intel/e1000e/e1000.h | 27 +- drivers/net/ethernet/intel/e1000e/ethtool.c | 10 +- drivers/net/ethernet/intel/e1000e/hw.h | 9 +- drivers/net/ethernet/intel/e1000e/lib.c | 7 +- drivers/net/ethernet/intel/e1000e/netdev.c | 397 +++++++++++++++---------- drivers/net/ethernet/intel/igb/igb.h | 5 + drivers/net/ethernet/intel/igb/igb_ethtool.c | 16 + drivers/net/ethernet/intel/igb/igb_main.c | 142 ++++++++-- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 + drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 83 +++++ drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 5 +- include/linux/netdevice.h | 26 ++ 14 files changed, 541 insertions(+), 204 deletions(-) -- 1.7.7.4 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2011-10-08 6:47 Jeff Kirsher 2011-10-08 6:52 ` Jeff Kirsher 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2011-10-08 6:47 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann The following series contains updates to igb only. They are a continuation of the cleanups and refactoring that Alex has done. After this series there are 4-5 more patches to complete the work that Alex has done on igb. The following are changes since commit 1d0861acfb24d0ca0661ff5a156b992b2c589458: Add ethtool -g support to 8139cp and are available in the git repository at git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git or git://github.com/Jkirsher/net-next.git Alexander Duyck (11): igb: push data into first igb_tx_buffer sooner to reduce stack usage igb: Use node specific allocations for the q_vectors and rings igb: avoid unnecessary conversions from u16 to int igb: Consolidate all of the ring feature flags into a single value igb: Move ITR related data into work container within the q_vector igb: cleanup IVAR configuration igb: retire the RX_CSUM flag and use the netdev flag instead igb: leave staterr in place and instead us a helper function to check bits igb: fix recent VLAN changes that would leave VLANs disabled after reset igb: move TX hang check flag into ring->flags igb: add support for NETIF_F_RXHASH drivers/net/ethernet/intel/igb/e1000_defines.h | 3 + drivers/net/ethernet/intel/igb/igb.h | 53 ++- drivers/net/ethernet/intel/igb/igb_ethtool.c | 14 +- drivers/net/ethernet/intel/igb/igb_main.c | 675 +++++++++++++----------- 4 files changed, 411 insertions(+), 334 deletions(-) -- 1.7.6.4 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2011-10-08 6:47 Jeff Kirsher @ 2011-10-08 6:52 ` Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2011-10-08 6:52 UTC (permalink / raw) To: davem; +Cc: netdev, gospo, sassmann [-- Attachment #1: Type: text/plain, Size: 715 bytes --] On Fri, 2011-10-07 at 23:47 -0700, Kirsher, Jeffrey T wrote: > The following series contains updates to igb only. They are a > continuation of the cleanups and refactoring that Alex has done. > After this series there are 4-5 more patches to complete the work > that Alex has done on igb. > > The following are changes since commit > 1d0861acfb24d0ca0661ff5a156b992b2c589458: > Add ethtool -g support to 8139cp > and are available in the git repository at > git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git > or > git://github.com/Jkirsher/net-next.git Even though I have my kernel.org tree back up and running, I will keep the github tree's updated (at least for now). [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2011-09-30 5:24 Jeff Kirsher 2011-09-30 18:35 ` Jeff Kirsher 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2011-09-30 5:24 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo The following series contains updates to e1000e and ixgbe. The one patch for e1000e makes function tables const, thanks to Stephen Hemminger for reporting this. The remaining patches are for ixgbe, and the contain the following: - minor cleanups - add support for 82599 device and ethtool -E support - removal of a PHY which is not used in production silicon The following are changes since commit 56fd49e399ce1d82200fad5b8924d4e35a587809: bna: Driver Version changed to 3.0.2.2 and are available in the git repository at git://github.com/Jkirsher/net-next.git Emil Tantilov (8): ixgbe: prevent link checks while resetting ixgbe: clear the data field in ixgbe_read_i2c_byte_generic ixgbe: remove return code for functions that always return 0 ixgbe: add support for new 82599 device ixgbe: send MFLCN to ethtool ixgbe: do not disable flow control in ixgbe_check_mac_link ixgbe: remove instances of ixgbe_phy_aq for 82598 and 82599 ixgbe: allow eeprom writes via ethtool Jacob Keller (1): ixgbe: fix driver version initialization in firmware Jeff Kirsher (1): e1000e: make function tables const Mika Lansirinne (1): ixgbe: get pauseparam autoneg drivers/net/ethernet/intel/e1000e/80003es2lan.c | 8 +- drivers/net/ethernet/intel/e1000e/82571.c | 20 +++--- drivers/net/ethernet/intel/e1000e/e1000.h | 28 ++++---- drivers/net/ethernet/intel/e1000e/ich8lan.c | 16 +++--- drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 8 +-- drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 7 +-- drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 6 -- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 74 +++++++++++++++++++--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 12 +++- drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 33 +++------- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 1 + 12 files changed, 125 insertions(+), 89 deletions(-) -- 1.7.6.2 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2011-09-30 5:24 Jeff Kirsher @ 2011-09-30 18:35 ` Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2011-09-30 18:35 UTC (permalink / raw) To: davem; +Cc: netdev, gospo [-- Attachment #1: Type: text/plain, Size: 2427 bytes --] On Thu, 2011-09-29 at 22:24 -0700, Kirsher, Jeffrey T wrote: > The following series contains updates to e1000e and ixgbe. The one > patch for e1000e makes function tables const, thanks to Stephen > Hemminger for reporting this. The remaining patches are for ixgbe, > and the contain the following: > > - minor cleanups > - add support for 82599 device and ethtool -E support > - removal of a PHY which is not used in production silicon > > The following are changes since commit 56fd49e399ce1d82200fad5b8924d4e35a587809: > bna: Driver Version changed to 3.0.2.2 > and are available in the git repository at > git://github.com/Jkirsher/net-next.git > > Emil Tantilov (8): > ixgbe: prevent link checks while resetting > ixgbe: clear the data field in ixgbe_read_i2c_byte_generic > ixgbe: remove return code for functions that always return 0 > ixgbe: add support for new 82599 device > ixgbe: send MFLCN to ethtool > ixgbe: do not disable flow control in ixgbe_check_mac_link > ixgbe: remove instances of ixgbe_phy_aq for 82598 and 82599 > ixgbe: allow eeprom writes via ethtool > > Jacob Keller (1): > ixgbe: fix driver version initialization in firmware > > Jeff Kirsher (1): > e1000e: make function tables const > > Mika Lansirinne (1): > ixgbe: get pauseparam autoneg > > drivers/net/ethernet/intel/e1000e/80003es2lan.c | 8 +- > drivers/net/ethernet/intel/e1000e/82571.c | 20 +++--- > drivers/net/ethernet/intel/e1000e/e1000.h | 28 ++++---- > drivers/net/ethernet/intel/e1000e/ich8lan.c | 16 +++--- > drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 8 +-- > drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 7 +-- > drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 6 -- > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 74 +++++++++++++++++++--- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 12 +++- > drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 33 +++------- > drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 1 + > drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 1 + > 12 files changed, 125 insertions(+), 89 deletions(-) > Currently there is only 1 small change that needs to be made to patch 11 of the series, based on Ben's comments. I will wait a bit longer before fixing up patch 11, to ensure that there are no other changes needed. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 490 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2011-09-17 2:15 Jeff Kirsher 0 siblings, 0 replies; 33+ messages in thread From: Jeff Kirsher @ 2011-09-17 2:15 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo The following series contains updates to ixgb and ixgbe. The ixgb patch does the conversion to ndo_fix_features. The remaining patches are for ixgbe to do the following: - cleanup register reads, comments, memory allocations - add SFP support for 82598 PHY and overheat sensor code - fix register dump for X50 The following are changes since commit f78a5fda9116525809d088917638be912b85f838: Revert "Scm: Remove unnecessary pid & credential references in Unix socket's send and receive path" and are available in the git repository at: git://github.com/Jkirsher/net-next.git Alexander Duyck (7): ixgbe: remove redundant configuration of tx_sample_rate v2 ixgbe: Update packet buffer reservation to correct fdir headroom size ixgbe: make ixgbe_up and ixgbe_up_complete void functions ixgbe: Add missing code for enabling overheat sensor interrupt ixgbe: Add SFP support for missed 82598 PHY ixgbe: drop adapter from ixgbe_fso call documentation ixgbe: Make better use of memory allocations in one-buffer mode w/ RSC Emil Tantilov (3): ixgbe: cleanup some register reads ixgbe: fix FCRTL/H register dump for X540 ixgbe: remove duplicate netif_tx_start_all_queues Michał Mirosław (1): ixgb: convert to ndo_fix_features drivers/net/ethernet/intel/ixgb/ixgb.h | 2 + drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c | 59 +---------- drivers/net/ethernet/intel/ixgb/ixgb_main.c | 31 +++++- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 13 ++- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 3 +- drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 1 - drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 126 ++++++++++++---------- 7 files changed, 112 insertions(+), 123 deletions(-) -- 1.7.6 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates @ 2011-09-16 4:42 Jeff Kirsher 2011-09-16 19:20 ` David Miller 0 siblings, 1 reply; 33+ messages in thread From: Jeff Kirsher @ 2011-09-16 4:42 UTC (permalink / raw) To: davem; +Cc: Jeff Kirsher, netdev, gospo The following series contains updates to ixgbe only. These are primarily cleanups of the ixgbe driver. The first two patches of the series: ixgbe: Change default Tx work limit size to 256 buffers ixgbe: consolidate all MSI-X ring interrupts and poll routines into one are re-worked based on previous community feedback (Dave and Ben). The following are changes since commit 4bc71cb983fd2844e603bf633df2bb53385182d2: net: consolidate and fix ethtool_ops->get_settings calling and are available in the git repository at: git://github.com/Jkirsher/net-next.git Alexander Duyck (11): ixgbe: Change default Tx work limit size to 256 buffers v2 ixgbe: consolidate all MSI-X ring interrupts and poll routines into one ixgbe: cleanup allocation and freeing of IRQ affinity hint ixgbe: Use ring->dev instead of adapter->pdev->dev when updating DCA ixgbe: commonize ixgbe_map_rings_to_vectors to work for all interrupt types ixgbe: Drop unnecessary adapter->hw dereference in loopback test setup ixgbe: combine PCI_VDEVICE and board declaration to same line ixgbe: Update TXDCTL configuration to correctly handle WTHRESH ixgbe: cleanup reset paths ixgbe: cleanup configuration of EITRSEL and VF reset path ixgbe: Correctly name and handle MSI-X other interrupt drivers/net/ethernet/intel/ixgbe/ixgbe.h | 2 +- drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 13 +- drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 40 +- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 18 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 775 ++++++++-------------- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 72 +-- 7 files changed, 341 insertions(+), 580 deletions(-) -- 1.7.6 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates 2011-09-16 4:42 Jeff Kirsher @ 2011-09-16 19:20 ` David Miller 0 siblings, 0 replies; 33+ messages in thread From: David Miller @ 2011-09-16 19:20 UTC (permalink / raw) To: jeffrey.t.kirsher; +Cc: netdev, gospo From: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Date: Thu, 15 Sep 2011 21:42:42 -0700 > The following series contains updates to ixgbe only. These are primarily > cleanups of the ixgbe driver. The first two patches of the series: > > ixgbe: Change default Tx work limit size to 256 buffers > ixgbe: consolidate all MSI-X ring interrupts and poll routines into one > > are re-worked based on previous community feedback (Dave and Ben). > > The following are changes since commit 4bc71cb983fd2844e603bf633df2bb53385182d2: > net: consolidate and fix ethtool_ops->get_settings calling > and are available in the git repository at: > git://github.com/Jkirsher/net-next.git Pulled, thanks Jeff. ^ permalink raw reply [flat|nested] 33+ messages in thread
end of thread, other threads:[~2014-05-14 8:54 UTC | newest] Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-01-27 3:08 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher 2012-01-27 3:08 ` [net-next 01/11] e1000e: disable Early Receive DMA on ICH LOMs Jeff Kirsher 2012-01-27 3:08 ` [net-next 02/11] e1000e: update workaround for 82579 intermittently disabled during S0->Sx Jeff Kirsher 2012-01-27 3:08 ` [net-next 03/11] e1000e: ICHx/PCHx LOMs should use LPLU setting in NVM when going to Sx Jeff Kirsher 2012-01-27 3:08 ` [net-next 04/11] e1000e: increase Rx PBA to prevent dropping received packets on 82566/82567 Jeff Kirsher 2012-01-27 3:08 ` [net-next 05/11] e1000e: conditionally restart autoneg on 82577/8/9 when setting LPLU state Jeff Kirsher 2012-01-27 3:08 ` [net-next 06/11] e1000e: concatenate long debug strings which span multiple lines Jeff Kirsher 2012-01-27 3:08 ` [net-next 07/11] e1000e: convert final strncpy() to strlcpy() Jeff Kirsher 2012-01-27 3:08 ` [net-next 08/11] e1000e: increase version number Jeff Kirsher 2012-01-27 3:08 ` [net-next 09/11] e1000e: call er16flash() instead of __er16flash() Jeff Kirsher 2012-01-27 3:08 ` [net-next 10/11] e1000e: split lib.c into three more-appropriate files Jeff Kirsher 2012-01-27 3:08 ` [net-next 11/11] e1000e: update copyright year Jeff Kirsher 2012-01-28 1:47 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates David Miller -- strict thread matches above, loose matches on Subject: below -- 2014-05-14 8:54 Jeff Kirsher 2013-10-29 12:02 Jeff Kirsher 2013-10-29 22:58 ` David Miller 2013-10-24 15:27 Jeff Kirsher 2013-10-26 4:30 ` David Miller 2013-04-12 11:24 Jeff Kirsher 2012-11-13 14:03 Jeff Kirsher 2012-11-13 19:19 ` David Miller 2012-02-25 5:49 Jeff Kirsher 2012-02-26 1:31 ` David Miller 2012-02-07 12:33 Jeff Kirsher 2012-02-07 17:27 ` David Miller 2012-01-03 19:19 Jeff Kirsher 2011-10-08 6:47 Jeff Kirsher 2011-10-08 6:52 ` Jeff Kirsher 2011-09-30 5:24 Jeff Kirsher 2011-09-30 18:35 ` Jeff Kirsher 2011-09-17 2:15 Jeff Kirsher 2011-09-16 4:42 Jeff Kirsher 2011-09-16 19:20 ` 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).