From owner-svn-src-stable@FreeBSD.ORG Fri Mar 26 00:05:42 2010 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E77B1065673; Fri, 26 Mar 2010 00:05:42 +0000 (UTC) (envelope-from sobomax@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 720B18FC1D; Fri, 26 Mar 2010 00:05:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2Q05gUq076509; Fri, 26 Mar 2010 00:05:42 GMT (envelope-from sobomax@svn.freebsd.org) Received: (from sobomax@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2Q05gHA076507; Fri, 26 Mar 2010 00:05:42 GMT (envelope-from sobomax@svn.freebsd.org) Message-Id: <201003260005.o2Q05gHA076507@svn.freebsd.org> From: Maxim Sobolev Date: Fri, 26 Mar 2010 00:05:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205658 - stable/7/sys/dev/mii X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Mar 2010 00:05:42 -0000 Author: sobomax Date: Fri Mar 26 00:05:42 2010 New Revision: 205658 URL: http://svn.freebsd.org/changeset/base/205658 Log: MFC: workaround no-carrier issue on IBM HS21. PR: 118238 Modified: stable/7/sys/dev/mii/brgphy.c Directory Properties: stable/7/sys/dev/mii/ (props changed) Modified: stable/7/sys/dev/mii/brgphy.c ============================================================================== --- stable/7/sys/dev/mii/brgphy.c Thu Mar 25 23:38:10 2010 (r205657) +++ stable/7/sys/dev/mii/brgphy.c Fri Mar 26 00:05:42 2010 (r205658) @@ -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; } } @@ -532,7 +563,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;