} else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
                           tg3_flag(tp, 5780_CLASS)) {
                        tg3_serdes_parallel_detect(tp);
+               } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
+                       u32 cpmu = tr32(TG3_CPMU_STATUS);
+                       bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
+                                        TG3_CPMU_STATUS_LINK_MASK);
+
+                       if (link_up != tp->link_up)
+                               tg3_setup_phy(tp, false);
                }
 
                tp->timer_counter = tp->timer_multiplier;
        else
                tg3_flag_clear(tp, POLL_SERDES);
 
+       if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
+               tg3_flag_set(tp, POLL_CPMU_LINK);
+
        tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
        tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
        if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
 
 #define  TG3_CPMU_STATUS_FMSK_5717      0x20000000
 #define  TG3_CPMU_STATUS_FMSK_5719      0xc0000000
 #define  TG3_CPMU_STATUS_FSHFT_5719     30
+#define  TG3_CPMU_STATUS_LINK_MASK      0x180000
 
 #define TG3_CPMU_CLCK_STAT             0x00003630
 #define  CPMU_CLCK_STAT_MAC_CLCK_MASK   0x001f0000
        TG3_FLAG_ENABLE_ASF,
        TG3_FLAG_ASPM_WORKAROUND,
        TG3_FLAG_POLL_SERDES,
+       TG3_FLAG_POLL_CPMU_LINK,
        TG3_FLAG_MBOX_WRITE_REORDER,
        TG3_FLAG_PCIX_TARGET_HWBUG,
        TG3_FLAG_WOL_SPEED_100MB,