Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Jan 2013 23:13:46 -0800
From:      Neel Natu <neelnatu@gmail.com>
To:        freebsd-net@freebsd.org
Cc:        jfv@freebsd.org
Subject:   e1000 serdes link flap
Message-ID:  <CAFgRE9EpskSJ=PHG0qhDoDE6eP1_yXTidOwnhr8q-M=G3UCHSQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

I am running into a problem in head with the e1000 link state
detection logic attached to a 82571EB serdes controller.

The symptom is that the link state keeps flapping between "up" and "down".

After I enabled the debug output in
'e1000_check_for_serdes_link_82571()' this is what I see:
<snip>
e1000_check_for_serdes_link_82571
ctrl = 0x4c0241, status = 0x803a7, rxcw = 0x44000000
FORCED_UP -> AN_PROG
em6: link state changed to DOWN
e1000_check_for_serdes_link_82571
ctrl = 0x4c0201, status = 0x803a4, rxcw = 0x44000000
AN_PROG   -> FORCED_UP
em6: link state changed to UP
e1000_check_for_serdes_link_82571
ctrl = 0x4c0241, status = 0x803a7, rxcw = 0x44000000
FORCED_UP -> AN_PROG
em6: link state changed to DOWN
</snip>

The problem goes away if I apply the following patch to bring the link
state detection logic in line with the e1000e driver in Linux:

Index: e1000_82571.c
===================================================================
--- e1000_82571.c	(revision 245766)
+++ e1000_82571.c	(working copy)
@@ -1712,10 +1712,8 @@
 			 * auto-negotiation in the TXCW register and disable
 			 * forced link in the Device Control register in an
 			 * attempt to auto-negotiate with our link partner.
-			 * If the partner code word is null, stop forcing
-			 * and restart auto negotiation.
 			 */
-			if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW))  {
+			if ((rxcw & E1000_RXCW_C) != 0) {
 				/* Enable autoneg, and unforce link up */
 				E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
 				E1000_WRITE_REG(hw, E1000_CTRL,

I am not sure why the !(rxcw & E1000_RXCW_CW) check was added and the
e1000 SDM does not have any more information.

Jack, can you take a look at the patch and commit if it looks alright?

best
Neel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFgRE9EpskSJ=PHG0qhDoDE6eP1_yXTidOwnhr8q-M=G3UCHSQ>