瀏覽代碼

[PATCH] sis190: dummy read is required by the status register

Add a dummy read before accessing the status register

SiS driver suggests it.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Francois Romieu 20 年之前
父節點
當前提交
fc10c39d79
共有 1 個文件被更改,包括 8 次插入1 次删除
  1. 8 1
      drivers/net/sis190.c

+ 8 - 1
drivers/net/sis190.c

@@ -383,6 +383,12 @@ static int __mdio_read(struct net_device *dev, int phy_id, int reg)
 	return mdio_read(tp->mmio_addr, phy_id, reg);
 	return mdio_read(tp->mmio_addr, phy_id, reg);
 }
 }
 
 
+static u16 mdio_read_latched(void __iomem *ioaddr, int phy_id, int reg)
+{
+	mdio_read(ioaddr, phy_id, reg);
+	return mdio_read(ioaddr, phy_id, reg);
+}
+
 static u16 __devinit sis190_read_eeprom(void __iomem *ioaddr, u32 reg)
 static u16 __devinit sis190_read_eeprom(void __iomem *ioaddr, u32 reg)
 {
 {
 	u16 data = 0xffff;
 	u16 data = 0xffff;
@@ -881,7 +887,8 @@ static void sis190_phy_task(void * data)
 	if (val & BMCR_RESET) {
 	if (val & BMCR_RESET) {
 		// FIXME: needlessly high ?  -- FR 02/07/2005
 		// FIXME: needlessly high ?  -- FR 02/07/2005
 		mod_timer(&tp->timer, jiffies + HZ/10);
 		mod_timer(&tp->timer, jiffies + HZ/10);
-	} else if (!(mdio_read(ioaddr, phy_id, MII_BMSR) & BMSR_ANEGCOMPLETE)) {
+	} else if (!(mdio_read_latched(ioaddr, phy_id, MII_BMSR) &
+		     BMSR_ANEGCOMPLETE)) {
 		net_link(tp, KERN_WARNING "%s: PHY reset until link up.\n",
 		net_link(tp, KERN_WARNING "%s: PHY reset until link up.\n",
 			 dev->name);
 			 dev->name);
 		mdio_write(ioaddr, phy_id, MII_BMCR, val | BMCR_RESET);
 		mdio_write(ioaddr, phy_id, MII_BMCR, val | BMCR_RESET);