Skip to content

Commit

Permalink
Tsi108_eth: fix link recovery after disconnect
Browse files Browse the repository at this point in the history
Bug fix for tsi108_eth network driver.
This patch fixes a problem with link recovery after connection was lost.

Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Alex Bounine authored and Jeff Garzik committed Feb 11, 2008
1 parent 85bbe21 commit b1aefe5
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions drivers/net/tsi108_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,22 +338,21 @@ static void tsi108_check_phy(struct net_device *dev)

TSI_WRITE(TSI108_MAC_CFG2, mac_cfg2_reg);
TSI_WRITE(TSI108_EC_PORTCTRL, portctrl_reg);
}

if (data->link_up == 0) {
/* The manual says it can take 3-4 usecs for the speed change
* to take effect.
*/
udelay(5);
if (data->link_up == 0) {
/* The manual says it can take 3-4 usecs for the speed change
* to take effect.
*/
udelay(5);

spin_lock(&data->txlock);
if (is_valid_ether_addr(dev->dev_addr) && data->txfree)
netif_wake_queue(dev);
spin_lock(&data->txlock);
if (is_valid_ether_addr(dev->dev_addr) && data->txfree)
netif_wake_queue(dev);

data->link_up = 1;
spin_unlock(&data->txlock);
}
data->link_up = 1;
spin_unlock(&data->txlock);
}

} else {
if (data->link_up == 1) {
netif_stop_queue(dev);
Expand Down Expand Up @@ -1267,12 +1266,11 @@ static void tsi108_init_phy(struct net_device *dev)
* PHY_STAT register before the link up status bit is set.
*/

data->link_up = 1;
data->link_up = 0;

while (!((phyval = tsi108_read_mii(data, MII_BMSR)) &
BMSR_LSTATUS)) {
if (i++ > (MII_READ_DELAY / 10)) {
data->link_up = 0;
break;
}
spin_unlock_irqrestore(&phy_lock, flags);
Expand Down

0 comments on commit b1aefe5

Please sign in to comment.