return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
 }
 
+#define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
+       tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
+                            MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
+                            MII_TG3_AUXCTL_ACTL_TX_6DB)
+
+#define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
+       tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
+                            MII_TG3_AUXCTL_ACTL_TX_6DB);
+
 static int tg3_bmcr_reset(struct tg3 *tp)
 {
        u32 phy_control;
 
        otp = tp->phy_otp;
 
-       /* Enable SM_DSP clock and tx 6dB coding. */
-       phy = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-             MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
-             MII_TG3_AUXCTL_ACTL_TX_6DB;
-       tg3_writephy(tp, MII_TG3_AUX_CTRL, phy);
+       if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp))
+               return;
 
        phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
        phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
              ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
        tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
 
-       /* Turn off SM_DSP clock. */
-       phy = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-             MII_TG3_AUXCTL_ACTL_TX_6DB;
-       tg3_writephy(tp, MII_TG3_AUX_CTRL, phy);
+       TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
 }
 
 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
                        case ASIC_REV_5717:
                        case ASIC_REV_5719:
                        case ASIC_REV_57765:
-                               /* Enable SM_DSP clock and tx 6dB coding. */
-                               val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-                                     MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
-                                     MII_TG3_AUXCTL_ACTL_TX_6DB;
-                               tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
-
-                               tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
-
-                               /* Turn off SM_DSP clock. */
-                               val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-                                     MII_TG3_AUXCTL_ACTL_TX_6DB;
-                               tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
+                               if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
+                                       tg3_phydsp_write(tp, MII_TG3_DSP_TAP26,
+                                                        0x0000);
+                                       TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
+                               }
                        }
                        /* Fallthrough */
                case TG3_CL45_D7_EEERES_STAT_LP_100TX:
                             (MII_TG3_CTRL_AS_MASTER |
                              MII_TG3_CTRL_ENABLE_AS_MASTER));
 
-               /* Enable SM_DSP_CLOCK and 6dB.  */
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
+               err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
+               if (err)
+                       return err;
 
                /* Block the PHY control access.  */
                tg3_phydsp_write(tp, 0x8005, 0x0800);
        tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
        tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
 
-       if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
-           GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
-               /* Set Extended packet length bit for jumbo frames */
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4400);
-       } else {
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
-       }
+       TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
 
        tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
 
                tg3_phy_toggle_apd(tp, false);
 
 out:
-       if (tp->phy_flags & TG3_PHYFLG_ADC_BUG) {
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
+       if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
+           !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
                tg3_phydsp_write(tp, 0x201f, 0x2aaa);
                tg3_phydsp_write(tp, 0x000a, 0x0323);
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
+               TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
        }
+
        if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
                tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
        }
+
        if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
-               tg3_phydsp_write(tp, 0x000a, 0x310b);
-               tg3_phydsp_write(tp, 0x201f, 0x9506);
-               tg3_phydsp_write(tp, 0x401f, 0x14e2);
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
+               if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
+                       tg3_phydsp_write(tp, 0x000a, 0x310b);
+                       tg3_phydsp_write(tp, 0x201f, 0x9506);
+                       tg3_phydsp_write(tp, 0x401f, 0x14e2);
+                       TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
+               }
        } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
-               tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
-               if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
-                       tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
-                       tg3_writephy(tp, MII_TG3_TEST1,
-                                    MII_TG3_TEST1_TRIM_EN | 0x4);
-               } else
-                       tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
+               if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
+                       tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
+                       if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
+                               tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
+                               tg3_writephy(tp, MII_TG3_TEST1,
+                                            MII_TG3_TEST1_TRIM_EN | 0x4);
+                       } else
+                               tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
+
+                       TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
+               }
        }
+
        /* Set Extended packet length bit (bit 14) on all chips that */
        /* support jumbo frames */
        if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
                tw32(TG3_CPMU_EEE_MODE,
                     tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
 
-               /* Enable SM_DSP clock and tx 6dB coding. */
-               val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-                     MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
-                     MII_TG3_AUXCTL_ACTL_TX_6DB;
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
+               TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
 
                switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
                case ASIC_REV_5717:
                }
                tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
 
-               /* Turn off SM_DSP clock. */
-               val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
-                     MII_TG3_AUXCTL_ACTL_TX_6DB;
-               tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
+               TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
        }
 
        if (tp->link_config.autoneg == AUTONEG_DISABLE &&