From owner-cvs-src@FreeBSD.ORG Sat May 29 11:23:26 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DCB0A16A4CE; Sat, 29 May 2004 11:23:26 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id D4A5F43D5C; Sat, 29 May 2004 11:23:26 -0700 (PDT) (envelope-from marius@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i4TINQBv077074; Sat, 29 May 2004 11:23:26 -0700 (PDT) (envelope-from marius@repoman.freebsd.org) Received: (from marius@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i4TINQK0077073; Sat, 29 May 2004 11:23:26 -0700 (PDT) (envelope-from marius) Message-Id: <200405291823.i4TINQK0077073@repoman.freebsd.org> From: Marius Strobl Date: Sat, 29 May 2004 11:23:26 -0700 (PDT) To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/dev/mii nsphy.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 May 2004 18:23:27 -0000 marius 2004/05/29 11:23:26 PDT FreeBSD src repository Modified files: sys/dev/mii nsphy.c Log: DP83840A on hme(4) don't advertise their media capabilities themselves properly. This causes the autonegotiation to e.g. never establish a 100baseTX full-duplex link. The solution to this problem is to manually write the capabilities from the BMSR to the ANAR every time a media change occurs, even when already in autonegotiation mode. The NetBSD way of doing this is to set their MIIF_FORCEANEG flag in the NIC driver. This causes mii_phy_setmedia() to call mii_phy_auto() (which will set the ANAR according to the BMSR) even when the PHY alread is in autonegotiation mode. However, while doing the same on FreeBSD (which involves porting the MIIF_FORCEANEG flag and converting nsphy.c to use mii_phy_setmedia()) fixes autonegotiation, using mii_phy_setmedia() causes this driver to no longer work properly in the other modes. Another drawback of that approach is that this will also force writing the ANAR on other PHYs whose drivers use mii_phy_setmedia() and which are used with a NIC whose driver sets MIIF_FORCEANEG (e.g. hme(4) is known to be used together with 3 different PHYs while only the DP83840A require this workaround). So instead of moving to MIIF_FORCEANEG, just call mii_phy_auto() in nsphy_service() unconditionally when hanging off of a hme(4) and serving a media change This is part 1/2 of fixing autonegotiation on hme(4) using DP83840A PHYs. Revision Changes Path 1.22 +11 -4 src/sys/dev/mii/nsphy.c