Subject: Re: New RTL8168 revision(?)
To: None <d.den.brok@uni-bonn.de>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: tech-kern
Date: 05/10/2007 08:12:15
d.den.brok@uni-bonn.de wrote:
> Another glitch: I've rather often have to reboot because re(4) says: "re0:
> watchdog timeout" to get networking work again. Sometimes it also says
> something about reset not having been completed fully. I'd be glad to test
> possible fixes or hear about a workaround which doesn't require rebooting,
> if anyone can come up with such. This is NetBSD 4.0_BETA2 with re(4) from
> -current (because 4.0 doesn't support RTL8168_SPIN3 as of now).
Could you try this one? (taken from FreeBSD/OpenBSD)
---
Index: rtl8169.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/rtl8169.c,v
retrieving revision 1.84
diff -u -r1.84 rtl8169.c
--- rtl8169.c 21 Mar 2007 12:17:31 -0000 1.84
+++ rtl8169.c 9 May 2007 12:36:46 -0000
@@ -1358,9 +1358,21 @@
* interrupt that will cause us to re-enter this routine.
* This is done in case the transmitter has gone idle.
*/
- if (sc->re_ldata.re_txq_free < RE_TX_QLEN)
+ if (sc->re_ldata.re_txq_free < RE_TX_QLEN) {
CSR_WRITE_4(sc, RTK_TIMERCNT, 1);
- else
+ if ((sc->sc_quirk & RTKQ_PCIE) != 0) {
+ /*
+ * Some chips will ignore a second TX request
+ * issued while an existing transmission is in
+ * progress. If the transmitter goes idle but
+ * there are still packets waiting to be sent,
+ * we need to restart the channel here to flush
+ * them out. This only seems to be required with
+ * the PCIe devices.
+ */
+ CSR_WRITE_2(sc, RTK_GTXSTART, RTK_TXSTART_START);
+ }
+ } else
ifp->if_timer = 0;
}
---
Izumi Tsutsui