Comment 36 for bug 564984

Revision history for this message
Fisslefink (erin-simonds) wrote : Re: r8169 fails to autonegotiate speed/duplex

I just wanted to post some troubleshooting advice for others who think they may be affected by this bug. I was experiencing the "link down" and autonegotiation issues, which were resolvable with 'sudo ethtool -s eth0 autoneg off' but that gave me a virtually useless 10BaseT/half connection! I now have a Gigabit connection and the coveted green light on my router. I thought it was a software problem, but it was in fact a **temporary hardware bug**.

I spent about 10 hours troubleshooting with different drivers, kernels, and ethtool settings before discovering the problem was really due to a corrupted residual memory on the network card. So, before doing wasting your time troubleshooting, try this:

1) power down the computer safely
2) unplugging the network cable and power cable from the computer
3) wait 15 minutes
4) plug the cables back in
5) power on the computer
6) wait 2 minutes for the link to autonegotiate
7) check link status based on the lights on the router/card (preferred) or ethtool (can be incorrect if the wrong kernel module is installed)

Many thanks to 'tgalati4' at this post for the advice:
http://ubuntuforums.org/archive/index.php/t-1480328.html

I'm now using Maverick 10.10 with the Realtek driver, compiled as shown here:
http://djlab.com/2010/10/fixing-rtl8111-8168b-driver-debian-ubuntu/

However, I suspect the r8169 driver supplied with the kernel would work, now that I've resolved the hardware issue.

This solution may not fix all problems with r8168 cards, but it's **so easy** that you should really try it before troubleshooting the software.

- Fisslefink

Additional details of my **working** configuration:

Hardware: Zotac Zbox HD-ID11

mythtv@beagle:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"

mythtv@beagle:~$ lspci|grep Real
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)

mythtv@beagle:~$ uname -a
Linux beagle 2.6.37-020637rc2-generic #201011160905 SMP Tue Nov 16 10:15:47 UTC 2010 i686 GNU/Linux

mythtv@beagle:~$ sudo ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes: 10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes: 10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000033 (51)
        Link detected: yes

mythtv@beagle:~$ sudo ethtool -i eth0
driver: r8168
version: 8.019.00-NAPI
firmware-version:
bus-info: 0000:01:00.0

mythtv@beagle:~$ sudo modinfo r8168 #do modinfo r8169 if you're not using the Realtek driver
filename: /lib/modules/2.6.37-020637rc2-generic/kernel/drivers/net/r8168.ko
version: 8.019.00-NAPI
license: GPL
description: RealTek RTL-8168 Gigabit Ethernet driver
author: Realtek and the Linux r8168 crew <email address hidden>
srcversion: C6A00D0CB85CAF6116D44A4
alias: pci:v000010ECd00008168sv*sd*bc*sc*i*
depends:
vermagic: 2.6.37-020637rc2-generic SMP mod_unload modversions 686
parm: speed:force phy operation. Deprecated by ethtool (8). (array of int)
parm: duplex:force phy operation. Deprecated by ethtool (8). (array of int)
parm: autoneg:force phy operation. Deprecated by ethtool (8). (array of int)
parm: rx_copybreak:Copy breakpoint for copy-only-tiny-frames (int)
parm: use_dac:Enable PCI DAC. Unsafe on 32 bit PCI slot. (int)
parm: debug:Debug verbosity level (0=none, ..., 16=all) (int)