Date: Thu, 23 Feb 2012 20:40:00 -0800 From: YongHyeon PYUN <pyunyh@gmail.com> To: Nugroho Atmotaruno <atmotaruno@gmail.com> Cc: freebsd-net@freebsd.org Subject: Re: re(4) intermittent up/down Message-ID: <20120224044000.GF13815@michelle.cdnetworks.com> In-Reply-To: <CAETxY=o%2BxXREgSY2YaHWeToSJ8TFFkqLHxLLJnFU_KEkZKO=PA@mail.gmail.com> References: <CAETxY=o%2BxXREgSY2YaHWeToSJ8TFFkqLHxLLJnFU_KEkZKO=PA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--bCsyhTFzCvuiizWE
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Thu, Feb 23, 2012 at 04:57:27AM +0700, Nugroho Atmotaruno wrote:
> Hi all,
>
> I'm using FBSD 9.0-RELEASE with TPLink TG-3268 (rl8169) flapping
> (UP/DOWN every several seconds).
>
> [nugroho@xtreme ~]$ uname -a
> FreeBSD xtreme.arc.itb.ac.id 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue
> Jan?? 3 07:46:30 UTC 2012
> root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC?? amd64
>
> [root@xtreme ~]# tail /var/log/messages
> Feb 23 04:47:05 xtreme kernel: re0: link state changed to UP
> Feb 23 04:47:07 xtreme kernel: re0: link state changed to DOWN
> Feb 23 04:47:10 xtreme kernel: re0: link state changed to UP
> Feb 23 04:47:16 xtreme kernel: re0: link state changed to DOWN
> Feb 23 04:47:19 xtreme kernel: re0: link state changed to UP
> Feb 23 04:47:20 xtreme kernel: re0: link state changed to DOWN
> Feb 23 04:47:23 xtreme kernel: re0: link state changed to UP
> Feb 23 04:48:44 xtreme kernel: re0: link state changed to DOWN
> Feb 23 04:48:47 xtreme kernel: re0: link state changed to UP
>
>
> [root@xtreme ~]# pciconf -lcv
> re0@pci0:2:5:0: class=0x020000 card=0x816910ec chip=0x816910ec rev=0x10 hdr=0x00
> vendor = 'Realtek Semiconductor Co., Ltd.'
> device = 'RTL-8169 Gigabit Ethernet'
> class = network
> subclass = ethernet
> cap 01[dc] = powerspec 2 supports D0 D1 D2 D3 current D0
>
> [root@xtreme ~]# devinfo -rv | grep rg
> rgephy0 pnpinfo oui=0xe04c model=0x11 rev=0x3 at phyno=1
>
> [root@xtreme ~]# ifconfig re0
> re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
> options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
> ether f8:d1:11:04:15:d6
> inet 167.205.3.4 netmask 0xffffff80 broadcast 167.205.3.127
> inet6 fe80::fad1:11ff:fe04:15d6%re0 prefixlen 64 scopeid 0x7
> inet6 2403:8000:1:1880::4 prefixlen 64
> nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> media: Ethernet autoselect (1000baseT <full-duplex>)
> status: active
>
Would you try attached patch?
--bCsyhTFzCvuiizWE
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="rgephy.re.diff"
Index: sys/dev/mii/rgephy.c
===================================================================
--- sys/dev/mii/rgephy.c (revision 232042)
+++ sys/dev/mii/rgephy.c (working copy)
@@ -110,11 +110,16 @@
rgephy_attach(device_t dev)
{
struct mii_softc *sc;
+ struct mii_attach_args *ma;
+ u_int flags;
sc = device_get_softc(dev);
+ ma = device_get_ivars(dev);
+ flags = 0;
+ if (strcmp(ma->mii_data->mii_ifp->if_dname, "re") == 0)
+ flags |= MIIF_PHYPRIV0;
+ mii_phy_dev_attach(dev, flags, &rgephy_funcs, 0);
- mii_phy_dev_attach(dev, 0, &rgephy_funcs, 0);
-
/* RTL8169S do not report auto-sense; add manually. */
sc->mii_capabilities = (PHY_READ(sc, MII_BMSR) | BMSR_ANEG) &
sc->mii_capmask;
@@ -243,7 +248,8 @@
* Check to see if we have link. If we do, we don't
* need to restart the autonegotiation process.
*/
- if (sc->mii_mpd_rev >= 2) {
+ if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 &&
+ sc->mii_mpd_rev >= 2) {
/* RTL8211B(L) */
reg = PHY_READ(sc, RGEPHY_MII_SSR);
if (reg & RGEPHY_SSR_LINK) {
@@ -298,7 +304,7 @@
mii->mii_media_status = IFM_AVALID;
mii->mii_media_active = IFM_ETHER;
- if (sc->mii_mpd_rev >= 2) {
+ if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
ssr = PHY_READ(sc, RGEPHY_MII_SSR);
if (ssr & RGEPHY_SSR_LINK)
mii->mii_media_status |= IFM_ACTIVE;
@@ -328,7 +334,7 @@
}
}
- if (sc->mii_mpd_rev >= 2) {
+ if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
ssr = PHY_READ(sc, RGEPHY_MII_SSR);
switch (ssr & RGEPHY_SSR_SPD_MASK) {
case RGEPHY_SSR_S1000:
@@ -484,7 +490,7 @@
{
uint16_t ssr;
- if (sc->mii_mpd_rev == 3) {
+ if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev == 3) {
/* RTL8211C(L) */
ssr = PHY_READ(sc, RGEPHY_MII_SSR);
if ((ssr & RGEPHY_SSR_ALDPS) != 0) {
--bCsyhTFzCvuiizWE--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120224044000.GF13815>
