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