2.6.x e1000, ixgb fixes
Subsystems (2)
PATCH 1/1 2.6.x e1000, ixgb fixes
See attached.
Please do a
bk pull bk://gkernel.bkbits.net/net-drivers-2.6
This will update the following files:
drivers/net/e1000/e1000.h | 3 drivers/net/e1000/e1000_ethtool.c | 11 - drivers/net/e1000/e1000_hw.c | 86 ++++++------- drivers/net/e1000/e1000_hw.h | 11 + drivers/net/e1000/e1000_main.c | 249 ++++++++++++++++++++++++++++++++++---- drivers/net/ixgb/ixgb.h | 3 drivers/net/ixgb/ixgb_ee.c | 16 +- drivers/net/ixgb/ixgb_ee.h | 3 drivers/net/ixgb/ixgb_ethtool.c | 5 drivers/net/ixgb/ixgb_hw.c | 2 drivers/net/ixgb/ixgb_hw.h | 2 drivers/net/ixgb/ixgb_ids.h | 2 drivers/net/ixgb/ixgb_main.c | 73 ++++++----- drivers/net/ixgb/ixgb_osdep.h | 2 drivers/net/ixgb/ixgb_param.c | 2 15 files changed, 354 insertions(+), 116 deletions(-)
through these ChangeSets:
<mallikarjuna.chilakala:intel.com>:
o e1000: Driver version white space,
o e1000: Fixes related to Cable length
o e1000: Report failure code when loopback
o e1000: Checks for desc ring/rx data
o e1000: Patch from Peter Kjellstroem --
o e1000: Fix WOL settings in 82544 based
o e1000: Delay clean-up of last Tx buffer
o e1000: Avoid race between e1000_watchdog
o e1000: use netif_poll_{enable|disable}
o e1000: Robert Olsson's fix and refinement
o ixgb: Driver version, white space, other stuff
o ixgb: Invalidate software cache, when EEPROM write occurs
o ixgb: Robert Olsson's fix and refinement to poll
o ixgb: Avoid race e1000_watchdog and ixgb_clean_tx_irq
o ixgb: use netif_poll_{enable|disable}
drivers/net/e1000/e1000.h +3 -0
@@ -138,6 +138,7 @@#define E1000_RX_BUFFER_WRITE 16/* Must be power of 2 */ #define AUTO_ALL_MODES 0 +#define E1000_EEPROM_82544_APM 0x0004#define E1000_EEPROM_APME 0x0400#ifndef E1000_MASTER_SLAVE
@@ -209,6 +210,7 @@/* TX */ struct e1000_desc_ring tx_ring; +struct e1000_buffer previous_buffer_info;spinlock_t tx_lock;uint32_t txd_cmd;uint32_t tx_int_delay;
@@ -222,6 +224,7 @@uint32_t tx_fifo_size;atomic_t tx_fifo_stall;boolean_t pcix_82544; +boolean_t detect_tx_hung;/* RX */ struct e1000_desc_ring rx_ring;
drivers/net/e1000/e1000_ethtool.c +6 -5
@@ -1310,7 +1310,7 @@struct e1000_desc_ring *txdr = &adapter->test_tx_ring;struct e1000_desc_ring *rxdr = &adapter->test_rx_ring;struct pci_dev *pdev = adapter->pdev; -int i; +int i, ret_val;E1000_WRITE_REG (&adapter->hw,RDT , rxdr->count -1 );
@@ -1330,11 +1330,12 @@ rxdr->buffer_info[i].length, PCI_DMA_FROMDEVICE); -if (!e1000_check_lbtest_frame (rxdr->buffer_info[i++].skb,1024 )) -return 0 ; - }while (i <64 ); + ret_val =e1000_check_lbtest_frame (rxdr->buffer_info[i].skb, +1024 ); + i++; + }while (ret_val !=0 && i <64 ); -return 13 ; +return ret_val; } static int
drivers/net/e1000/e1000_hw.c +45 -41
148 lines not on this page · raw message
drivers/net/e1000/e1000_hw.h +9 -2
@@ -369,6 +369,7 @@#define E1000_DEV_ID_82546GB_SERDES 0x107B#define E1000_DEV_ID_82546GB_PCIE 0x108A#define E1000_DEV_ID_82547EI 0x1019 +#define NODE_ADDRESS_SIZE 6#define ETH_LENGTH_OF_ADDRESS 6
@@ -1734,6 +1735,9 @@#define PHY_1000T_STATUS 0x0A/* 1000Base-T Status Reg */ #define PHY_EXT_STATUS 0x0F/* Extended Status Reg */ +#define MAX_PHY_REG_ADDRESS 0x1F/* 5 bit address bus (0-0x1F) */ +#define MAX_PHY_MULTI_PAGE_REG 0xF/* Registers equal on all pages */ +/* M88E1000 Specific Registers */ #define M88E1000_PHY_SPEC_CTRL 0x10/* PHY Specific Control Register */ #define M88E1000_PHY_SPEC_STATUS 0x11/* PHY Specific Status Register */
@@ -1794,8 +1798,7 @@#define IGP01E1000_ANALOG_REGS_PAGE 0x20C0 -#define MAX_PHY_REG_ADDRESS 0x1F/* 5 bit address bus (0-0x1F) */ -#define MAX_PHY_MULTI_PAGE_REG 0xF/*Registers that are equal on all pages*/ +/* PHY Control Register */ #define MII_CR_SPEED_SELECT_MSB 0x0040/* bits 6,13: 10=1000, 01=100, 00=10 */ #define MII_CR_COLL_TEST_ENABLE 0x0080/* Collision test enable */
@@ -2098,7 +2101,11 @@#define IGP01E1000_ANALOG_FUSE_FINE_1 0x0080#define IGP01E1000_ANALOG_FUSE_FINE_10 0x0500 +/* Bit definitions for valid PHY IDs. */ +/* I = Integrated +* E = External +*/ #define M88E1000_E_PHY_ID 0x01410C50#define M88E1000_I_PHY_ID 0x01410C30#define M88E1011_I_PHY_ID 0x01410C20
drivers/net/e1000/e1000_main.c +224 -25
432 lines not on this page · raw message
drivers/net/ixgb/ixgb.h +2 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
@@ -176,6 +176,7 @@uint64_t hw_csum_tx_error;uint32_t tx_int_delay;boolean_t tx_int_delay_enable; +boolean_t detect_tx_hung;/* RX */ struct ixgb_desc_ring rx_ring;
drivers/net/ixgb/ixgb_ee.c +11 -5
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
@@ -372,11 +372,11 @@* *****************************************************************************/ void -ixgb_write_eeprom (struct ixgb_hw *hw, -uint16_t offset, -uint16_t data) +ixgb_write_eeprom (struct ixgb_hw *hw,uint16_t offset,uint16_t data) { -/* Prepare the EEPROM for writing */ +struct ixgb_ee_map_type *ee_map = (struct ixgb_ee_map_type *)hw->eeprom; + +/* Prepare the EEPROM for writing */ ixgb_setup_eeprom (hw);/* Send the 9-bit EWEN (write enable) command to the EEPROM (5-bit opcode
@@ -410,6 +410,9 @@/* Done with writing */ ixgb_cleanup_eeprom (hw); +/* clear the init_ctrl_reg_1 to signify that the cache is invalidated */ + ee_map->init_ctrl_reg_1 =EEPROM_ICW1_SIGNATURE_CLEAR ; +return ; }
@@ -478,6 +481,9 @@if (checksum != (uint16_t )EEPROM_SUM ) {DEBUGOUT ("ixgb_ee: Checksum invalid.\n" ); +/* clear the init_ctrl_reg_1 to signify that the cache is +* invalidated */ + ee_map->init_ctrl_reg_1 =EEPROM_ICW1_SIGNATURE_CLEAR ;return (FALSE); }
drivers/net/ixgb/ixgb_ee.h +2 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
@@ -63,6 +63,7 @@#define EEPROM_ICW1_SIGNATURE_MASK 0xC000#define EEPROM_ICW1_SIGNATURE_VALID 0x4000 +#define EEPROM_ICW1_SIGNATURE_CLEAR 0x0000/* For checksumming, the sum of all words in the EEPROM should equal 0xBABA. */ #define EEPROM_SUM 0xBABA
drivers/net/ixgb/ixgb_ethtool.c +4 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
@@ -63,6 +63,7 @@ {"tx_dropped", IXGB_STAT(net_stats.tx_dropped)}, {"multicast", IXGB_STAT(net_stats.multicast)}, {"collisions", IXGB_STAT(net_stats.collisions)}, +/* { "rx_length_errors", IXGB_STAT(net_stats.rx_length_errors) }, */ {"rx_over_errors", IXGB_STAT(net_stats.rx_over_errors)}, {"rx_crc_errors", IXGB_STAT(net_stats.rx_crc_errors)},
@@ -98,6 +99,7 @@ ixgb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) { struct ixgb_adapter *adapter = netdev->priv; + ecmd->supported = (SUPPORTED_10000baseT_Full |SUPPORTED_FIBRE ); ecmd->advertising = (SUPPORTED_10000baseT_Full |SUPPORTED_FIBRE ); ecmd->port =PORT_FIBRE ;
@@ -119,6 +121,7 @@ ixgb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) { struct ixgb_adapter *adapter = netdev->priv; +if (ecmd->autoneg ==AUTONEG_ENABLE || ecmd->speed + ecmd->duplex !=SPEED_10000 +DUPLEX_FULL )return -EINVAL ;
drivers/net/ixgb/ixgb_hw.c +1 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
drivers/net/ixgb/ixgb_hw.h +1 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
drivers/net/ixgb/ixgb_ids.h +1 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
drivers/net/ixgb/ixgb_main.c +43 -30
150 lines not on this page · raw message
drivers/net/ixgb/ixgb_osdep.h +1 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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
drivers/net/ixgb/ixgb_param.c +1 -1
@@ -1,7 +1,7 @@/******************************************************************************* - Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. +Copyright(c) 1999 - 2005 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