[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Weirdness with realtek 8169



Hei!

Juhan Kundla kirjutas:

[...]

> I have weird problem with my NIC. It has the Realtek 8169 chip on it.
> The r8169 kernel module should drive it. The floppy, it came with, has
> the r8169.c source on it.
> 
> But when i compile the r8169 kernel module (either the one from kernel
> source tree or the one from the floppy) it just won't load. I tried
> different kernel versions and configurations, nothing. The r8169 module
> will not initialize the interface. I tried both 2.6.8 and 2.4.27
> kernels.
> 
> Now begins the weird stuff. lspci and /proc/pci shows, that this card
> says, that it is actually with realtek 8129 chip. This means, that
> 8139too module should actually drive this card. The 8129 is Fast
> Ethernet, but i bought a gigabit ethernet card and the chip has 8169
> written on it!

This problem is now sorted out. Here is the solution, if someone does
this kind of bookkeeping.

My NIC announces wrong device ID on PCI bus. It should be 8169, but it
actually is 8129. Operating system drivers expect certain device ID and
they'll load only when this device ID matches. That is why the r8169
module from kernel did not initialize this NIC.

Ironically, the device ID 8129 belongs to another realtek NIC, which is
drived by 8139too kernel module. This was a source to much of confusion.
This 8139too driver loaded, but gave lots of puzzling errors.

In the beginning i was thinking, that there is something wrong with my
NICs firmware, perhaps some terrible mixup had happened in the factory.
In my worst nightmares i was dreaming, that they are shipping 8169 NICs
with 8129 firmware and vice versa. Well, luckily this is not the
case. :-)

Actually seems, that my NIC hardware has one bit of information reversed
by accident.

1000 0001 0110 1001 = 8169
1000 0001 0010 1001 = 8129

As a workaround i changed the Realtek's r8169 driver source to match
this incorrect device ID. See the patch below, with my changes. This
worked only with driver from Realtek website, but not with the driver
from kernel (2.6.8) source tree.

Complete solution was to return this defective NIC and get a new one.


Juhan


diff -urN r8169/src/r8169_n.c r8169.new/src/r8169_n.c
--- r8169/src/r8169_n.c 2004-08-09 11:54:32.000000000 +0300
+++ r8169.new/src/r8169_n.c     2004-10-18 17:59:35.000000000 +0300
@@ -183,7 +183,7 @@


 static struct pci_device_id rtl8169_pci_tbl[] __devinitdata = {
-       { 0x10ec, 0x8169, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+       { 0x10ec, 0x8129, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
        {0,},
 };



Reply to: