kern/118238: commit references a PR
dfilter service
dfilter at FreeBSD.ORG
Thu Mar 25 23:40:06 UTC 2010
The following reply was made to PR kern/118238; it has been noted by GNATS.
From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/118238: commit references a PR
Date: Thu, 25 Mar 2010 23:38:29 +0000 (UTC)
Author: sobomax
Date: Thu Mar 25 23:38:10 2010
New Revision: 205657
URL: http://svn.freebsd.org/changeset/base/205657
Log:
MFC: workaround no-carrier issue on IBM HS21.
PR: 118238
Modified:
stable/8/sys/dev/mii/brgphy.c
Directory Properties:
stable/8/sys/dev/mii/ (props changed)
Modified: stable/8/sys/dev/mii/brgphy.c
==============================================================================
--- stable/8/sys/dev/mii/brgphy.c Thu Mar 25 22:41:01 2010 (r205656)
+++ stable/8/sys/dev/mii/brgphy.c Thu Mar 25 23:38:10 2010 (r205657)
@@ -72,8 +72,9 @@ struct brgphy_softc {
int mii_model;
int mii_rev;
int serdes_flags; /* Keeps track of the serdes type used */
-#define BRGPHY_5706S 0x0001
-#define BRGPHY_5708S 0x0002
+#define BRGPHY_5706S 0x0001
+#define BRGPHY_5708S 0x0002
+#define BRGPHY_NOANWAIT 0x0004
int bce_phy_flags; /* PHY flags transferred from the MAC driver */
};
@@ -142,6 +143,23 @@ static const struct mii_phydesc brgphys[
MII_PHY_END
};
+#define HS21_PRODUCT_ID "IBM eServer BladeCenter HS21"
+#define HS21_BCM_CHIPID 0x57081021
+
+static int
+detect_hs21(struct bce_softc *bce_sc)
+{
+ char *sysenv;
+
+ if (bce_sc->bce_chipid != HS21_BCM_CHIPID)
+ return (0);
+ sysenv = getenv("smbios.system.product");
+ if (sysenv == NULL)
+ return (0);
+ if (strncmp(sysenv, HS21_PRODUCT_ID, strlen(HS21_PRODUCT_ID)) != 0)
+ return (0);
+ return (1);
+}
/* Search for our PHY in the list of known PHYs */
static int
@@ -291,6 +309,19 @@ brgphy_attach(device_t dev)
if (bce_sc && (bce_sc->bce_phy_flags & BCE_PHY_2_5G_CAPABLE_FLAG)) {
ADD(IFM_MAKEWORD(IFM_ETHER, IFM_2500_SX, IFM_FDX, sc->mii_inst), 0);
printf("2500baseSX-FDX, ");
+ } else if ((bsc->serdes_flags & BRGPHY_5708S) && bce_sc &&
+ (detect_hs21(bce_sc) != 0)) {
+ /*
+ * There appears to be certain silicon revision
+ * in IBM HS21 blades that is having issues with
+ * this driver wating for the auto-negotiation to
+ * complete. This happens with a specific chip id
+ * only and when the 1000baseSX-FDX is the only
+ * mode. Workaround this issue since it's unlikely
+ * to be ever addressed.
+ */
+ printf("auto-neg workaround, ");
+ bsc->serdes_flags |= BRGPHY_NOANWAIT;
}
}
@@ -544,7 +575,8 @@ brgphy_status(struct mii_softc *sc)
/* Autoneg is still in progress. */
if ((bmcr & BRGPHY_BMCR_AUTOEN) &&
- (bmsr & BRGPHY_BMSR_ACOMP) == 0) {
+ (bmsr & BRGPHY_BMSR_ACOMP) == 0 &&
+ (bsc->serdes_flags & BRGPHY_NOANWAIT) == 0) {
/* Erg, still trying, I guess... */
mii->mii_media_active |= IFM_NONE;
goto brgphy_status_exit;
_______________________________________________
svn-src-all at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-net
mailing list