Subject: forcedeth gigabit detection

From: Frank v Waveren <[email-masked]>
Date: Mon, 7 Aug 2006 17:42:35 +0200

(sorry about sending this to you twice Carl-Daniel, I sent this to
@oss.sgi.com by accident)

The nforce2 builtin network on my A7N8X-delux motherboard won't detect
as gigabit-capable using the forcedeth driver. 

I'm using the forcedeth driver that comes with linux 2.6.17 (which is
0.54).

Ethtool gives:
Settings for eth1:
        Supported ports: [ MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: external
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes

I assume the supported link modes are those supported by the NIC, not
the link (It's a short piece of cat5 between the two cards (no
switch/hub), it should support gigabit but you never know)?

The odd thing is the NIC on the other side of the cable (which is also
a forcedeth from the nforce3 chipset) detects as:
Settings for eth0:
        Supported ports: [ MII ]
        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 auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: externel
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes

Here's the debugging output from the forcedeth that won't do gigabit
on module load and bringing the interface up:
Aug  7 15:52:46 jupiter kernel: PCI: Setting latency timer of device 0000:00:04.0 to 64
Aug  7 15:52:46 jupiter kernel: 0000:00:04.0: resource 0 start df083000 len 4096 flags 0x00000200.
Aug  7 15:52:46 jupiter kernel: 0000:00:04.0: MAC Address 00:0e:a6:0b:6f:73
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 2 at PHY 1: 0x0.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 3 at PHY 1: 0x8201.
Aug  7 15:52:46 jupiter kernel: 0000:00:04.0: open: Found PHY 0000:0020 at address 1.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 4 at PHY 1: 0x1e1.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw wrote 0xde1 to reg 4 at PHY 1
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 1 at PHY 1: 0x786d.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 0 at PHY 1: 0x3100.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw wrote 0xb100 to reg 0 at PHY 1
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 0 at PHY 1: 0x3000.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw read from reg 0 at PHY 1: 0x3000.
Aug  7 15:52:46 jupiter kernel: eth%%d: mii_rw wrote 0x3200 to reg 0 at PHY 1
Aug  7 15:53:03 jupiter kernel: nv_open: begin
Aug  7 15:53:03 jupiter kernel: eth1: nv_alloc_rx: Packet 0 marked as Available
...
Aug  7 15:53:03 jupiter kernel: eth1: nv_alloc_rx: Packet 127 marked as Available
Aug  7 15:53:03 jupiter kernel: eth1: nv_txrx_reset
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 1 at PHY 1: 0x786d.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 1 at PHY 1: 0x786d.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 4 at PHY 1: 0x1e1.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 5 at PHY 1: 0xc5e1.
Aug  7 15:53:03 jupiter kernel: eth1: nv_update_linkspeed: PHY advertises 0x01e1, lpa 0xc5e1.
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_tx
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_stop_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_rx to duplex 1, speed 0x00010064.
Aug  7 15:53:03 jupiter kernel: eth1: nv_nic_irq
Aug  7 15:53:03 jupiter kernel: eth1: irq: 00000020
Aug  7 15:53:03 jupiter kernel: eth1: nv_rx_process: looking at packet 128, Flags 0x8000061c.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 1 at PHY 1: 0x786d.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 1 at PHY 1: 0x786d.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 4 at PHY 1: 0x1e1.
Aug  7 15:53:03 jupiter kernel: eth1: mii_rw read from reg 5 at PHY 1: 0xc5e1.
Aug  7 15:53:03 jupiter kernel: eth1: nv_update_linkspeed: PHY advertises 0x01e1, lpa 0xc5e1.
Aug  7 15:53:03 jupiter kernel: eth1: irq: 00000000
Aug  7 15:53:03 jupiter kernel: eth1: nv_nic_irq completed
Aug  7 15:53:03 jupiter kernel: eth1: nv_start_xmit: packet 0 (entries 1) queued for transmission. tx_flags_extra: 0
Aug  7 15:53:03 jupiter kernel: eth1: nv_nic_irq
Aug  7 15:53:03 jupiter kernel: eth1: irq: 00000010
Aug  7 15:53:03 jupiter kernel: eth1: nv_tx_done: looking at packet 0, Flags 0x1005e.
Aug  7 15:53:03 jupiter kernel: eth1: nv_rx_process: looking at packet 128, Flags 0x8000061c.
Aug  7 15:53:03 jupiter kernel: eth1: irq: 00000000
Aug  7 15:53:03 jupiter kernel: eth1: nv_nic_irq completed
Aug  7 15:53:03 jupiter kernel: eth1: nv_nic_irq
Aug  7 15:53:03 jupiter kernel: eth1: irq: 00000020

I haven't tried the old closed-source nvnet driver yet as it won't
compile with gcc 4, but I can get an older gcc and recompile
the kernel if necessary.

I'd be most grateful for any advice you might have on getting things
working, if anyone needs any further information please let me know.

-- 
Frank v Waveren                                  Key fingerprint: BDD7 D61E
[email-masked]                                              5D39 CF05 4BFC F57A
Public key: hkp://wwwkeys.pgp.net/468D62C8              FA00 7D51 468D 62C8