if (ret_val)
                goto out;
 
-       /* Switching PHY interface always returns MDI error
-        * so disable retry mechanism to avoid wasting time
-        */
-       e1000e_disable_phy_retry(hw);
-
-       /* Force SMBus mode in PHY */
-       ret_val = e1000_read_phy_reg_hv_locked(hw, CV_SMB_CTRL, &phy_reg);
-       if (ret_val)
-               goto release;
-       phy_reg |= CV_SMB_CTRL_FORCE_SMBUS;
-       e1000_write_phy_reg_hv_locked(hw, CV_SMB_CTRL, phy_reg);
-
-       e1000e_enable_phy_retry(hw);
-
-       /* Force SMBus mode in MAC */
-       mac_reg = er32(CTRL_EXT);
-       mac_reg |= E1000_CTRL_EXT_FORCE_SMBUS;
-       ew32(CTRL_EXT, mac_reg);
-
        /* Si workaround for ULP entry flow on i127/rev6 h/w.  Enable
         * LPLU and disable Gig speed when entering ULP
         */
 
        struct e1000_hw *hw = &adapter->hw;
        u32 ctrl, ctrl_ext, rctl, status, wufc;
        int retval = 0;
+       u16 smb_ctrl;
 
        /* Runtime suspend should only enable wakeup for link changes */
        if (runtime)
                        if (retval)
                                return retval;
                }
+
+               /* Force SMBUS to allow WOL */
+               /* Switching PHY interface always returns MDI error
+                * so disable retry mechanism to avoid wasting time
+                */
+               e1000e_disable_phy_retry(hw);
+
+               e1e_rphy(hw, CV_SMB_CTRL, &smb_ctrl);
+               smb_ctrl |= CV_SMB_CTRL_FORCE_SMBUS;
+               e1e_wphy(hw, CV_SMB_CTRL, smb_ctrl);
+
+               e1000e_enable_phy_retry(hw);
+
+               /* Force SMBus mode in MAC */
+               ctrl_ext = er32(CTRL_EXT);
+               ctrl_ext |= E1000_CTRL_EXT_FORCE_SMBUS;
+               ew32(CTRL_EXT, ctrl_ext);
        }
 
        /* Ensure that the appropriate bits are set in LPI_CTRL