浏览代码

[PATCH] sis190: compare the lpa to the local advertisement

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>
Francois Romieu 20 年之前
父节点
当前提交
8348b4db5f
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      drivers/net/sis190.c

+ 6 - 1
drivers/net/sis190.c

@@ -952,12 +952,17 @@ static void sis190_phy_task(void * data)
 				0x01 | _10bpsH },
 				0x01 | _10bpsH },
 			{ 0, "unknown", 0x0000 }
 			{ 0, "unknown", 0x0000 }
 		}, *p;
 		}, *p;
+		u16 adv;
 
 
 		val = mdio_read(ioaddr, phy_id, 0x1f);
 		val = mdio_read(ioaddr, phy_id, 0x1f);
 		net_link(tp, KERN_INFO "%s: mii ext = %04x.\n", dev->name, val);
 		net_link(tp, KERN_INFO "%s: mii ext = %04x.\n", dev->name, val);
 
 
 		val = mdio_read(ioaddr, phy_id, MII_LPA);
 		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++) {
 		for (p = reg31; p->ctl; p++) {
 			if ((val & p->val) == p->val)
 			if ((val & p->val) == p->val)