[PATCH] sis190: compare the lpa to the local advertisement
authorFrancois Romieu <romieu@fr.zoreil.com>
Sat, 30 Jul 2005 11:16:14 +0000 (13:16 +0200)
committerJeff Garzik <jgarzik@pobox.com>
Sat, 30 Jul 2005 22:21:01 +0000 (18:21 -0400)
The station control register must depend on both the advertisement and the lpa

The link partner ability has better be intersected with the current
advertised value before it is feed to the station control register.

Sight-catched-by: Lars Vahlenberg <lars.vahlenberg@gmail.com>
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/sis190.c

index 84bc2299f93bd99422978524ee30cecc9e2610b3..915ff009c295e5b997dab5858a26e7e07e65dcfd 100644 (file)
@@ -952,12 +952,17 @@ static void sis190_phy_task(void * data)
                                0x01 | _10bpsH },
                        { 0, "unknown", 0x0000 }
                }, *p;
+               u16 adv;
 
                val = mdio_read(ioaddr, phy_id, 0x1f);
                net_link(tp, KERN_INFO "%s: mii ext = %04x.\n", dev->name, val);
 
                val = mdio_read(ioaddr, phy_id, MII_LPA);
-               net_link(tp, KERN_INFO "%s: mii lpa = %04x.\n", dev->name, val);
+               adv = mdio_read(ioaddr, phy_id, MII_ADVERTISE);
+               net_link(tp, KERN_INFO "%s: mii lpa = %04x adv = %04x.\n",
+                        dev->name, val, adv);
+
+               val &= adv;
 
                for (p = reg31; p->ctl; p++) {
                        if ((val & p->val) == p->val)