r8152: Factor out OOB link list waits
authorPrashant Malani <pmalani@chromium.org>
Tue, 1 Oct 2019 08:35:57 +0000 (01:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Oct 2019 16:14:37 +0000 (09:14 -0700)
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>
drivers/net/usb/r8152.c

index 0872609..30a6df7 100644 (file)
@@ -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);