Skip to content

Commit 161e0c1

Browse files
Prashant Malanigregkh
Prashant Malani
authored andcommitted
r8152: Factor out OOB link list waits
[ Upstream commit 5f71c84 ] 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 <[email protected]> Reviewed-by: Grant Grundler <[email protected]> Acked-by: Hayes Wang <[email protected]> Signed-off-by: David S. Miller <[email protected]> Stable-dep-of: 45c0de1 ("net: ethernet: lantiq_etop: fix memory disclosure") Signed-off-by: Sasha Levin <[email protected]>
1 parent e59bc0e commit 161e0c1

File tree

1 file changed

+21
-52
lines changed

1 file changed

+21
-52
lines changed

drivers/net/usb/r8152.c

+21-52
Original file line numberDiff line numberDiff line change
@@ -3007,11 +3007,23 @@ static void r8152b_hw_phy_cfg(struct r8152 *tp)
30073007
set_bit(PHY_RESET, &tp->flags);
30083008
}
30093009

3010-
static void r8152b_exit_oob(struct r8152 *tp)
3010+
static void wait_oob_link_list_ready(struct r8152 *tp)
30113011
{
30123012
u32 ocp_data;
30133013
int i;
30143014

3015+
for (i = 0; i < 1000; i++) {
3016+
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3017+
if (ocp_data & LINK_LIST_READY)
3018+
break;
3019+
usleep_range(1000, 2000);
3020+
}
3021+
}
3022+
3023+
static void r8152b_exit_oob(struct r8152 *tp)
3024+
{
3025+
u32 ocp_data;
3026+
30153027
ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
30163028
ocp_data &= ~RCR_ACPT_ALL;
30173029
ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
@@ -3029,23 +3041,13 @@ static void r8152b_exit_oob(struct r8152 *tp)
30293041
ocp_data &= ~MCU_BORW_EN;
30303042
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
30313043

3032-
for (i = 0; i < 1000; i++) {
3033-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3034-
if (ocp_data & LINK_LIST_READY)
3035-
break;
3036-
usleep_range(1000, 2000);
3037-
}
3044+
wait_oob_link_list_ready(tp);
30383045

30393046
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
30403047
ocp_data |= RE_INIT_LL;
30413048
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
30423049

3043-
for (i = 0; i < 1000; i++) {
3044-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3045-
if (ocp_data & LINK_LIST_READY)
3046-
break;
3047-
usleep_range(1000, 2000);
3048-
}
3050+
wait_oob_link_list_ready(tp);
30493051

30503052
rtl8152_nic_reset(tp);
30513053

@@ -3087,7 +3089,6 @@ static void r8152b_exit_oob(struct r8152 *tp)
30873089
static void r8152b_enter_oob(struct r8152 *tp)
30883090
{
30893091
u32 ocp_data;
3090-
int i;
30913092

30923093
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
30933094
ocp_data &= ~NOW_IS_OOB;
@@ -3099,23 +3100,13 @@ static void r8152b_enter_oob(struct r8152 *tp)
30993100

31003101
rtl_disable(tp);
31013102

3102-
for (i = 0; i < 1000; i++) {
3103-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3104-
if (ocp_data & LINK_LIST_READY)
3105-
break;
3106-
usleep_range(1000, 2000);
3107-
}
3103+
wait_oob_link_list_ready(tp);
31083104

31093105
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
31103106
ocp_data |= RE_INIT_LL;
31113107
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
31123108

3113-
for (i = 0; i < 1000; i++) {
3114-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3115-
if (ocp_data & LINK_LIST_READY)
3116-
break;
3117-
usleep_range(1000, 2000);
3118-
}
3109+
wait_oob_link_list_ready(tp);
31193110

31203111
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
31213112

@@ -3388,7 +3379,6 @@ static void r8153b_hw_phy_cfg(struct r8152 *tp)
33883379
static void r8153_first_init(struct r8152 *tp)
33893380
{
33903381
u32 ocp_data;
3391-
int i;
33923382

33933383
rxdy_gated_en(tp, true);
33943384
r8153_teredo_off(tp);
@@ -3408,23 +3398,13 @@ static void r8153_first_init(struct r8152 *tp)
34083398
ocp_data &= ~MCU_BORW_EN;
34093399
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
34103400

3411-
for (i = 0; i < 1000; i++) {
3412-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3413-
if (ocp_data & LINK_LIST_READY)
3414-
break;
3415-
usleep_range(1000, 2000);
3416-
}
3401+
wait_oob_link_list_ready(tp);
34173402

34183403
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
34193404
ocp_data |= RE_INIT_LL;
34203405
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
34213406

3422-
for (i = 0; i < 1000; i++) {
3423-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3424-
if (ocp_data & LINK_LIST_READY)
3425-
break;
3426-
usleep_range(1000, 2000);
3427-
}
3407+
wait_oob_link_list_ready(tp);
34283408

34293409
rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
34303410

@@ -3449,7 +3429,6 @@ static void r8153_first_init(struct r8152 *tp)
34493429
static void r8153_enter_oob(struct r8152 *tp)
34503430
{
34513431
u32 ocp_data;
3452-
int i;
34533432

34543433
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
34553434
ocp_data &= ~NOW_IS_OOB;
@@ -3458,23 +3437,13 @@ static void r8153_enter_oob(struct r8152 *tp)
34583437
rtl_disable(tp);
34593438
rtl_reset_bmu(tp);
34603439

3461-
for (i = 0; i < 1000; i++) {
3462-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3463-
if (ocp_data & LINK_LIST_READY)
3464-
break;
3465-
usleep_range(1000, 2000);
3466-
}
3440+
wait_oob_link_list_ready(tp);
34673441

34683442
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
34693443
ocp_data |= RE_INIT_LL;
34703444
ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
34713445

3472-
for (i = 0; i < 1000; i++) {
3473-
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
3474-
if (ocp_data & LINK_LIST_READY)
3475-
break;
3476-
usleep_range(1000, 2000);
3477-
}
3446+
wait_oob_link_list_ready(tp);
34783447

34793448
ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
34803449
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);

0 commit comments

Comments
 (0)