aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sky2.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-02-22 14:45:01 -0500
committerFrancois Romieu <romieu@fr.zoreil.com>2006-02-22 19:25:03 -0500
commit9a6d343188f5f1e9537e700fc4139c2d905ff129 (patch)
tree6e41f133f4e229b4cd301c36c4deb8c04e5038c7 /drivers/net/sky2.c
parenta8fd6266dafd564bae6758cb78c8c152e7d4115e (diff)
[PATCH] sky2: force early transmit status
Need to force a transmit coalesce timer restart after processing transmit packets. Otherwise, can get transmit status after last update and chip doesn't send the next one. Can go with the chip defaults for coalescing timers, except for Tx timer which needs to be bigger. Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Diffstat (limited to 'drivers/net/sky2.c')
-rw-r--r--drivers/net/sky2.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 629809433cb3..d913d3407e90 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1988,13 +1988,12 @@ exit_loop:
1988 sky2_tx_check(hw, 0, tx_done[0]); 1988 sky2_tx_check(hw, 0, tx_done[0]);
1989 sky2_tx_check(hw, 1, tx_done[1]); 1989 sky2_tx_check(hw, 1, tx_done[1]);
1990 1990
1991 if (likely(work_done < to_do)) { 1991 if (sky2_read8(hw, STAT_TX_TIMER_CTRL) == TIM_START) {
1992 /* need to restart TX timer */ 1992 sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP);
1993 if (is_ec_a1(hw)) { 1993 sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
1994 sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_STOP); 1994 }
1995 sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
1996 }
1997 1995
1996 if (likely(work_done < to_do)) {
1998 netif_rx_complete(dev0); 1997 netif_rx_complete(dev0);
1999 hw->intr_mask |= Y2_IS_STAT_BMU; 1998 hw->intr_mask |= Y2_IS_STAT_BMU;
2000 sky2_write32(hw, B0_IMSK, hw->intr_mask); 1999 sky2_write32(hw, B0_IMSK, hw->intr_mask);
@@ -2352,8 +2351,7 @@ static int sky2_reset(struct sky2_hw *hw)
2352 sky2_write8(hw, STAT_FIFO_ISR_WM, 16); 2351 sky2_write8(hw, STAT_FIFO_ISR_WM, 16);
2353 2352
2354 sky2_write32(hw, STAT_TX_TIMER_INI, sky2_us2clk(hw, 1000)); 2353 sky2_write32(hw, STAT_TX_TIMER_INI, sky2_us2clk(hw, 1000));
2355 sky2_write32(hw, STAT_LEV_TIMER_INI, sky2_us2clk(hw, 100)); 2354 sky2_write32(hw, STAT_ISR_TIMER_INI, sky2_us2clk(hw, 7));
2356 sky2_write32(hw, STAT_ISR_TIMER_INI, sky2_us2clk(hw, 20));
2357 } 2355 }
2358 2356
2359 /* enable status unit */ 2357 /* enable status unit */