|
@@ -4428,6 +4428,18 @@ static bool tg3_test_and_report_link_chg(struct tg3 *tp, int curr_link_up)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+static void tg3_clear_mac_status(struct tg3 *tp)
|
|
|
+{
|
|
|
+ tw32(MAC_EVENT, 0);
|
|
|
+
|
|
|
+ tw32_f(MAC_STATUS,
|
|
|
+ MAC_STATUS_SYNC_CHANGED |
|
|
|
+ MAC_STATUS_CFG_CHANGED |
|
|
|
+ MAC_STATUS_MI_COMPLETION |
|
|
|
+ MAC_STATUS_LNKSTATE_CHANGED);
|
|
|
+ udelay(40);
|
|
|
+}
|
|
|
+
|
|
|
static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
|
|
|
{
|
|
|
int current_link_up;
|
|
@@ -4437,14 +4449,7 @@ static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
|
|
|
u8 current_duplex;
|
|
|
int i, err;
|
|
|
|
|
|
- tw32(MAC_EVENT, 0);
|
|
|
-
|
|
|
- tw32_f(MAC_STATUS,
|
|
|
- (MAC_STATUS_SYNC_CHANGED |
|
|
|
- MAC_STATUS_CFG_CHANGED |
|
|
|
- MAC_STATUS_MI_COMPLETION |
|
|
|
- MAC_STATUS_LNKSTATE_CHANGED));
|
|
|
- udelay(40);
|
|
|
+ tg3_clear_mac_status(tp);
|
|
|
|
|
|
if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
|
|
|
tw32_f(MAC_MI_MODE,
|
|
@@ -5470,14 +5475,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
|
|
|
tw32_f(MAC_MODE, tp->mac_mode);
|
|
|
udelay(40);
|
|
|
|
|
|
- tw32(MAC_EVENT, 0);
|
|
|
-
|
|
|
- tw32_f(MAC_STATUS,
|
|
|
- (MAC_STATUS_SYNC_CHANGED |
|
|
|
- MAC_STATUS_CFG_CHANGED |
|
|
|
- MAC_STATUS_MI_COMPLETION |
|
|
|
- MAC_STATUS_LNKSTATE_CHANGED));
|
|
|
- udelay(40);
|
|
|
+ tg3_clear_mac_status(tp);
|
|
|
|
|
|
if (force_reset)
|
|
|
tg3_phy_reset(tp);
|