Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Feb 2007 02:28:00 +0300
From:      Oleg Bulyzhin <oleg@freebsd.org>
To:        Robin Gruyters <r.gruyters@yirdis.nl>
Cc:        freebsd-net@freebsd.org
Subject:   Re: [Fwd: Re: bge Ierr rate increase from 5.3R -> 6.1R]
Message-ID:  <20070205232800.GA45487@lath.rinet.ru>
In-Reply-To: <20070125170532.c9c2374hkwk4oc4k@server.yirdis.net>
References:  <20070125170532.c9c2374hkwk4oc4k@server.yirdis.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--k+w/mQv8wyuph6w0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Thu, Jan 25, 2007 at 05:05:32PM +0100, Robin Gruyters wrote:
> On 13-Jan-2007 Oleg Bulyzhin wrote:
> >
> >> Could you please test attached patch? It should fix ierrs issue  
> >and should not
> >> break link events (would be fine to test it: unplug/plug cable,  
> >try to change
> >> media with ifconfig, change media on other end of wire).
> >>
> Hi ya,
> 
> Just wondering will this patch/update be available for RELENG_6? I  
> have the same problems here with 3 of our servers.
> 
> Here is dmesg from our development server:
> 
> [...]
> Copyright (c) 1992-2007 The FreeBSD Project.
> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
>         The Regents of the University of California. All rights reserved.
> FreeBSD is a registered trademark of The FreeBSD Foundation.
> FreeBSD 6.2-RELEASE #1: Mon Jan 15 15:34:19 CET 2007
>     root@server.yirdis.net:/data/obj/data/src_6_2/sys/YIRDIS
> Timecounter "i8254" frequency 1193182 Hz quality 0
> CPU: Intel(R) Xeon(TM) CPU 3.00GHz (3000.12-MHz 686-class CPU)
>   Origin = "GenuineIntel"  Id = 0xf41  Stepping = 1
>    
> Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
>   Features2=0x641d<SSE3,RSVD2,MON,DS_CPL,CNTX-ID,CX16,<b14>>
>   AMD Features=0x20000000<LM>
>   Logical CPUs per core: 2
> real memory  = 2147430400 (2047 MB)
> avail memory = 2100547584 (2003 MB)
> ACPI APIC Table: <HP     00000083>
> Security auditing service present
> BSM auditing present
> ioapic1: Changing APIC ID to 9
> ioapic0 <Version 2.0> irqs 0-23 on motherboard
> ioapic1 <Version 2.0> irqs 24-47 on motherboard
> ioapic2 <Version 2.0> irqs 48-71 on motherboard
> ioapic3 <Version 2.0> irqs 72-95 on motherboard
> acpi0: <HP P52> on motherboard
> acpi0: Power Button (fixed)
> Timecounter "ACPI-safe" frequency 3579545 Hz quality 1000
> acpi_timer0: <24-bit timer at 3.579545MHz> port 0x908-0x90b on acpi0
> cpu0: <ACPI CPU> on acpi0
> pcib0: <ACPI Host-PCI bridge> on acpi0
> pci0: <ACPI PCI bus> on pcib0
> pcib1: <ACPI PCI-PCI bridge> at device 2.0 on pci0
> pci13: <ACPI PCI bus> on pcib1
> pcib2: <ACPI PCI-PCI bridge> at device 4.0 on pci0
> pci6: <ACPI PCI bus> on pcib2
> pcib3: <ACPI PCI-PCI bridge> at device 0.0 on pci6
> pci7: <ACPI PCI bus> on pcib3
> pcib4: <ACPI PCI-PCI bridge> at device 0.2 on pci6
> pci10: <ACPI PCI bus> on pcib4
> pcib5: <PCI-PCI bridge> at device 1.0 on pci10
> pci11: <PCI bus> on pcib5
> ste0: <D-Link DL10050 10/100BaseTX> port 0x5000-0x507f irq 72 at  
> device 4.0 on pci11
> miibus0: <MII bus> on ste0
> ukphy0: <Generic IEEE 802.3u media interface> on miibus0
> ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> ste0: Ethernet address: 00:0d:88:fc:c8:cc
> ste1: <D-Link DL10050 10/100BaseTX> port 0x5080-0x50ff irq 73 at  
> device 5.0 on pci11
> miibus1: <MII bus> on ste1
> ukphy1: <Generic IEEE 802.3u media interface> on miibus1
> ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> ste1: Ethernet address: 00:0d:88:fc:c8:cd
> ste2: <D-Link DL10050 10/100BaseTX> port 0x5400-0x547f irq 74 at  
> device 6.0 on pci11
> miibus2: <MII bus> on ste2
> ukphy2: <Generic IEEE 802.3u media interface> on miibus2
> ukphy2:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> ste2: Ethernet address: 00:0d:88:fc:c8:ce
> ste3: <D-Link DL10050 10/100BaseTX> port 0x5480-0x54ff irq 75 at  
> device 7.0 on pci11
> miibus3: <MII bus> on ste3
> ukphy3: <Generic IEEE 802.3u media interface> on miibus3
> ukphy3:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> ste3: Ethernet address: 00:0d:88:fc:c8:cf
> pcib6: <ACPI PCI-PCI bridge> at device 6.0 on pci0
> pci3: <ACPI PCI bus> on pcib6
> pcib7: <ACPI PCI-PCI bridge> at device 28.0 on pci0
> pci2: <ACPI PCI bus> on pcib7
> ciss0: <HP Smart Array 6i> port 0x4000-0x40ff mem  
> 0xfdff0000-0xfdff1fff,0xfdf80000-0xfdfbffff irq 24 at device 1.0 on pci2
> ciss0: [GIANT-LOCKED]
> bge0: <Broadcom BCM5704 B0, ASIC rev. 0x2100> mem  
> 0xfdf70000-0xfdf7ffff irq 25 at device 2.0 on pci2
> miibus4: <MII bus> on bge0
> brgphy0: <BCM5704 10/100/1000baseTX PHY> on miibus4
> brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX,  
> 1000baseTX-FDX, auto
> bge0: Ethernet address: 00:12:79:94:ed:12
> bge1: <Broadcom BCM5704 B0, ASIC rev. 0x2100> mem  
> 0xfdf60000-0xfdf6ffff irq 26 at device 2.1 on pci2
> miibus5: <MII bus> on bge1
> brgphy1: <BCM5704 10/100/1000baseTX PHY> on miibus5
> brgphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX,  
> 1000baseTX-FDX, auto
> bge1: Ethernet address: 00:12:79:94:ed:11
> pci0: <serial bus, USB> at device 29.0 (no driver attached)
> pci0: <serial bus, USB> at device 29.1 (no driver attached)
> pci0: <base peripheral> at device 29.4 (no driver attached)
> pci0: <base peripheral, interrupt controller> at device 29.5 (no  
> driver attached)
> pci0: <serial bus, USB> at device 29.7 (no driver attached)
> pcib8: <ACPI PCI-PCI bridge> at device 30.0 on pci0
> pci1: <ACPI PCI bus> on pcib8
> pci1: <display, VGA> at device 3.0 (no driver attached)
> pci1: <base peripheral> at device 4.0 (no driver attached)
> pci1: <base peripheral> at device 4.2 (no driver attached)
> isab0: <PCI-ISA bridge> at device 31.0 on pci0
> isa0: <ISA bus> on isab0
> atapci0: <Intel 6300ESB UDMA100 controller> port  
> 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x500-0x50f irq 18 at device 31.1  
> on pci0
> ata0: <ATA channel 0> on atapci0
> ata1: <ATA channel 1> on atapci0
> acpi_tz0: <Thermal Zone> on acpi0
> atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
> atkbd0: <AT Keyboard> irq 1 on atkbdc0
> kbd0 at atkbd0
> atkbd0: [GIANT-LOCKED]
> psm0: <PS/2 Mouse> irq 12 on atkbdc0
> psm0: [GIANT-LOCKED]
> psm0: model IntelliMouse Explorer, device ID 4
> sio0: <Standard PC COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
> sio0: type 16550A
> fdc0: <floppy drive controller (FDE)> port 0x3f2-0x3f5 irq 6 drq 2 on acpi0
> fdc0: [FAST]
> fd0: <1440-KB 3.5" drive> on fdc0 drive 0
> pmtimer0 on isa0
> orm0: <ISA Option ROMs> at iomem  
> 0xc0000-0xc7fff,0xc8000-0xcbfff,0xee000-0xeffff on isa0
> sc0: <System console> at flags 0x100 on isa0
> sc0: VGA <16 virtual consoles, flags=0x300>
> sio1 at port 0x2f8-0x2ff irq 3 on isa0
> sio1: type 16550A
> vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
> Timecounter "TSC" frequency 3000124702 Hz quality 800
> Timecounters tick every 1.000 msec
> acd0: CDROM <COMPAQ CD-ROM SN-124/N104> at ata0-master PIO4
> da0 at ciss0 bus 0 target 0 lun 0
> da0: <COMPAQ RAID 1  VOLUME OK> Fixed Direct Access SCSI-0 device
> da0: 135.168MB/s transfers
> da0: 69459MB (142253280 512 byte sectors: 255H 32S/T 17433C)
> Trying to mount root from ufs:/dev/da0s1a
> Accounting enabled
> [...]
> 
> And here the netstat interface statistics:
> [...]
> Name    Mtu Network       Address              Ipkts Ierrs    Opkts  
> Oerrs  Coll
> ste0*  1500 <Link#1>      00:0d:88:fc:c8:cc        0     0        0     
>  0     0
> ste1*  1500 <Link#2>      00:0d:88:fc:c8:cd        0     0        0     
>  0     0
> ste2*  1500 <Link#3>      00:0d:88:fc:c8:ce        0     0        0     
>  0     0
> ste3*  1500 <Link#4>      00:0d:88:fc:c8:cf        0     0        0     
>  0     0
> bge0   1500 <Link#5>      00:12:79:94:ed:12 11343768 2114510 20564242   
>    0     0
> bge1*  1500 <Link#6>      00:12:79:94:ed:11        0     0        0     
>  0     0
> pflog 33208 <Link#7>                               0     0        0     
>  0     0
> lo0   16384 <Link#8>                        60221421     0 60221421     
>  0     0
> [...]
> 
> If you have a patch for FreeBSD 6.2, i'm quite happily to test it on  
> our development server.
> 
> Regards,
> 
> Robin Gruyters
> 

Sorry for the late reply - i was AFK for some time and didnt read mails.
Patch against 6.2R attached, please let me know does it helps or not.

-- 
Oleg.

================================================================
=== Oleg Bulyzhin -- OBUL-RIPN -- OBUL-RIPE -- oleg@rinet.ru ===
================================================================


--k+w/mQv8wyuph6w0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="bge_link.r62.diff"

Index: sys/dev/bge/if_bgereg.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/bge/if_bgereg.h,v
retrieving revision 1.36.2.8.2.1
diff -u -r1.36.2.8.2.1 if_bgereg.h
--- sys/dev/bge/if_bgereg.h	21 Dec 2006 21:53:54 -0000	1.36.2.8.2.1
+++ sys/dev/bge/if_bgereg.h	5 Feb 2007 23:23:22 -0000
@@ -2460,8 +2460,13 @@
 	uint32_t		bge_tx_buf_ratio;
 	int			bge_if_flags;
 	int			bge_txcnt;
-	int			bge_link;	/* link state */
-	int			bge_link_evt;	/* pending link event */
+	uint32_t		bge_sts;
+#define	BGE_STS_LINK		0x00000001	/* MAC link status */
+#define	BGE_STS_LINK_EVT	0x00000002	/* pending link event */
+#define	BGE_STS_AUTOPOLL	0x00000004	/* PHY auto-polling  */
+#define BGE_STS_BIT(sc, x)	((sc)->bge_sts & (x))
+#define BGE_STS_SETBIT(sc, x)	((sc)->bge_sts |= (x))
+#define BGE_STS_CLRBIT(sc, x)	((sc)->bge_sts &= ~(x))
 	struct callout		bge_stat_ch;
 	char			*bge_vpd_prodname;
 	char			*bge_vpd_readonly;
Index: sys/dev/bge/if_bge.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/bge/if_bge.c,v
retrieving revision 1.91.2.18.2.1
diff -u -r1.91.2.18.2.1 if_bge.c
--- sys/dev/bge/if_bge.c	21 Dec 2006 21:53:54 -0000	1.91.2.18.2.1
+++ sys/dev/bge/if_bge.c	5 Feb 2007 23:23:29 -0000
@@ -602,6 +602,7 @@
 	/* Reading with autopolling on may trigger PCI errors */
 	autopoll = CSR_READ_4(sc, BGE_MI_MODE);
 	if (autopoll & BGE_MIMODE_AUTOPOLL) {
+		BGE_STS_CLRBIT(sc, BGE_STS_AUTOPOLL);
 		BGE_CLRBIT(sc, BGE_MI_MODE, BGE_MIMODE_AUTOPOLL);
 		DELAY(40);
 	}
@@ -615,6 +616,7 @@
 	}
 
 	if (autopoll & BGE_MIMODE_AUTOPOLL) {
+		BGE_STS_SETBIT(sc, BGE_STS_AUTOPOLL);
 		BGE_SETBIT(sc, BGE_MI_MODE, BGE_MIMODE_AUTOPOLL);
 		DELAY(40);
 	}
@@ -1456,6 +1458,7 @@
 	if (sc->bge_tbi) {
 		CSR_WRITE_4(sc, BGE_MI_STS, BGE_MISTS_LINK);
 	} else {
+		BGE_STS_SETBIT(sc, BGE_STS_AUTOPOLL);
 		BGE_SETBIT(sc, BGE_MI_MODE, BGE_MIMODE_AUTOPOLL|10<<16);
 		if (sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
 		    sc->bge_chipid != BGE_CHIPID_BCM5700_B2)
@@ -2645,12 +2648,12 @@
 
 	/* Note link event. It will be processed by POLL_AND_CHECK_STATUS cmd */
 	if (statusword & BGE_STATFLAG_LINKSTATE_CHANGED)
-		sc->bge_link_evt++;
+		BGE_STS_SETBIT(sc, BGE_STS_LINK_EVT);
 
 	if (cmd == POLL_AND_CHECK_STATUS)
 		if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
 		    sc->bge_chipid != BGE_CHIPID_BCM5700_B2) ||
-		    sc->bge_link_evt || sc->bge_tbi)
+		    BGE_STS_BIT(sc, BGE_STS_LINK_EVT) || sc->bge_tbi)
 			bge_link_upd(sc);
 
 	sc->rxcycles = count;
@@ -2699,7 +2702,7 @@
 
 	if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
 	    sc->bge_chipid != BGE_CHIPID_BCM5700_B2) ||
-	    statusword || sc->bge_link_evt)
+	    statusword || BGE_STS_BIT(sc, BGE_STS_LINK_EVT))
 		bge_link_upd(sc);
 
 	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
@@ -2733,8 +2736,10 @@
 		bge_stats_update(sc);
 
 	if (!sc->bge_tbi) {
-		mii = device_get_softc(sc->bge_miibus);
-		mii_tick(mii);
+		if (!BGE_STS_BIT(sc, BGE_STS_LINK)) {
+			mii = device_get_softc(sc->bge_miibus);
+			mii_tick(mii);
+		}
 	} else {
 		/*
 		 * Since in TBI mode auto-polling can't be used we should poll
@@ -2746,7 +2751,7 @@
 		if (!(sc->bge_ifp->if_capenable & IFCAP_POLLING))
 #endif
 		{
-		sc->bge_link_evt++;
+		BGE_STS_SETBIT(sc, BGE_STS_LINK_EVT);
 		BGE_SETBIT(sc, BGE_MISC_LOCAL_CTL, BGE_MLC_INTR_SET);
 		}
 	}
@@ -2988,7 +2993,7 @@
 
 	sc = ifp->if_softc;
 
-	if (!sc->bge_link || IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	if (!BGE_STS_BIT(sc, BGE_STS_LINK) || IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		return;
 
 	prodidx = sc->bge_tx_prodidx;
@@ -3264,7 +3269,7 @@
 		return (0);
 	}
 
-	sc->bge_link_evt++;
+	BGE_STS_SETBIT(sc, BGE_STS_LINK_EVT);
 	mii = device_get_softc(sc->bge_miibus);
 	if (mii->mii_instance) {
 		struct mii_softc *miisc;
@@ -3563,9 +3568,9 @@
 	 * lead to hardware deadlock. So we just clearing MAC's link state
 	 * (PHY may still have link UP).
 	 */
-	if (bootverbose && sc->bge_link)
+	if (bootverbose && BGE_STS_BIT(sc, BGE_STS_LINK))
 		if_printf(sc->bge_ifp, "link DOWN\n");
-	sc->bge_link = 0;
+	BGE_STS_CLRBIT(sc, BGE_STS_LINK);
 
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 }
@@ -3623,12 +3628,12 @@
 bge_link_upd(struct bge_softc *sc)
 {
 	struct mii_data *mii;
-	uint32_t link, status;
+	uint32_t status;
 
 	BGE_LOCK_ASSERT(sc);
 
 	/* Clear 'pending link event' flag. */
-	sc->bge_link_evt = 0;
+	BGE_STS_CLRBIT(sc, BGE_STS_LINK_EVT);
 
 	/*
 	 * Process link state changes.
@@ -3649,20 +3654,18 @@
 	    sc->bge_chipid != BGE_CHIPID_BCM5700_B2) {
 		status = CSR_READ_4(sc, BGE_MAC_STS);
 		if (status & BGE_MACSTAT_MI_INTERRUPT) {
-			callout_stop(&sc->bge_stat_ch);
-			bge_tick_locked(sc);
-
 			mii = device_get_softc(sc->bge_miibus);
-			if (!sc->bge_link &&
+			mii_pollstat(mii);
+			if (!BGE_STS_BIT(sc, BGE_STS_LINK) &&
 			    mii->mii_media_status & IFM_ACTIVE &&
 			    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
-				sc->bge_link++;
+				BGE_STS_SETBIT(sc, BGE_STS_LINK);
 				if (bootverbose)
 					if_printf(sc->bge_ifp, "link UP\n");
-			} else if (sc->bge_link &&
+			} else if (BGE_STS_BIT(sc, BGE_STS_LINK) &&
 			    (!(mii->mii_media_status & IFM_ACTIVE) ||
 			    IFM_SUBTYPE(mii->mii_media_active) == IFM_NONE)) {
-				sc->bge_link = 0;
+				BGE_STS_CLRBIT(sc, BGE_STS_LINK);
 				if (bootverbose)
 					if_printf(sc->bge_ifp, "link DOWN\n");
 			}
@@ -3680,8 +3683,8 @@
 	if (sc->bge_tbi) {
 		status = CSR_READ_4(sc, BGE_MAC_STS);
 		if (status & BGE_MACSTAT_TBI_PCS_SYNCHED) {
-			if (!sc->bge_link) {
-				sc->bge_link++;
+			if (!BGE_STS_BIT(sc, BGE_STS_LINK)) {
+				BGE_STS_SETBIT(sc, BGE_STS_LINK);
 				if (sc->bge_asicrev == BGE_ASICREV_BCM5704)
 					BGE_CLRBIT(sc, BGE_MAC_MODE,
 					    BGE_MACMODE_TBI_SEND_CFGS);
@@ -3691,42 +3694,38 @@
 				if_link_state_change(sc->bge_ifp,
 				    LINK_STATE_UP);
 			}
-		} else if (sc->bge_link) {
-			sc->bge_link = 0;
+		} else if (BGE_STS_BIT(sc, BGE_STS_LINK)) {
+			BGE_STS_CLRBIT(sc, BGE_STS_LINK);
 			if (bootverbose)
 				if_printf(sc->bge_ifp, "link DOWN\n");
 			if_link_state_change(sc->bge_ifp, LINK_STATE_DOWN);
 		}
-	/* Discard link events for MII/GMII cards if MI auto-polling disabled */
-	} else if (CSR_READ_4(sc, BGE_MI_MODE) & BGE_MIMODE_AUTOPOLL) {
-		/*
-		 * Some broken BCM chips have BGE_STATFLAG_LINKSTATE_CHANGED bit
-		 * in status word always set. Workaround this bug by reading
-		 * PHY link status directly.
-		 */
-		link = (CSR_READ_4(sc, BGE_MI_STS) & BGE_MISTS_LINK) ? 1 : 0;
-
-		if (link != sc->bge_link ||
-		    sc->bge_asicrev == BGE_ASICREV_BCM5700) {
-			callout_stop(&sc->bge_stat_ch);
-			bge_tick_locked(sc);
-
-			mii = device_get_softc(sc->bge_miibus);
-			if (!sc->bge_link &&
-			    mii->mii_media_status & IFM_ACTIVE &&
-			    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
-				sc->bge_link++;
-				if (bootverbose)
-					if_printf(sc->bge_ifp, "link UP\n");
-			} else if (sc->bge_link &&
-			    (!(mii->mii_media_status & IFM_ACTIVE) ||
-			    IFM_SUBTYPE(mii->mii_media_active) == IFM_NONE)) {
-				sc->bge_link = 0;
-				if (bootverbose)
-					if_printf(sc->bge_ifp, "link DOWN\n");
-			}
-		}
-	}
+	/*
+	 * Discard link events for MII/GMII cards if MI auto-polling disabled.
+	 * This should not happen since mii callouts are locked now, but
+	 * we keep this check for debug.
+	 */
+	} else if (BGE_STS_BIT(sc, BGE_STS_AUTOPOLL)) {
+		mii = device_get_softc(sc->bge_miibus);
+		mii_pollstat(mii);
+  
+		if (!BGE_STS_BIT(sc, BGE_STS_LINK) &&
+		    mii->mii_media_status & IFM_ACTIVE &&
+		    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
+			BGE_STS_SETBIT(sc, BGE_STS_LINK);
+			if (bootverbose)
+				if_printf(sc->bge_ifp, "link UP\n");
+		} else if (BGE_STS_BIT(sc, BGE_STS_LINK) &&
+		    (!(mii->mii_media_status & IFM_ACTIVE) ||
+		    IFM_SUBTYPE(mii->mii_media_active) == IFM_NONE)) {
+			BGE_STS_CLRBIT(sc, BGE_STS_LINK);
+			if (bootverbose)
+				if_printf(sc->bge_ifp, "link DOWN\n");
+  		}
+	} else
+		/* Should not happen, see above. */
+		if_printf(sc->bge_ifp,
+		    "link event discarded: PHY auto-polling is off.\n");
 
 	/* Clear the attention. */
 	CSR_WRITE_4(sc, BGE_MAC_STS, BGE_MACSTAT_SYNC_CHANGED|
Index: sys/dev/mii/brgphy.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/mii/brgphy.c,v
retrieving revision 1.34.2.7
diff -u -r1.34.2.7 brgphy.c
--- sys/dev/mii/brgphy.c	21 Oct 2006 00:26:41 -0000	1.34.2.7
+++ sys/dev/mii/brgphy.c	5 Feb 2007 23:23:39 -0000
@@ -464,6 +464,9 @@
 			return;
 		}
 
+		if (bmsr & BRGPHY_BMSR_LINK)
+			sc->mii_ticks = 0;	/* Reset autoneg timer. */
+
 		switch (PHY_READ(sc, BRGPHY_MII_AUXSTS) &
 		    BRGPHY_AUXSTS_AN_RES) {
 		case BRGPHY_RES_1000FD:

--k+w/mQv8wyuph6w0--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070205232800.GA45487>