7.1-R to RELENG_7 upgrade breaks re nic
Pyun YongHyeon
pyunyh at gmail.com
Sun Mar 8 20:58:06 PDT 2009
On Sun, Mar 08, 2009 at 09:52:19PM -0400, Steve Wills wrote:
> Hi,
>
> Sorry for the late reply.
>
> On Mar 3, 2009, at 7:07 AM, Pyun YongHyeon wrote:
> >Ok, when you plug UTP cable can you see "re0: link state changed to
> >UP" in dmesg output? Or if you unplug the cable, you should see
> >"re0: link state changed to DOWN"(With "tail -f /var/log/message",
> >you can easily check this.)
>
> Nope.
>
> >
> >If this is not the case something is wrong on RTL8168D. Since
> >you've said re0 works for a short time, can you see "re0: link
> >state changed to DOWN" on your dmesg output right before seeing
> >"re0: PHY read failed" message?
>
> After boot and DHCP, it works for about a minute, then I see "PHY read
> failed" for a few seconds, network continues to work, then I see "link
> state changed to DOWN", network stops working and frequency of read
> failed message increases. Unplugging the cable and plugging it back in
> doesn't change anything or cause the system to log any messages beyond
> "PHY read failed".
>
> >I've also attached patch which may apply to your case. Would you
> >give it spin? Note, the patch was generated against CURRENT, so
> >you should use re(4) in CURRENT. Just save your old re(4)/rl(4)
> >files and download if_re.c, if_rl.c and if_rlreg.h from CURRENT
> >and apply the patch.
> ><re.RTL8168D.patch>
>
> Unfortunately, for me, this patch doesn't change things.
>
Ok, please try again with attached patch.
-------------- next part --------------
Index: sys/dev/re/if_re.c
===================================================================
--- sys/dev/re/if_re.c (revision 189551)
+++ sys/dev/re/if_re.c (working copy)
@@ -1266,6 +1266,8 @@
/* FALLTHROUGH */
case RL_HWREV_8168CP:
case RL_HWREV_8168D:
+ if (hw_rev->rl_rev == RL_HWREV_8168D)
+ sc->rl_flags |= 0x10000;
sc->rl_flags |= RL_FLAG_PHYWAKE | RL_FLAG_PAR |
RL_FLAG_DESCV2 | RL_FLAG_MACSTAT | RL_FLAG_CMDSTOP;
/*
@@ -2061,6 +2063,8 @@
RL_LOCK_ASSERT(sc);
+ if ((sc->rl_flags & 0x10000) != 0)
+ re_miibus_writereg(sc->rl_dev, 1, 0x1f, 0);
mii = device_get_softc(sc->rl_miibus);
mii_tick(mii);
if ((sc->rl_flags & RL_FLAG_LINK) == 0)
More information about the freebsd-stable
mailing list