Skip to content

Commit bac75d8

Browse files
hkallweitdavem330
authored andcommitted
r8169: move some calls to rtl8169_hw_reset
Move calls that are needed before and after calling rtl8169_hw_reset() into this function. This requires to move the function in the code. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9fdd50c commit bac75d8

File tree

1 file changed

+36
-39
lines changed

1 file changed

+36
-39
lines changed

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2530,36 +2530,6 @@ static void rtl_enable_rxdvgate(struct rtl8169_private *tp)
25302530
rtl_wait_txrx_fifo_empty(tp);
25312531
}
25322532

2533-
static void rtl8169_hw_reset(struct rtl8169_private *tp)
2534-
{
2535-
/* Disable interrupts */
2536-
rtl8169_irq_mask_and_ack(tp);
2537-
2538-
rtl_rx_close(tp);
2539-
2540-
switch (tp->mac_version) {
2541-
case RTL_GIGA_MAC_VER_27:
2542-
case RTL_GIGA_MAC_VER_28:
2543-
case RTL_GIGA_MAC_VER_31:
2544-
rtl_loop_wait_low(tp, &rtl_npq_cond, 20, 2000);
2545-
break;
2546-
case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38:
2547-
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
2548-
rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
2549-
break;
2550-
case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61:
2551-
rtl_enable_rxdvgate(tp);
2552-
fsleep(2000);
2553-
break;
2554-
default:
2555-
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
2556-
udelay(100);
2557-
break;
2558-
}
2559-
2560-
rtl_hw_reset(tp);
2561-
}
2562-
25632533
static void rtl_set_tx_config_registers(struct rtl8169_private *tp)
25642534
{
25652535
u32 val = TX_DMA_BURST << TxDMAShift |
@@ -3958,23 +3928,55 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp)
39583928
netdev_reset_queue(tp->dev);
39593929
}
39603930

3931+
static void rtl8169_hw_reset(struct rtl8169_private *tp)
3932+
{
3933+
/* Give a racing hard_start_xmit a few cycles to complete. */
3934+
synchronize_rcu();
3935+
3936+
/* Disable interrupts */
3937+
rtl8169_irq_mask_and_ack(tp);
3938+
3939+
rtl_rx_close(tp);
3940+
3941+
switch (tp->mac_version) {
3942+
case RTL_GIGA_MAC_VER_27:
3943+
case RTL_GIGA_MAC_VER_28:
3944+
case RTL_GIGA_MAC_VER_31:
3945+
rtl_loop_wait_low(tp, &rtl_npq_cond, 20, 2000);
3946+
break;
3947+
case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38:
3948+
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
3949+
rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
3950+
break;
3951+
case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61:
3952+
rtl_enable_rxdvgate(tp);
3953+
fsleep(2000);
3954+
break;
3955+
default:
3956+
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
3957+
fsleep(100);
3958+
break;
3959+
}
3960+
3961+
rtl_hw_reset(tp);
3962+
3963+
rtl8169_tx_clear(tp);
3964+
rtl8169_init_ring_indexes(tp);
3965+
}
3966+
39613967
static void rtl_reset_work(struct rtl8169_private *tp)
39623968
{
39633969
struct net_device *dev = tp->dev;
39643970
int i;
39653971

39663972
napi_disable(&tp->napi);
39673973
netif_stop_queue(dev);
3968-
synchronize_rcu();
39693974

39703975
rtl8169_hw_reset(tp);
39713976

39723977
for (i = 0; i < NUM_RX_DESC; i++)
39733978
rtl8169_mark_to_asic(tp->RxDescArray + i);
39743979

3975-
rtl8169_tx_clear(tp);
3976-
rtl8169_init_ring_indexes(tp);
3977-
39783980
napi_enable(&tp->napi);
39793981
rtl_hw_start(tp);
39803982
netif_wake_queue(dev);
@@ -4636,11 +4638,6 @@ static void rtl8169_down(struct net_device *dev)
46364638

46374639
rtl8169_hw_reset(tp);
46384640

4639-
/* Give a racing hard_start_xmit a few cycles to complete. */
4640-
synchronize_rcu();
4641-
4642-
rtl8169_tx_clear(tp);
4643-
46444641
rtl8169_rx_clear(tp);
46454642

46464643
rtl_pll_power_down(tp);

0 commit comments

Comments
 (0)