From 8348b4db5f56d2c0d3849db06055225ec15b255a Mon Sep 17 00:00:00 2001
From: Francois Romieu <romieu@fr.zoreil.com>
Date: Sat, 30 Jul 2005 13:16:14 +0200
Subject: [PATCH] [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>
---
 drivers/net/sis190.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c
index 84bc2299f93bd..915ff009c295e 100644
--- a/drivers/net/sis190.c
+++ b/drivers/net/sis190.c
@@ -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)