DragonFly commits List (threaded) for 2007-08
cvs commit: src/sys/dev/netif/nfe if_nfe.c
dillon 2007/08/09 00:24:50 PDT
DragonFly src repository
Introduce two delays in nfe_stop().
The first seems to fix or greatly reduce instances of watchdog failures.
I theorize that a TX KICK occuring just prior to a nfe_stop() is confusing
the microcontroller due to the polled nature of the rest of the tx/rx control
registers and the (almost certain) hardware aided TX KICK bit. This
confusion survives the nfe_stop() and nfe_init(). I'll again theorize that
the KICK, which is probably a microcontroller interrupt, is not being reset
and is being handled at some inappropriate point in time in the middle of
nfe_stop() or nfe_init().
The second delay gives the device time to actually stop the DMA engine
before we destroy the ring buffers. Even if those registers were under
direct hardware control (and I really doubt they are), DMA just doesn't
instantly stop when you tell it to.
Revision Changes Path
1.13 +27 -0 src/sys/dev/netif/nfe/if_nfe.c