RTL_W8(tp, IBCR0, RTL_R8(tp, IBCR0) & ~0x01);
 }
 
+static void rtl_dash_loop_wait(struct rtl8169_private *tp,
+                              const struct rtl_cond *c,
+                              unsigned long usecs, int n, bool high)
+{
+       if (!tp->dash_enabled)
+               return;
+       rtl_loop_wait(tp, c, usecs, n, high);
+}
+
+static void rtl_dash_loop_wait_high(struct rtl8169_private *tp,
+                                   const struct rtl_cond *c,
+                                   unsigned long d, int n)
+{
+       rtl_dash_loop_wait(tp, c, d, n, true);
+}
+
+static void rtl_dash_loop_wait_low(struct rtl8169_private *tp,
+                                  const struct rtl_cond *c,
+                                  unsigned long d, int n)
+{
+       rtl_dash_loop_wait(tp, c, d, n, false);
+}
+
 static void rtl8168dp_driver_start(struct rtl8169_private *tp)
 {
        r8168dp_oob_notify(tp, OOB_CMD_DRIVER_START);
-       rtl_loop_wait_high(tp, &rtl_dp_ocp_read_cond, 10000, 10);
+       rtl_dash_loop_wait_high(tp, &rtl_dp_ocp_read_cond, 10000, 10);
 }
 
 static void rtl8168ep_driver_start(struct rtl8169_private *tp)
 {
        r8168ep_ocp_write(tp, 0x01, 0x180, OOB_CMD_DRIVER_START);
        r8168ep_ocp_write(tp, 0x01, 0x30, r8168ep_ocp_read(tp, 0x30) | 0x01);
-       rtl_loop_wait_high(tp, &rtl_ep_ocp_read_cond, 10000, 30);
+       rtl_dash_loop_wait_high(tp, &rtl_ep_ocp_read_cond, 10000, 30);
 }
 
 static void rtl8168_driver_start(struct rtl8169_private *tp)
 static void rtl8168dp_driver_stop(struct rtl8169_private *tp)
 {
        r8168dp_oob_notify(tp, OOB_CMD_DRIVER_STOP);
-       rtl_loop_wait_low(tp, &rtl_dp_ocp_read_cond, 10000, 10);
+       rtl_dash_loop_wait_low(tp, &rtl_dp_ocp_read_cond, 10000, 10);
 }
 
 static void rtl8168ep_driver_stop(struct rtl8169_private *tp)
        rtl8168ep_stop_cmac(tp);
        r8168ep_ocp_write(tp, 0x01, 0x180, OOB_CMD_DRIVER_STOP);
        r8168ep_ocp_write(tp, 0x01, 0x30, r8168ep_ocp_read(tp, 0x30) | 0x01);
-       rtl_loop_wait_low(tp, &rtl_ep_ocp_read_cond, 10000, 10);
+       rtl_dash_loop_wait_low(tp, &rtl_ep_ocp_read_cond, 10000, 10);
 }
 
 static void rtl8168_driver_stop(struct rtl8169_private *tp)