diff options
author | Nick Nunley <nicholasx.d.nunley@intel.com> | 2010-02-17 02:03:58 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-17 22:21:36 +0100 |
commit | 43915c7c9a99e38406103d9c72b73edeaa19d0ff (patch) | |
tree | 8bd6a84a28892e973b0e71c8baa4e68df90ed7ef /drivers/net/igb | |
parent | igb: only support SRRCTL_DROP_EN when using multiple queues (diff) | |
download | linux-43915c7c9a99e38406103d9c72b73edeaa19d0ff.tar.xz linux-43915c7c9a99e38406103d9c72b73edeaa19d0ff.zip |
igb: only read phy specific stats if in internal phy mode
There are a couple statistics registers that are not meant to
be read when in SGMII/serdes mode. This patch adds a check to
verify mode before reading and updating these statistics.
Signed-off-by: Nicholas Nunley <nicholasx.d.nunley@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/igb')
-rw-r--r-- | drivers/net/igb/igb_main.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index b989b34a4adb..cba0115a6a57 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c @@ -3975,7 +3975,7 @@ void igb_update_stats(struct igb_adapter *adapter) struct net_device_stats *net_stats = igb_get_stats(adapter->netdev); struct e1000_hw *hw = &adapter->hw; struct pci_dev *pdev = adapter->pdev; - u32 rnbc; + u32 rnbc, reg; u16 phy_tmp; int i; u64 bytes, packets; @@ -4072,8 +4072,13 @@ void igb_update_stats(struct igb_adapter *adapter) adapter->stats.colc += rd32(E1000_COLC); adapter->stats.algnerrc += rd32(E1000_ALGNERRC); - adapter->stats.rxerrc += rd32(E1000_RXERRC); - adapter->stats.tncrs += rd32(E1000_TNCRS); + /* read internal phy specific stats */ + reg = rd32(E1000_CTRL_EXT); + if (!(reg & E1000_CTRL_EXT_LINK_MODE_MASK)) { + adapter->stats.rxerrc += rd32(E1000_RXERRC); + adapter->stats.tncrs += rd32(E1000_TNCRS); + } + adapter->stats.tsctc += rd32(E1000_TSCTC); adapter->stats.tsctfc += rd32(E1000_TSCTFC); |