Bug 11149

Summary: Unable to get gigabit speeds with sis191 card
Product: Drivers Reporter: Charles Huber (genpfault)
Component: NetworkAssignee: Francois Romieu (romieu)
Status: RESOLVED CODE_FIX    
Severity: normal CC: astarta, sergio
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.31-rc3 Subsystem:
Regression: Yes Bisected commit-id:

Description Charles Huber 2008-07-22 19:42:22 UTC
Latest working kernel version: Unknown
Earliest failing kernel version: 2.6.22
Distribution: Debian lenny, amd64
Hardware Environment: HP MediaSmart Server
Software Environment: 2.6.26 with small PHY patch
Problem Description: I am unable to get the sis191 Gigabit Ethernet in my MediaSmart to talk to my Gigabit switch (Netgear GS605v2) at anything higher than 100Mbit Full Duplex.  The same hardware running Windows Home Server and the latest drivers from SiS can auto-negotiate Gigabit speeds with the Netgear without issue.

dmesg info:
sis190 Gigabit Ethernet driver 1.2 loaded.
ACPI: PCI Interrupt 0000:00:04.0[A] -> GSI 19 (level, low) -> IRQ 19
PCI: Setting latency timer of device 0000:00:04.0 to 64
0000:00:04.0: Read MAC address from EEPROM
0000:00:04.0: HP EX470 PHY transceiver at address 0.
0000:00:04.0: SiS 191 PCI Gigabit Ethernet adapter at ffffc20000320000 (IRQ: 19), 00:0a:e4:86:2a:ae
eth0: RGMII mode.
eth0: Enabling Auto-negotiation.
ADDRCONF(NETDEV_UP): eth0: link is not ready
ADDRCONF(NETDEV_UP): eth0: link is not ready
eth0: mii ext = 0000.
eth0: mii lpa = cde1 adv = 01e1.
eth0: link on 100 Mbps Full Duplex mode.
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

ifconfig output:
eth0      Link encap:Ethernet  HWaddr 00:0a:e4:86:2a:ae
          inet addr:10.0.0.42  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:e4ff:fe86:2aae/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:72 errors:0 dropped:0 overruns:0 frame:0
          TX packets:123 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9050 (8.8 KiB)  TX bytes:19092 (18.6 KiB)
          Interrupt:19 Base address:0xdead

ethtool output:
        Supported ports: [ TP 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: 0
        Transceiver: internal
        Auto-negotiation: on
        Current message level: 0x00000037 (55)
        Link detected: yes


Steps to reproduce:
1) Install 2.6.26
2) Add the HP's PHY info to the mii_chip_table:
{ "HP EX470 PHY", { 0x004d, 0xd010 }, LAN, 0 },
3) Rebuild and reinstall module
Comment 1 Charles Huber 2009-02-04 17:40:53 UTC
Persists in 2.6.29-rc3
Comment 2 Charles Huber 2009-07-16 03:48:07 UTC
Fixed in 2.6.31-rc3, commit 1feede014bf3c58f60b35f91dcd8a2f89b3908ad (I think).

Negotiated Gigabit speeds (>95 MB/s both ways via iperf).  One of my Netgear switches caused the chipset to go into some sort of extended negotiation that never seemed to get to Gigabit; power-cycling the switch seemed to fix the problem.

However, ethtool output remains the same:

        Supported ports: [ TP 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: 0
        Transceiver: internal
        Auto-negotiation: on
        Current message level: 0x00000037 (55)
        Link detected: yes

But dmesg reports the correct speed:

[   17.223186] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   25.512014] eth0: mii ext = 0000.
[   25.536010] eth0: mii lpa=cde1 adv=01e1 exp=000f.
[   25.552007] eth0: link on 1000 Mbps Full Duplex mode.
[   25.552456] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready