e100, e1000, ixgb fixes
Subsystems (2)
cover e100, e1000, ixgb fixes
Hi,
Here are updates targeted to branch #upstream-fixes from netdev-2.6, including fixes to e100, e1000 and ixgb.
Summary:
---
Manasi Deval
ixgb: Add CX4 PHY type detection and subdevice ID.
Jesse Brandeburg
e1000: Explicitly power up the PHY during loopback testing.
e1000: Explicit locking for two ethtool path functions
ixgb: Fix cache miss due to miscalculation
Jeff Kirsher
e1000: Remove 0x1000 as supported device
e1000: Allow NVM to setup LPLU for IGP2 and IGP3
e1000: Force full DMA clocking for 10/100 speed
e1000: Disable aggressive clocking on esb2 with SERDES port
e100: Remove auto-MDIO/MDIO-X workaround
Auke Kok
e1000: Same ntohs/htons cosmetic fix as for ipv6
e1000: Increment driver version to 7.1.9-k6
e100: Increment version to 3.5.10-k4
ixgb: Increment version to 1.0.109-k4---
These changes are available through git.
git pull git://lost.foo-projects.org/~ahkok/git/netdev-2.6 upstream-fixes
these patches are against
netdev-2.6#upstream-fixes 09e590e5d5a93f2eaa748a89c623258e6bad1648
Cheers,
Auke
--- drivers/net/e100.c | 22 ++++++++------------ drivers/net/e1000/e1000_ethtool.c | 40 ++++++++++++++++++++++++++++---------- drivers/net/e1000/e1000_hw.c | 24 ++++++++++++++++++---- drivers/net/e1000/e1000_main.c | 9 ++------ drivers/net/ixgb/ixgb_hw.c | 11 ++++++++++ drivers/net/ixgb/ixgb_ids.h | 1 drivers/net/ixgb/ixgb_main.c | 14 ++++++------- 7 files changed, 80 insertions(+), 41 deletions(-)
--
Auke Kok <[email protected]>
PATCH 1/13 e100: Fix MDIO/MDIO-X
MDIO/MDIO-X was broken due to a wrong errata. Removing the workaround code fixes for affected NICs.
---
drivers/net/e100.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-)
drivers/net/e100.c +5 -9
@@ -1391,15 +1391,11 @@ static int e100_phy_init(struct nic *nic }if ((nic->mac >= mac_82550_D102) || ((nic->flags & ich) && - (mdio_read (netdev, nic->mii.phy_id,MII_TPISTATUS ) &0x8000 ))) { -/* enable/disable MDI/MDI-X auto-switching. -MDI/MDI-X auto-switching is disabled for 82551ER/QM chips */ -if ((nic->mac == mac_82551_E) || (nic->mac == mac_82551_F) || - (nic->mac == mac_82551_10) || (nic->mii.force_media) || - !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled)) -mdio_write (netdev, nic->mii.phy_id,MII_NCONFIG ,0 ); -else -mdio_write (netdev, nic->mii.phy_id,MII_NCONFIG ,NCONFIG_AUTO_SWITCH ); + (mdio_read (netdev, nic->mii.phy_id,MII_TPISTATUS ) &0x8000 ) && + !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) { +/* enable/disable MDI/MDI-X auto-switching. */ +mdio_write (netdev, nic->mii.phy_id,MII_NCONFIG , + nic->mii.force_media ?0 :NCONFIG_AUTO_SWITCH ); }return 0 ;
--
Auke Kok <[email protected]>
PATCH 2/13 e100: increment version to 3.5.10-k4
In reply to Kok, AukeIncrement the version of e100 to 3.5.10-k4, increment dates.
---
drivers/net/e100.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/net/e100.c +4 -4
@@ -1,7 +1,7 @@/******************************************************************************* -Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2006 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free
@@ -158,10 +158,10 @@#define DRV_NAME "e100" -#define DRV_EXT "-NAPI" -#define DRV_VERSION "3.5.10-k2"DRV_EXT +#define DRV_EXT "-NAPI" +#define DRV_VERSION "3.5.10-k4"DRV_EXT#define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver" -#define DRV_COPYRIGHT "Copyright(c) 1999-2005 Intel Corporation" +#define DRV_COPYRIGHT "Copyright(c) 1999-2006 Intel Corporation"#define PFX DRV_NAME ": "#define E100_WATCHDOG_PERIOD (2 * HZ)
--
Auke Kok <[email protected]>
PATCH 3/13 e1000: Same cosmetic fix as earlier sent out for IPV4.
In reply to Kok, Auke---
drivers/net/e1000/e1000_main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/e1000/e1000_main.c +1 -1
@@ -2545,7 +2545,7 @@ e1000_tso(struct e1000_adapter *adapter, cmd_length =E1000_TXD_CMD_IP ; ipcse = skb->h.raw - skb->data -1 ; #ifdef NETIF_F_TSO_IPV6 - }else if (skb->protocol ==ntohs (ETH_P_IPV6 )) { + }else if (skb->protocol ==htons (ETH_P_IPV6 )) { skb->nh.ipv6h->payload_len =0 ; skb->h.th->check = ~csum_ipv6_magic(&skb->nh.ipv6h->saddr,
--
Auke Kok <[email protected]>
PATCH 4/13 e1000: Remove 0x1000 as supported device
In reply to Kok, AukeRemove pci ID 8086:1000 from the list fo supported devices. This device has not functioned with the driver for very long (since v. 5.2.4!) and we lack the resources to come with a substantial fix. There are only few cards of this type out there.
---
drivers/net/e1000/e1000_main.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/net/e1000/e1000_main.c +0 -1
@@ -48,7 +48,6 @@ static char e1000_copyright[] = "Copyrig* {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)} */ static struct pci_device_id e1000_pci_tbl[] = { -INTEL_E1000_ETHERNET_DEVICE (0x1000 ),INTEL_E1000_ETHERNET_DEVICE (0x1001 ),INTEL_E1000_ETHERNET_DEVICE (0x1004 ),INTEL_E1000_ETHERNET_DEVICE (0x1008 ),
--
Auke Kok <[email protected]>
PATCH 5/13 e1000: Explicitly power up the PHY during loopback testing.
In reply to Kok, Auke---
drivers/net/e1000/e1000_ethtool.c | 7 +++++++ drivers/net/e1000/e1000_main.c | 2 +- 2 files changed, 8 insertions(+), 1 deletions(-)
drivers/net/e1000/e1000_ethtool.c +7 -0
@@ -1590,6 +1590,8 @@ e1000_diag_test_count(struct net_devicereturn E1000_TEST_LEN ; } +extern void e1000_power_up_phy (struct e1000_adapter *); +static void e1000_diag_test (struct net_device *netdev,struct ethtool_test *eth_test,uint64_t *data)
@@ -1606,6 +1608,8 @@ e1000_diag_test(struct net_device *netdeuint8_t forced_speed_duplex = adapter->hw.forced_speed_duplex;uint8_t autoneg = adapter->hw.autoneg; +DPRINTK (HW ,INFO ,"offline testing starting\n" ); +/* Link test performed before hardware reset so autoneg doesn't * interfere with test result */ if (e1000_link_test (adapter, &data[4 ]))
@@ -1629,6 +1633,8 @@ e1000_diag_test(struct net_device *netde eth_test->flags |=ETH_TEST_FL_FAILED ;e1000_reset (adapter); +/* make sure the phy is powered up */ +e1000_power_up_phy (adapter);if (e1000_loopback_test (adapter, &data[3 ])) eth_test->flags |=ETH_TEST_FL_FAILED ;
@@ -1642,6 +1648,7 @@ e1000_diag_test(struct net_device *netdeif (if_running)dev_open (netdev); }else { +DPRINTK (HW ,INFO ,"online testing starting\n" );/* Online tests */ if (e1000_link_test (adapter, &data[4 ])) eth_test->flags |=ETH_TEST_FL_FAILED ;
drivers/net/e1000/e1000_main.c +1 -1
@@ -484,7 +484,7 @@ e1000_up(struct e1000_adapter *adapter)* **/ -static void e1000_power_up_phy (struct e1000_adapter *adapter) +void e1000_power_up_phy (struct e1000_adapter *adapter) {uint16_t mii_reg =0 ;
--
Auke Kok <[email protected]>
PATCH 6/13 e1000: explicit locking for two ethtool path functions
In reply to Kok, AukeExplicitly lock two more ethtool entry points completely instead of the hardware reset only to prevent a race condition.
---
drivers/net/e1000/e1000_ethtool.c | 33 +++++++++++++++++++++++---------- 1 files changed, 23 insertions(+), 10 deletions(-)
drivers/net/e1000/e1000_ethtool.c +23 -10
@@ -183,6 +183,9 @@ e1000_set_settings(struct net_device *nereturn -EINVAL ; } +while (test_and_set_bit (__E1000_RESETTING, &adapter->flags)) +msleep (1 ); +if (ecmd->autoneg ==AUTONEG_ENABLE ) { hw->autoneg =1 ;if (hw->media_type == e1000_media_type_fiber)
@@ -199,16 +202,20 @@ e1000_set_settings(struct net_device *neADVERTISED_TP ; ecmd->advertising = hw->autoneg_advertised; }else -if (e1000_set_spd_dplx (adapter, ecmd->speed + ecmd->duplex)) +if (e1000_set_spd_dplx (adapter, ecmd->speed + ecmd->duplex)) { +clear_bit (__E1000_RESETTING, &adapter->flags);return -EINVAL ; + }/* reset the link */ -if (netif_running (adapter->netdev)) -e1000_reinit_locked (adapter); -else +if (netif_running (adapter->netdev)) { +e1000_down (adapter); +e1000_up (adapter); + }else e1000_reset (adapter); +clear_bit (__E1000_RESETTING, &adapter->flags);return 0 ; }
@@ -238,9 +245,13 @@ e1000_set_pauseparam(struct net_device * {struct e1000_adapter *adapter =netdev_priv (netdev);struct e1000_hw *hw = &adapter->hw; +int retval =0 ; adapter->fc_autoneg = pause->autoneg; +while (test_and_set_bit (__E1000_RESETTING, &adapter->flags)) +msleep (1 ); +if (pause->rx_pause && pause->tx_pause) hw->fc = e1000_fc_full;else if (pause->rx_pause && !pause->tx_pause)
@@ -253,15 +264,17 @@ e1000_set_pauseparam(struct net_device * hw->original_fc = hw->fc;if (adapter->fc_autoneg ==AUTONEG_ENABLE ) { -if (netif_running (adapter->netdev)) -e1000_reinit_locked (adapter); -else +if (netif_running (adapter->netdev)) { +e1000_down (adapter); +e1000_up (adapter); + }else e1000_reset (adapter); }else -return ((hw->media_type == e1000_media_type_fiber) ? -e1000_setup_link (hw) :e1000_force_mac_fc (hw)); + retval = ((hw->media_type == e1000_media_type_fiber) ? +e1000_setup_link (hw) :e1000_force_mac_fc (hw)); -return 0 ; +clear_bit (__E1000_RESETTING, &adapter->flags); +return retval; } static uint32_t
--
Auke Kok <[email protected]>
PATCH 7/13 e1000: Allow NVM to setup LPLU for IGP2 and IGP3
In reply to Kok, AukeAllow NVM to setup LPLU for IGP2 and IGP3. Only IGP needs LPLU D3 disabled during init here.
---
drivers/net/e1000/e1000_hw.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-)
drivers/net/e1000/e1000_hw.c +8 -5
@@ -1324,11 +1324,14 @@ e1000_copper_link_igp_setup(struct e1000E1000_WRITE_REG (hw,LEDCTL , led_ctrl); } -/* disable lplu d3 during driver init */ - ret_val =e1000_set_d3_lplu_state (hw, FALSE); -if (ret_val) { -DEBUGOUT ("Error Disabling LPLU D3\n" ); -return ret_val; +/* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */ +if (hw->phy_type == e1000_phy_igp) { +/* disable lplu d3 during driver init */ + ret_val =e1000_set_d3_lplu_state (hw, FALSE); +if (ret_val) { +DEBUGOUT ("Error Disabling LPLU D3\n" ); +return ret_val; + } }/* disable lplu d0 during driver init */
--
Auke Kok <[email protected]>
PATCH 8/13 e1000: Force full DMA clocking for 10/100 speed
In reply to Kok, Auke---
drivers/net/e1000/e1000_hw.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
drivers/net/e1000/e1000_hw.c +11 -0
@@ -718,6 +718,17 @@ e1000_init_hw(struct e1000_hw *hw)DEBUGFUNC ("e1000_init_hw" ); +/* force full DMA clock frequency for 10/100 on ICH8 A0-B0 */ +if (hw->mac_type == e1000_ich8lan) { + reg_data =E1000_READ_REG (hw,TARC0 ); + reg_data |=0x30000000 ; +E1000_WRITE_REG (hw,TARC0 , reg_data); + + reg_data =E1000_READ_REG (hw,STATUS ); + reg_data &= ~0x80000000 ; +E1000_WRITE_REG (hw,STATUS , reg_data); + } +/* Initialize Identification LED */ ret_val =e1000_id_led_init (hw);if (ret_val) {
--
Auke Kok <[email protected]>
PATCH 9/13 e1000: Disable aggressive clocking on esb2 with SERDES port
In reply to Kok, AukeDisable aggressive clocking on esb2 with SERDES port as it causes hardware problems.
---
drivers/net/e1000/e1000_main.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-)
drivers/net/e1000/e1000_main.c +0 -2
@@ -1498,8 +1498,6 @@ e1000_configure_tx(struct e1000_adapter }else if (hw->mac_type == e1000_80003es2lan) { tarc =E1000_READ_REG (hw,TARC0 ); tarc |=1 ; -if (hw->media_type == e1000_media_type_internal_serdes) - tarc |= (1 <<20 );E1000_WRITE_REG (hw,TARC0 , tarc); tarc =E1000_READ_REG (hw,TARC1 ); tarc |=1 ;
--
Auke Kok <[email protected]>
PATCH 10/13 e1000: Increment driver version to 7.1.9-k6
In reply to Kok, Auke---
drivers/net/e1000/e1000_main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/e1000/e1000_main.c +1 -1
@@ -36,7 +36,7 @@ static char e1000_driver_string[] = "Int#else #define DRIVERNAPI "-NAPI"#endif -#define DRV_VERSION "7.1.9-k4"DRIVERNAPI +#define DRV_VERSION "7.1.9-k6"DRIVERNAPIchar e1000_driver_version[] =DRV_VERSION ;static char e1000_copyright[] ="Copyright (c) 1999-2006 Intel Corporation." ;
--
Auke Kok <[email protected]>
PATCH 11/13 ixgb: Add CX4 PHY type detection and subdevice ID.
In reply to Kok, Auke---
drivers/net/ixgb/ixgb_hw.c | 11 +++++++++++ drivers/net/ixgb/ixgb_ids.h | 1 + 2 files changed, 12 insertions(+), 0 deletions(-)
drivers/net/ixgb/ixgb_hw.c +11 -0
@@ -236,6 +236,17 @@ ixgb_identify_phy(struct ixgb_hw *hw)DEBUGOUT ("Identified G6104 optics\n" ); phy_type = ixgb_phy_type_g6104;break ; +case IXGB_DEVICE_ID_82597EX_CX4 : +DEBUGOUT ("Identified CX4\n" ); + xpak_vendor =ixgb_identify_xpak_vendor (hw); +if (xpak_vendor == ixgb_xpak_vendor_intel) { +DEBUGOUT ("Identified TXN17201 optics\n" ); + phy_type = ixgb_phy_type_txn17201; + }else { +DEBUGOUT ("Identified G6005 optics\n" ); + phy_type = ixgb_phy_type_g6005; + } +break ;default :DEBUGOUT ("Unknown physical layer module\n" ); phy_type = ixgb_phy_type_unknown;
drivers/net/ixgb/ixgb_ids.h +1 -0
@@ -45,6 +45,7 @@#define IXGB_DEVICE_ID_82597EX_CX4 0x109E#define IXGB_SUBDEVICE_ID_A00C 0xA00C +#define IXGB_SUBDEVICE_ID_A01C 0xA01C#endif /* #ifndef _IXGB_IDS_H_ */ /* End of File */
--
Auke Kok <[email protected]>
PATCH 12/13 ixgb: fix cache miss due to miscalculation
In reply to Kok, AukeReduce writeback threshold by 1. We were instructing the hardware to wait until the 17th descriptor which went over the cache line limit.
---
drivers/net/ixgb/ixgb_main.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
drivers/net/ixgb/ixgb_main.c +6 -6
@@ -140,12 +140,12 @@ module_param(debug, int, 0);MODULE_PARM_DESC (debug,"Debug level (0=none,...,16=all)" );/* some defines for controlling descriptor fetches in h/w */ -#define RXDCTL_WTHRESH_DEFAULT 16/* chip writes back at this many or RXT0 */ -#define RXDCTL_PTHRESH_DEFAULT 0/* chip considers prefech below -* this */ -#define RXDCTL_HTHRESH_DEFAULT 0/* chip will only prefetch if tail -* is pushed this many descriptors -* from head */ +#define RXDCTL_WTHRESH_DEFAULT 15/* chip writes back at this many or RXT0 */ +#define RXDCTL_PTHRESH_DEFAULT 0/* chip considers prefech below +* this */ +#define RXDCTL_HTHRESH_DEFAULT 0/* chip will only prefetch if tail +* is pushed this many descriptors +* from head */ /** * ixgb_init_module - Driver Registration Routine
--
Auke Kok <[email protected]>
PATCH 13/13 ixgb: Increment version to 1.0.109-k4
In reply to Kok, Auke---
drivers/net/ixgb/ixgb_main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/ixgb/ixgb_main.c +1 -1
@@ -36,7 +36,7 @@ static char ixgb_driver_string[] = "Inte#else #define DRIVERNAPI "-NAPI"#endif -#define DRV_VERSION "1.0.109-k2"DRIVERNAPI +#define DRV_VERSION "1.0.109-k4"DRIVERNAPIchar ixgb_driver_version[] =DRV_VERSION ;static char ixgb_copyright[] ="Copyright (c) 1999-2006 Intel Corporation." ;
--
Auke Kok <[email protected]>
pulled into #upstream