svn commit: r216264 - stable/8/sys/dev/fxp

Pyun YongHyeon yongari at FreeBSD.org
Tue Dec 7 19:14:18 UTC 2010


Author: yongari
Date: Tue Dec  7 19:14:18 2010
New Revision: 216264
URL: http://svn.freebsd.org/changeset/base/216264

Log:
  MFC r216111:
    If RX lockup workaround is enabled, fxp(4) will periodically reset
    the controller to workaround silicon bug of i82557. Each reset will
    re-establish link which in turn triggers MII status change
    callback. The callback will try to reconfigure controller if the
    controller is not i82557 to enable flow-control. This caused
    endless link UP/DOWN when the workaround was enabled on non-i82557
    controller.
  
    To fix the issue, apply RX lockup workaround only for i82557.
    Previously it blindly checked undocumented EEPROM location such
    that it sometimes enabled the workaround for other controllers. At
    this time, only i82557 is known to have the silicon bug.
    This fixes a regression introduced in r215906 which enabled flow
    control support for all controllers except i82557.
  
    Reported by:	Karl Denninger (karl <> denninger dot net)
    Tested by:	Karl Denninger (karl <> denninger dot net)
    Approved by:	re (kensmith)

Modified:
  stable/8/sys/dev/fxp/if_fxp.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/dev/fxp/if_fxp.c
==============================================================================
--- stable/8/sys/dev/fxp/if_fxp.c	Tue Dec  7 18:49:11 2010	(r216263)
+++ stable/8/sys/dev/fxp/if_fxp.c	Tue Dec  7 19:14:18 2010	(r216264)
@@ -526,10 +526,12 @@ fxp_attach(device_t dev)
 	}
 
 	/* Receiver lock-up workaround detection. */
-	fxp_read_eeprom(sc, &data, 3, 1);
-	if ((data & 0x03) != 0x03) {
-		sc->flags |= FXP_FLAG_RXBUG;
-		device_printf(dev, "Enabling Rx lock-up workaround\n");
+	if (sc->revision < FXP_REV_82558_A4) {
+		fxp_read_eeprom(sc, &data, 3, 1);
+		if ((data & 0x03) != 0x03) {
+			sc->flags |= FXP_FLAG_RXBUG;
+			device_printf(dev, "Enabling Rx lock-up workaround\n");
+		}
 	}
 
 	/*


More information about the svn-src-stable-8 mailing list