Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Oct 2011 11:40:42 -0400
From:      Karim <fodillemlinkarim@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   if_msk.c link negotiation / packet drops
Message-ID:  <4E94637A.5090607@gmail.com>

next in thread | raw e-mail | index | archive | help
Hi List,

Using a Marvell NIC plugged into a CISCO switch I see the 
auto-negotiation failing and even when forcing the device to full-duplex 
we sometimes see packet drops.

Here is the device description from dmesg:

mskc0: <Marvell Yukon 88E8053 Gigabit Ethernet> port 0xbe00-0xbeff mem 
0xfdefc000-0xfdefffff irq 16 at device 0.0 on pci1
msk0: <Marvell Technology Group Ltd. Yukon EC Id 0xb6 Rev 0x02> on mskc0
msk0: Ethernet address: 00:03:2d:09:94:52
miibus0: <MII bus> on msk0
e1000phy0: <Marvell 88E1111 Gigabit PHY> PHY 0 on miibus0
e1000phy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 
1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master, auto, auto-flow
mskc0: [ITHREAD]

The switch its plugged in (Cisco) is configured for 100baseTX full-duplex.

ifconfig reports:

msk0: 
flags=608843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,SATELLITE,LAN_NET> 
metric 0 mtu 1500
         options=40018<VLAN_MTU,VLAN_HWTAGGING>
         ether 00:03:2d:09:94:52
         inet 192.168.122.7 netmask 0xffffff00 broadcast 192.168.122.255
         media: Ethernet autoselect (100baseTX <half-duplex>)
         status: active

I added a bit of debugging code in e1000phy_status in the hope to 
understand what was going on:

     bmsr = PHY_READ(sc, E1000_SR) | PHY_READ(sc, E1000_SR);
     bmcr = PHY_READ(sc, E1000_CR);
     ssr = PHY_READ(sc, E1000_SSR);

     printf("%s ssr 0x%x bmsr 0x%x bmcr 0x%x\n", __func__, ssr, bmsr, bmcr);

Which consistently gives:

  kernel: e1000phy_status ssr 0x4d00 bmsr 0x796d bmcr 0x1000

Now and then the system will report the device is going inactive and we 
can see packet drops when that happens. This repeat itself once in a 
while without being predictable.

By the way on a 7.4 system this was happening every 10 min. Using a 
driver from FBSD9 back ported to 7.4 we see the issue at a much lower 
frequency (every 30 min) but the issue is still there.

Cheers,

Karim.





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