On Sun, 2009-08-09 at 07:41 -0700, Steve Langasek wrote:
> On Fri, Aug 07, 2009 at 01:08:36PM +0100, Ben Hutchings wrote:
> > On Tue, 2009-08-04 at 07:31 -0700, Martin Michlmayr wrote:
> > > reopen 494363
> > > thanks
> 
> > > vorlon recently tested 2.6.30 and said this bug is still there.
> 
> > Can you build the module with RTL8169_DEBUG defined and send the kernel
> > log messages it generates on load?
> 
> > Given a configured kernel build tree, you should be able to do this
> > with:
> >     rm -f drivers/net/r8169.ko
> >     make EXTRA_CFLAGS=-DRTL8169_DEBUG drivers/net/r8169.ko
> 
> Here you are:
> 
> [1573779.780000] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
> [1573779.790000] r8169 0000:00:01.0: no PCI Express capability
> [1573779.790000] r8169: mac_version = 0x04
> [1573779.790000] eth0: RTL8169sb/8110sb at 0xc8ec0200, 00:14:fd:30:2b:d6, XID 
> 10000000 IRQ 27
> [1573779.800000] r8169: mac_version = 0x04
> [1573779.800000] r8169: Set MAC Reg C+CR Offset 0x82h = 0x01h
> [1573779.800000] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
> [1573779.810000] r8169 0000:00:02.0: no PCI Express capability
> [1573779.820000] r8169: mac_version = 0x04
> [1573779.820000] eth1: RTL8169sb/8110sb at 0xc8ec4300, 00:14:fd:30:2b:d7, XID 
> 10000000 IRQ 30
> [1573779.830000] r8169: mac_version = 0x04
> [1573779.830000] r8169: Set MAC Reg C+CR Offset 0x82h = 0x01h
> [1573780.570000] r8169: eth0: link down
> [1573780.570000] ADDRCONF(NETDEV_UP): eth0: link is not ready
> [1573781.340000] r8169: eth0: link up
> [1573781.340000] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Now that I've looked at the differences between different controller
revisions, it appears that the switch in byte ordering for the multicast
hash bitmap was made between the RTL8169 family (PCI) and RTL8168 family
(PCI Express).  The recent fix applied to some members of the latter
family.

One difference I noted between the vendor driver and the in-tree driver
is in the ordering of register writes.  It probably doesn't make a
difference, but perhaps you could try changing:

        RTL_W32(MAR0 + 0, mc_filter[0]);
        RTL_W32(MAR0 + 4, mc_filter[1]);

        RTL_W32(RxConfig, tmp);

to:

        RTL_W32(RxConfig, tmp);
        RTL_W32(MAR0 + 0, mc_filter[0]);
        RTL_W32(MAR0 + 4, mc_filter[1]);

in rtl_set_rx_mode().

Ben.

-- 
Ben Hutchings
Unix is many things to many people,
but it's never been everything to anybody.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to