提交 fc10c39d 编写于 作者: F Francois Romieu 提交者: Jeff Garzik

[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: NFrancois Romieu <romieu@fr.zoreil.com>
Signed-off-by: NJeff Garzik <jgarzik@pobox.com>
上级 9ede109b
...@@ -383,6 +383,12 @@ static int __mdio_read(struct net_device *dev, int phy_id, int reg) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册