Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Apr 2002 07:40:20 -0700 (PDT)
From:      Stephen McKay <mckay@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/mii dcphy.c
Message-ID:  <200204181440.g3IEeLf27433@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
mckay       2002/04/18 07:40:20 PDT

  Modified files:
    sys/dev/mii          dcphy.c 
  Log:
  Work around an Intel 21143 chip bug.
  
  Rev 1.56 of if_dc.c removed calls to mii_pollstat() from the dc_tick()
  routine.  dc_tick() is called regularly to detect link up and link down
  status, especially when autonegotiating.
  
  The expectation was that mii_tick() (which is still called from dc_tick())
  would update status information automatically in all cases where it would
  be sensible to do so.
  
  Unfortunately, with authentic 21143 chips this is not the case, and
  the driver never successfully autonegotiates.  This is because (despite
  what it says in the 21143 manual) the chip always claims that link is not
  present while the autonegotiation enable bit is set.  Autonegotation takes
  place and succeeds, but the driver tests the link bits before it switches
  off the autonegotiation enable bit, and success is not recognised.
  
  The simplest solution is to call dcphy_status() more often for MII_TICK
  calls by dropping out of the switch statement instead of exiting when
  we are autonegotiating and link appears to not be present.  When
  autonegotiation succeeds, dcphy_status() will note the speed and fdx/hdx
  state and turn off the autonegotiation enable bit.  The next call to
  dcphy_status() will notice that link is present, and the dc driver code
  will be notified.
  
  Macronix chips also use this code, but implement link detection as
  described in the manual, and hence don't need this patch.  However, tests
  on a Macronix 98715AEC-C show that it does not adversely affect them.
  
  This could be done better but is the minimal effective change, and most
  closely mimics what was happening prior to rev 1.56 of if_dc.c.  (Actually
  I also deleted a small amount of unnecessary code while I was in the area.)
  
  Reviewed by:    wpaul
  
  Revision  Changes    Path
  1.13      +10 -7     src/sys/dev/mii/dcphy.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204181440.g3IEeLf27433>