r8152: Factor out OOB link list waits
The same for-loop check for the LINK_LIST_READY bit of an OOB_CTRL register is used in several places. Factor these out into a single function to reduce the lines of code. Change-Id: I20e8f327045a72acc0a83e2d145ae2993ab62915 Signed-off-by: Prashant Malani <pmalani@chromium.org> Reviewed-by: Grant Grundler <grundler@chromium.org> Acked-by: Hayes Wang <hayeswang@realtek.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
02dc96ef6c
Коммит
5f71c84038
|
@ -3377,11 +3377,23 @@ static void r8152b_hw_phy_cfg(struct r8152 *tp)
|
|||
set_bit(PHY_RESET, &tp->flags);
|
||||
}
|
||||
|
||||
static void r8152b_exit_oob(struct r8152 *tp)
|
||||
static void wait_oob_link_list_ready(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
static void r8152b_exit_oob(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
|
||||
ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
|
||||
ocp_data &= ~RCR_ACPT_ALL;
|
||||
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
|
||||
|
@ -3399,23 +3411,13 @@ static void r8152b_exit_oob(struct r8152 *tp)
|
|||
ocp_data &= ~MCU_BORW_EN;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
|
||||
ocp_data |= RE_INIT_LL;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
rtl8152_nic_reset(tp);
|
||||
|
||||
|
@ -3457,7 +3459,6 @@ static void r8152b_exit_oob(struct r8152 *tp)
|
|||
static void r8152b_enter_oob(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
int i;
|
||||
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
ocp_data &= ~NOW_IS_OOB;
|
||||
|
@ -3469,23 +3470,13 @@ static void r8152b_enter_oob(struct r8152 *tp)
|
|||
|
||||
rtl_disable(tp);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
|
||||
ocp_data |= RE_INIT_LL;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
|
||||
|
||||
|
@ -3711,7 +3702,6 @@ static void r8153b_hw_phy_cfg(struct r8152 *tp)
|
|||
static void r8153_first_init(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
int i;
|
||||
|
||||
r8153_mac_clk_spd(tp, false);
|
||||
rxdy_gated_en(tp, true);
|
||||
|
@ -3732,23 +3722,13 @@ static void r8153_first_init(struct r8152 *tp)
|
|||
ocp_data &= ~MCU_BORW_EN;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
|
||||
ocp_data |= RE_INIT_LL;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
|
||||
|
||||
|
@ -3773,7 +3753,6 @@ static void r8153_first_init(struct r8152 *tp)
|
|||
static void r8153_enter_oob(struct r8152 *tp)
|
||||
{
|
||||
u32 ocp_data;
|
||||
int i;
|
||||
|
||||
r8153_mac_clk_spd(tp, true);
|
||||
|
||||
|
@ -3784,23 +3763,13 @@ static void r8153_enter_oob(struct r8152 *tp)
|
|||
rtl_disable(tp);
|
||||
rtl_reset_bmu(tp);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
|
||||
ocp_data |= RE_INIT_LL;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
|
||||
if (ocp_data & LINK_LIST_READY)
|
||||
break;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
wait_oob_link_list_ready(tp);
|
||||
|
||||
ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
|
||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
|
||||
|
|
Загрузка…
Ссылка в новой задаче