net/e1000/base: add missing device ID
[dpdk.git] / drivers / net / e1000 / base / e1000_82575.c
index c6400bd..f6b9f62 100644 (file)
@@ -1,35 +1,6 @@
-/*******************************************************************************
-
-Copyright (c) 2001-2015, Intel Corporation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-
- 3. Neither the name of the Intel Corporation nor the names of its
-    contributors may be used to endorse or promote products derived from
-    this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-***************************************************************************/
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2001 - 2015 Intel Corporation
+ */
 
 /*
  * 82575EB Gigabit Network Connection
@@ -46,8 +17,6 @@ POSSIBILITY OF SUCH DAMAGE.
 
 STATIC s32  e1000_init_phy_params_82575(struct e1000_hw *hw);
 STATIC s32  e1000_init_mac_params_82575(struct e1000_hw *hw);
-STATIC s32  e1000_acquire_phy_82575(struct e1000_hw *hw);
-STATIC void e1000_release_phy_82575(struct e1000_hw *hw);
 STATIC s32  e1000_acquire_nvm_82575(struct e1000_hw *hw);
 STATIC void e1000_release_nvm_82575(struct e1000_hw *hw);
 STATIC s32  e1000_check_for_link_82575(struct e1000_hw *hw);
@@ -59,6 +28,7 @@ STATIC s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
 STATIC s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
                                           u16 *data);
 STATIC s32  e1000_reset_hw_82575(struct e1000_hw *hw);
+STATIC s32 e1000_init_hw_82575(struct e1000_hw *hw);
 STATIC s32  e1000_reset_hw_82580(struct e1000_hw *hw);
 STATIC s32  e1000_read_phy_reg_82580(struct e1000_hw *hw,
                                     u32 offset, u16 *data);
@@ -84,10 +54,8 @@ STATIC s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
 STATIC s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
 STATIC void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
 STATIC bool e1000_sgmii_active_82575(struct e1000_hw *hw);
-STATIC s32  e1000_reset_init_script_82575(struct e1000_hw *hw);
 STATIC s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
 STATIC void e1000_config_collision_dist_82575(struct e1000_hw *hw);
-STATIC void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
 STATIC void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
 STATIC void e1000_power_up_serdes_link_82575(struct e1000_hw *hw);
 STATIC s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
@@ -104,10 +72,10 @@ STATIC void e1000_clear_vfta_i350(struct e1000_hw *hw);
 
 STATIC void e1000_i2c_start(struct e1000_hw *hw);
 STATIC void e1000_i2c_stop(struct e1000_hw *hw);
-STATIC s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data);
+STATIC void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data);
 STATIC s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data);
 STATIC s32 e1000_get_i2c_ack(struct e1000_hw *hw);
-STATIC s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data);
+STATIC void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data);
 STATIC s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data);
 STATIC void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
 STATIC void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
@@ -156,8 +124,8 @@ STATIC bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_init_phy_params_82575 - Init PHY func ptrs.
- *  @hw: pointer to the HW structure
+ * e1000_init_phy_params_82575 - Initialize PHY function ptrs
+ * @hw: pointer to the HW structure
  **/
 STATIC s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
 {
@@ -175,17 +143,17 @@ STATIC s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
                goto out;
        }
 
-       phy->ops.power_up   = e1000_power_up_phy_copper;
-       phy->ops.power_down = e1000_power_down_phy_copper_82575;
+       phy->ops.power_up       = e1000_power_up_phy_copper;
+       phy->ops.power_down     = e1000_power_down_phy_copper_base;
 
        phy->autoneg_mask       = AUTONEG_ADVERTISE_SPEED_DEFAULT;
        phy->reset_delay_us     = 100;
 
-       phy->ops.acquire        = e1000_acquire_phy_82575;
+       phy->ops.acquire        = e1000_acquire_phy_base;
        phy->ops.check_reset_block = e1000_check_reset_block_generic;
        phy->ops.commit         = e1000_phy_sw_reset_generic;
        phy->ops.get_cfg_done   = e1000_get_cfg_done_82575;
-       phy->ops.release        = e1000_release_phy_82575;
+       phy->ops.release        = e1000_release_phy_base;
 
        ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 
@@ -232,76 +200,39 @@ STATIC s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
        case I347AT4_E_PHY_ID:
        case M88E1112_E_PHY_ID:
        case M88E1340M_E_PHY_ID:
+               phy->type               = e1000_phy_m88;
+               phy->ops.check_polarity = e1000_check_polarity_m88;
+               phy->ops.get_info       = e1000_get_phy_info_m88;
+               phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
+               phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
+               break;
        case M88E1111_I_PHY_ID:
                phy->type               = e1000_phy_m88;
                phy->ops.check_polarity = e1000_check_polarity_m88;
                phy->ops.get_info       = e1000_get_phy_info_m88;
-               if (phy->id == I347AT4_E_PHY_ID ||
-                   phy->id == M88E1112_E_PHY_ID ||
-                   phy->id == M88E1340M_E_PHY_ID)
-                       phy->ops.get_cable_length =
-                                        e1000_get_cable_length_m88_gen2;
-               else if (phy->id == M88E1543_E_PHY_ID ||
-                        phy->id == M88E1512_E_PHY_ID)
-                       phy->ops.get_cable_length =
-                                        e1000_get_cable_length_m88_gen2;
-               else
-                       phy->ops.get_cable_length = e1000_get_cable_length_m88;
+               phy->ops.get_cable_length = e1000_get_cable_length_m88;
                phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
-               /* Check if this PHY is confgured for media swap. */
-               if (phy->id == M88E1112_E_PHY_ID) {
-                       u16 data;
-
-                       ret_val = phy->ops.write_reg(hw,
-                                                    E1000_M88E1112_PAGE_ADDR,
-                                                    2);
-                       if (ret_val)
-                               goto out;
-
-                       ret_val = phy->ops.read_reg(hw,
-                                                   E1000_M88E1112_MAC_CTRL_1,
-                                                   &data);
-                       if (ret_val)
-                               goto out;
-
-                       data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >>
-                              E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT;
-                       if (data == E1000_M88E1112_AUTO_COPPER_SGMII ||
-                           data == E1000_M88E1112_AUTO_COPPER_BASEX)
-                               hw->mac.ops.check_for_link =
-                                               e1000_check_for_link_media_swap;
-               }
-               if (phy->id == M88E1512_E_PHY_ID) {
-                       ret_val = e1000_initialize_M88E1512_phy(hw);
-                       if (ret_val)
-                               goto out;
-               }
-               if (phy->id == M88E1543_E_PHY_ID) {
-                       ret_val = e1000_initialize_M88E1543_phy(hw);
-                       if (ret_val)
-                               goto out;
-               }
                break;
        case IGP03E1000_E_PHY_ID:
        case IGP04E1000_E_PHY_ID:
-               phy->type = e1000_phy_igp_3;
-               phy->ops.check_polarity = e1000_check_polarity_igp;
-               phy->ops.get_info = e1000_get_phy_info_igp;
+               phy->type               = e1000_phy_igp_3;
+               phy->ops.check_polarity = e1000_check_polarity_igp;
+               phy->ops.get_info       = e1000_get_phy_info_igp;
                phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
-               phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
                phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575;
                phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic;
+               phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
                break;
        case I82580_I_PHY_ID:
        case I350_I_PHY_ID:
-               phy->type = e1000_phy_82580;
-               phy->ops.check_polarity = e1000_check_polarity_82577;
-               phy->ops.force_speed_duplex =
-                                        e1000_phy_force_speed_duplex_82577;
+               phy->type               = e1000_phy_82580;
+               phy->ops.check_polarity = e1000_check_polarity_82577;
+               phy->ops.get_info       = e1000_get_phy_info_82577;
                phy->ops.get_cable_length = e1000_get_cable_length_82577;
-               phy->ops.get_info = e1000_get_phy_info_82577;
                phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
                phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
+               phy->ops.force_speed_duplex =
+                               e1000_phy_force_speed_duplex_82577;
                break;
        case I210_I_PHY_ID:
                phy->type               = e1000_phy_i210;
@@ -312,103 +243,57 @@ STATIC s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
                phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
                phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
                break;
+       case BCM54616_E_PHY_ID:
+               phy->type               = e1000_phy_none;
+               break;
        default:
                ret_val = -E1000_ERR_PHY;
                goto out;
        }
 
-out:
-       return ret_val;
-}
-
-/**
- *  e1000_init_nvm_params_82575 - Init NVM func ptrs.
- *  @hw: pointer to the HW structure
- **/
-s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
-{
-       struct e1000_nvm_info *nvm = &hw->nvm;
-       u32 eecd = E1000_READ_REG(hw, E1000_EECD);
-       u16 size;
-
-       DEBUGFUNC("e1000_init_nvm_params_82575");
-
-       size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
-                    E1000_EECD_SIZE_EX_SHIFT);
-       /*
-        * Added to a constant, "size" becomes the left-shift value
-        * for setting word_size.
-        */
-       size += NVM_WORD_SIZE_BASE_SHIFT;
-
-       /* Just in case size is out of range, cap it to the largest
-        * EEPROM size supported
-        */
-       if (size > 15)
-               size = 15;
-
-       nvm->word_size = 1 << size;
-       if (hw->mac.type < e1000_i210) {
-               nvm->opcode_bits = 8;
-               nvm->delay_usec = 1;
+       /* Check if this PHY is configured for media swap. */
+       switch (phy->id) {
+       case M88E1112_E_PHY_ID:
+       {
+               u16 data;
 
-               switch (nvm->override) {
-               case e1000_nvm_override_spi_large:
-                       nvm->page_size = 32;
-                       nvm->address_bits = 16;
-                       break;
-               case e1000_nvm_override_spi_small:
-                       nvm->page_size = 8;
-                       nvm->address_bits = 8;
-                       break;
-               default:
-                       nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
-                       nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
-                                           16 : 8;
-                       break;
-               }
-               if (nvm->word_size == (1 << 15))
-                       nvm->page_size = 128;
+               ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 2);
+               if (ret_val)
+                       goto out;
+               ret_val = phy->ops.read_reg(hw, E1000_M88E1112_MAC_CTRL_1,
+                                           &data);
+               if (ret_val)
+                       goto out;
 
-               nvm->type = e1000_nvm_eeprom_spi;
-       } else {
-               nvm->type = e1000_nvm_flash_hw;
+               data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >>
+                       E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT;
+               if (data == E1000_M88E1112_AUTO_COPPER_SGMII ||
+                   data == E1000_M88E1112_AUTO_COPPER_BASEX)
+                       hw->mac.ops.check_for_link =
+                                               e1000_check_for_link_media_swap;
+               break;
        }
-
-       /* Function Pointers */
-       nvm->ops.acquire = e1000_acquire_nvm_82575;
-       nvm->ops.release = e1000_release_nvm_82575;
-       if (nvm->word_size < (1 << 15))
-               nvm->ops.read = e1000_read_nvm_eerd;
-       else
-               nvm->ops.read = e1000_read_nvm_spi;
-
-       nvm->ops.write = e1000_write_nvm_spi;
-       nvm->ops.validate = e1000_validate_nvm_checksum_generic;
-       nvm->ops.update = e1000_update_nvm_checksum_generic;
-       nvm->ops.valid_led_default = e1000_valid_led_default_82575;
-
-       /* override generic family function pointers for specific descendants */
-       switch (hw->mac.type) {
-       case e1000_82580:
-               nvm->ops.validate = e1000_validate_nvm_checksum_82580;
-               nvm->ops.update = e1000_update_nvm_checksum_82580;
+       case M88E1512_E_PHY_ID:
+       {
+               ret_val = e1000_initialize_M88E1512_phy(hw);
                break;
-       case e1000_i350:
-       case e1000_i354:
-               nvm->ops.validate = e1000_validate_nvm_checksum_i350;
-               nvm->ops.update = e1000_update_nvm_checksum_i350;
+       }
+       case M88E1543_E_PHY_ID:
+       {
+               ret_val = e1000_initialize_M88E1543_phy(hw);
                break;
+       }
        default:
-               break;
+               goto out;
        }
 
-       return E1000_SUCCESS;
+out:
+       return ret_val;
 }
 
 /**
- *  e1000_init_mac_params_82575 - Init MAC func ptrs.
- *  @hw: pointer to the HW structure
+ * e1000_init_mac_params_82575 - Initialize MAC function ptrs
+ * @hw: pointer to the HW structure
  **/
 STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 {
@@ -417,13 +302,16 @@ STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 
        DEBUGFUNC("e1000_init_mac_params_82575");
 
+       /* Initialize function pointer */
+       e1000_init_mac_ops_generic(hw);
+
        /* Derives media type */
        e1000_get_media_type_82575(hw);
-       /* Set mta register count */
+       /* Set MTA register count */
        mac->mta_reg_count = 128;
-       /* Set uta register count */
+       /* Set UTA register count */
        mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
-       /* Set rar entry count */
+       /* Set RAR entry count */
        mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
        if (mac->type == e1000_82576)
                mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
@@ -456,12 +344,12 @@ STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
        if (mac->type >= e1000_82580)
                mac->ops.reset_hw = e1000_reset_hw_82580;
        else
-       mac->ops.reset_hw = e1000_reset_hw_82575;
-       /* hw initialization */
+               mac->ops.reset_hw = e1000_reset_hw_82575;
+       /* HW initialization */
        if ((mac->type == e1000_i210) || (mac->type == e1000_i211))
                mac->ops.init_hw = e1000_init_hw_i210;
        else
-       mac->ops.init_hw = e1000_init_hw_82575;
+               mac->ops.init_hw = e1000_init_hw_82575;
        /* link setup */
        mac->ops.setup_link = e1000_setup_link_generic;
        /* physical interface link setup */
@@ -493,7 +381,7 @@ STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
        }
        if (hw->mac.type >= e1000_82580)
                mac->ops.validate_mdi_setting =
-                               e1000_validate_mdi_setting_crossover_generic;
+                       e1000_validate_mdi_setting_crossover_generic;
        /* ID LED init */
        mac->ops.id_led_init = e1000_id_led_init_generic;
        /* blink LED */
@@ -511,8 +399,9 @@ STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
        mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
        /* acquire SW_FW sync */
        mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync_82575;
+       /* release SW_FW sync */
        mac->ops.release_swfw_sync = e1000_release_swfw_sync_82575;
-       if (mac->type >= e1000_i210) {
+       if (mac->type == e1000_i210 || mac->type == e1000_i211) {
                mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync_i210;
                mac->ops.release_swfw_sync = e1000_release_swfw_sync_i210;
        }
@@ -524,63 +413,102 @@ STATIC s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_init_function_pointers_82575 - Init func ptrs.
- *  @hw: pointer to the HW structure
- *
- *  Called to initialize all function pointers and parameters.
+ * e1000_init_nvm_params_82575 - Initialize NVM function ptrs
+ * @hw: pointer to the HW structure
  **/
-void e1000_init_function_pointers_82575(struct e1000_hw *hw)
+s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
 {
-       DEBUGFUNC("e1000_init_function_pointers_82575");
+       struct e1000_nvm_info *nvm = &hw->nvm;
+       u32 eecd = E1000_READ_REG(hw, E1000_EECD);
+       u16 size;
 
-       hw->mac.ops.init_params = e1000_init_mac_params_82575;
-       hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
-       hw->phy.ops.init_params = e1000_init_phy_params_82575;
-       hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
-}
+       DEBUGFUNC("e1000_init_nvm_params_82575");
 
-/**
- *  e1000_acquire_phy_82575 - Acquire rights to access PHY
- *  @hw: pointer to the HW structure
- *
- *  Acquire access rights to the correct PHY.
- **/
-STATIC s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
-{
-       u16 mask = E1000_SWFW_PHY0_SM;
+       size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
+                    E1000_EECD_SIZE_EX_SHIFT);
+       /* Added to a constant, "size" becomes the left-shift value
+        * for setting word_size.
+        */
+       size += NVM_WORD_SIZE_BASE_SHIFT;
+
+       /* Just in case size is out of range, cap it to the largest
+        * EEPROM size supported
+        */
+       if (size > 15)
+               size = 15;
 
-       DEBUGFUNC("e1000_acquire_phy_82575");
+       nvm->word_size = 1 << size;
+       if (hw->mac.type < e1000_i210) {
+               nvm->opcode_bits = 8;
+               nvm->delay_usec = 1;
 
-       if (hw->bus.func == E1000_FUNC_1)
-               mask = E1000_SWFW_PHY1_SM;
-       else if (hw->bus.func == E1000_FUNC_2)
-               mask = E1000_SWFW_PHY2_SM;
-       else if (hw->bus.func == E1000_FUNC_3)
-               mask = E1000_SWFW_PHY3_SM;
+               switch (nvm->override) {
+               case e1000_nvm_override_spi_large:
+                       nvm->page_size = 32;
+                       nvm->address_bits = 16;
+                       break;
+               case e1000_nvm_override_spi_small:
+                       nvm->page_size = 8;
+                       nvm->address_bits = 8;
+                       break;
+               default:
+                       nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
+                       nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
+                                           16 : 8;
+                       break;
+               }
+               if (nvm->word_size == (1 << 15))
+                       nvm->page_size = 128;
+
+               nvm->type = e1000_nvm_eeprom_spi;
+       } else {
+               nvm->type = e1000_nvm_flash_hw;
+       }
+
+       /* Function Pointers */
+       nvm->ops.acquire = e1000_acquire_nvm_82575;
+       nvm->ops.release = e1000_release_nvm_82575;
+       if (nvm->word_size < (1 << 15))
+               nvm->ops.read = e1000_read_nvm_eerd;
+       else
+               nvm->ops.read = e1000_read_nvm_spi;
+
+       nvm->ops.write = e1000_write_nvm_spi;
+       nvm->ops.validate = e1000_validate_nvm_checksum_generic;
+       nvm->ops.update = e1000_update_nvm_checksum_generic;
+       nvm->ops.valid_led_default = e1000_valid_led_default_82575;
+
+       /* override generic family function pointers for specific descendants */
+       switch (hw->mac.type) {
+       case e1000_82580:
+               nvm->ops.validate = e1000_validate_nvm_checksum_82580;
+               nvm->ops.update = e1000_update_nvm_checksum_82580;
+               break;
+       case e1000_i350:
+               nvm->ops.validate = e1000_validate_nvm_checksum_i350;
+               nvm->ops.update = e1000_update_nvm_checksum_i350;
+               break;
+       default:
+               break;
+       }
 
-       return hw->mac.ops.acquire_swfw_sync(hw, mask);
+       return E1000_SUCCESS;
 }
 
 /**
- *  e1000_release_phy_82575 - Release rights to access PHY
+ *  e1000_init_function_pointers_82575 - Init func ptrs.
  *  @hw: pointer to the HW structure
  *
- *  A wrapper to release access rights to the correct PHY.
+ *  Called to initialize all function pointers and parameters.
  **/
-STATIC void e1000_release_phy_82575(struct e1000_hw *hw)
+void e1000_init_function_pointers_82575(struct e1000_hw *hw)
 {
-       u16 mask = E1000_SWFW_PHY0_SM;
-
-       DEBUGFUNC("e1000_release_phy_82575");
-
-       if (hw->bus.func == E1000_FUNC_1)
-               mask = E1000_SWFW_PHY1_SM;
-       else if (hw->bus.func == E1000_FUNC_2)
-               mask = E1000_SWFW_PHY2_SM;
-       else if (hw->bus.func == E1000_FUNC_3)
-               mask = E1000_SWFW_PHY3_SM;
+       DEBUGFUNC("e1000_init_function_pointers_82575");
 
-       hw->mac.ops.release_swfw_sync(hw, mask);
+       hw->mac.ops.init_params = e1000_init_mac_params_82575;
+       hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
+       hw->phy.ops.init_params = e1000_init_phy_params_82575;
+       hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
 }
 
 /**
@@ -1110,7 +1038,7 @@ STATIC void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
                ; /* Empty */
 
        swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
-       swfw_sync &= ~mask;
+       swfw_sync &= (u32)~mask;
        E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
 
        e1000_put_hw_semaphore_generic(hw);
@@ -1481,16 +1409,15 @@ STATIC s32 e1000_reset_hw_82575(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_init_hw_82575 - Initialize hardware
- *  @hw: pointer to the HW structure
+ * e1000_init_hw_82575 - Initialize hardware
+ * @hw: pointer to the HW structure
  *
- *  This inits the hardware readying it for operation.
+ * This inits the hardware readying it for operation.
  **/
-s32 e1000_init_hw_82575(struct e1000_hw *hw)
+STATIC s32 e1000_init_hw_82575(struct e1000_hw *hw)
 {
        struct e1000_mac_info *mac = &hw->mac;
        s32 ret_val;
-       u16 i, rar_count = mac->rar_entry_count;
 
        DEBUGFUNC("e1000_init_hw_82575");
 
@@ -1505,27 +1432,12 @@ s32 e1000_init_hw_82575(struct e1000_hw *hw)
        DEBUGOUT("Initializing the IEEE VLAN\n");
        mac->ops.clear_vfta(hw);
 
-       /* Setup the receive address */
-       e1000_init_rx_addrs_generic(hw, rar_count);
-
-       /* Zero out the Multicast HASH table */
-       DEBUGOUT("Zeroing the MTA\n");
-       for (i = 0; i < mac->mta_reg_count; i++)
-               E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
-
-       /* Zero out the Unicast HASH table */
-       DEBUGOUT("Zeroing the UTA\n");
-       for (i = 0; i < mac->uta_reg_count; i++)
-               E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0);
-
-       /* Setup link and flow control */
-       ret_val = mac->ops.setup_link(hw);
+       ret_val = e1000_init_hw_base(hw);
 
        /* Set the default MTU size */
        hw->dev_spec._82575.mtu = 1500;
 
-       /*
-        * Clear all of the statistics registers (clear on read).  It is
+       /* Clear all of the statistics registers (clear on read).  It is
         * important that we do this after we have tried to establish link
         * because the symbol error count will increment wildly if there
         * is no link.
@@ -1534,7 +1446,6 @@ s32 e1000_init_hw_82575(struct e1000_hw *hw)
 
        return ret_val;
 }
-
 /**
  *  e1000_setup_copper_link_82575 - Configure copper link settings
  *  @hw: pointer to the HW structure
@@ -1545,9 +1456,9 @@ s32 e1000_init_hw_82575(struct e1000_hw *hw)
  **/
 STATIC s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 {
-       u32 ctrl;
-       s32 ret_val;
        u32 phpm_reg;
+       s32 ret_val;
+       u32 ctrl;
 
        DEBUGFUNC("e1000_setup_copper_link_82575");
 
@@ -1586,14 +1497,21 @@ STATIC s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
        }
        switch (hw->phy.type) {
        case e1000_phy_i210:
+       /* Fall through */
        case e1000_phy_m88:
                switch (hw->phy.id) {
                case I347AT4_E_PHY_ID:
+               /* Fall through */
                case M88E1112_E_PHY_ID:
+               /* Fall through */
                case M88E1340M_E_PHY_ID:
+               /* Fall through */
                case M88E1543_E_PHY_ID:
+               /* Fall through */
                case M88E1512_E_PHY_ID:
+               /* Fall through */
                case I210_I_PHY_ID:
+               /* Fall through */
                        ret_val = e1000_copper_link_setup_m88_gen2(hw);
                        break;
                default:
@@ -1677,7 +1595,7 @@ STATIC s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
        case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
                /* disable PCS autoneg and support parallel detect only */
                pcs_autoneg = false;
-               /* fall through to default case */
+               /* Fall through */
        default:
                if (hw->mac.type == e1000_82575 ||
                    hw->mac.type == e1000_82576) {
@@ -1803,7 +1721,7 @@ STATIC s32 e1000_get_media_type_82575(struct e1000_hw *hw)
                        dev_spec->sgmii_active = true;
                        break;
                }
-               /* fall through for I2C based SGMII */
+               /* Fall through for I2C based SGMII */
        case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
                /* read media type from SFP EEPROM */
                ret_val = e1000_set_sfp_media_type_82575(hw);
@@ -1968,7 +1886,7 @@ STATIC bool e1000_sgmii_active_82575(struct e1000_hw *hw)
  *  Inits recommended HW defaults after a reset when there is no EEPROM
  *  detected. This is only for the 82575.
  **/
-STATIC s32 e1000_reset_init_script_82575(struct e1000_hw *hw)
+s32 e1000_reset_init_script_82575(struct e1000_hw *hw)
 {
        DEBUGFUNC("e1000_reset_init_script_82575");
 
@@ -2046,27 +1964,6 @@ STATIC void e1000_config_collision_dist_82575(struct e1000_hw *hw)
        E1000_WRITE_FLUSH(hw);
 }
 
-/**
- * e1000_power_down_phy_copper_82575 - Remove link during PHY power down
- * @hw: pointer to the HW structure
- *
- * In the case of a PHY power down to save power, or to turn off link during a
- * driver unload, or wake on lan is not enabled, remove the link.
- **/
-STATIC void e1000_power_down_phy_copper_82575(struct e1000_hw *hw)
-{
-       struct e1000_phy_info *phy = &hw->phy;
-
-       if (!(phy->ops.check_reset_block))
-               return;
-
-       /* If the management interface is not enabled, then power down */
-       if (!(e1000_enable_mng_pass_thru(hw) || phy->ops.check_reset_block(hw)))
-               e1000_power_down_phy_copper(hw);
-
-       return;
-}
-
 /**
  *  e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
  *  @hw: pointer to the HW structure
@@ -2132,85 +2029,6 @@ STATIC void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
                E1000_READ_REG(hw, E1000_SCVPC);
 }
 
-/**
- *  e1000_rx_fifo_flush_82575 - Clean rx fifo after Rx enable
- *  @hw: pointer to the HW structure
- *
- *  After Rx enable, if manageability is enabled then there is likely some
- *  bad data at the start of the fifo and possibly in the DMA fifo.  This
- *  function clears the fifos and flushes any packets that came in as rx was
- *  being enabled.
- **/
-void e1000_rx_fifo_flush_82575(struct e1000_hw *hw)
-{
-       u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
-       int i, ms_wait;
-
-       DEBUGFUNC("e1000_rx_fifo_flush_82575");
-
-       /* disable IPv6 options as per hardware errata */
-       rfctl = E1000_READ_REG(hw, E1000_RFCTL);
-       rfctl |= E1000_RFCTL_IPV6_EX_DIS;
-       E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
-
-       if (hw->mac.type != e1000_82575 ||
-           !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN))
-               return;
-
-       /* Disable all Rx queues */
-       for (i = 0; i < 4; i++) {
-               rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i));
-               E1000_WRITE_REG(hw, E1000_RXDCTL(i),
-                               rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
-       }
-       /* Poll all queues to verify they have shut down */
-       for (ms_wait = 0; ms_wait < 10; ms_wait++) {
-               msec_delay(1);
-               rx_enabled = 0;
-               for (i = 0; i < 4; i++)
-                       rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i));
-               if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
-                       break;
-       }
-
-       if (ms_wait == 10)
-               DEBUGOUT("Queue disable timed out after 10ms\n");
-
-       /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
-        * incoming packets are rejected.  Set enable and wait 2ms so that
-        * any packet that was coming in as RCTL.EN was set is flushed
-        */
-       E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
-
-       rlpml = E1000_READ_REG(hw, E1000_RLPML);
-       E1000_WRITE_REG(hw, E1000_RLPML, 0);
-
-       rctl = E1000_READ_REG(hw, E1000_RCTL);
-       temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
-       temp_rctl |= E1000_RCTL_LPE;
-
-       E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl);
-       E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN);
-       E1000_WRITE_FLUSH(hw);
-       msec_delay(2);
-
-       /* Enable Rx queues that were previously enabled and restore our
-        * previous state
-        */
-       for (i = 0; i < 4; i++)
-               E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]);
-       E1000_WRITE_REG(hw, E1000_RCTL, rctl);
-       E1000_WRITE_FLUSH(hw);
-
-       E1000_WRITE_REG(hw, E1000_RLPML, rlpml);
-       E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
-
-       /* Flush receive errors generated by workaround */
-       E1000_READ_REG(hw, E1000_ROC);
-       E1000_READ_REG(hw, E1000_RNBC);
-       E1000_READ_REG(hw, E1000_MPC);
-}
-
 /**
  *  e1000_set_pcie_completion_timeout - set pci-e completion timeout
  *  @hw: pointer to the HW structure
@@ -2414,7 +2232,7 @@ out:
  *  e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
  *  @hw: pointer to the HW structure
  *
- *  This resets the the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
+ *  This resets the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
  *  the values found in the EEPROM.  This addresses an issue in which these
  *  bits are not restored from EEPROM after reset.
  **/
@@ -2781,7 +2599,7 @@ out:
 /**
  *  __e1000_access_emi_reg - Read/write EMI register
  *  @hw: pointer to the HW structure
- *  @addr: EMI address to program
+ *  @address: EMI address to program
  *  @data: pointer to value to read/write from/to the EMI address
  *  @read: boolean flag to indicate read or write
  **/
@@ -3008,8 +2826,8 @@ out:
 /**
  *  e1000_set_eee_i350 - Enable/disable EEE support
  *  @hw: pointer to the HW structure
- *  @adv1g: boolean flag enabling 1G EEE advertisement
- *  @adv100m: boolean flag enabling 100M EEE advertisement
+ *  @adv1G: boolean flag enabling 1G EEE advertisement
+ *  @adv100M: boolean flag enabling 100M EEE advertisement
  *
  *  Enable/disable EEE based on setting in dev_spec structure.
  *
@@ -3063,8 +2881,8 @@ out:
 /**
  *  e1000_set_eee_i354 - Enable/disable EEE support
  *  @hw: pointer to the HW structure
- *  @adv1g: boolean flag enabling 1G EEE advertisement
- *  @adv100m: boolean flag enabling 100M EEE advertisement
+ *  @adv1G: boolean flag enabling 1G EEE advertisement
+ *  @adv100M: boolean flag enabling 100M EEE advertisement
  *
  *  Enable/disable EEE legacy mode based on setting in dev_spec structure.
  *
@@ -3317,9 +3135,7 @@ s32 e1000_read_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
                if (status != E1000_SUCCESS)
                        goto fail;
 
-               status = e1000_clock_in_i2c_byte(hw, data);
-               if (status != E1000_SUCCESS)
-                       goto fail;
+               e1000_clock_in_i2c_byte(hw, data);
 
                status = e1000_clock_out_i2c_bit(hw, nack);
                if (status != E1000_SUCCESS)
@@ -3483,7 +3299,7 @@ STATIC void e1000_i2c_stop(struct e1000_hw *hw)
  *
  *  Clocks in one byte data via I2C data/clock
  **/
-STATIC s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
+STATIC void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
 {
        s32 i;
        bool bit = 0;
@@ -3495,8 +3311,6 @@ STATIC s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
                e1000_clock_in_i2c_bit(hw, &bit);
                *data |= bit << i;
        }
-
-       return E1000_SUCCESS;
 }
 
 /**
@@ -3585,7 +3399,7 @@ STATIC s32 e1000_get_i2c_ack(struct e1000_hw *hw)
  *
  *  Clocks in one bit via I2C data/clock
  **/
-STATIC s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
+STATIC void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
 {
        u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 
@@ -3603,8 +3417,6 @@ STATIC s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
 
        /* Minimum low period of clock is 4.7 us */
        usec_delay(E1000_I2C_T_LOW);
-
-       return E1000_SUCCESS;
 }
 
 /**
@@ -3720,7 +3532,6 @@ STATIC s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data)
 
 /**
  *  e1000_get_i2c_data - Reads the I2C SDA data bit
- *  @hw: pointer to hardware structure
  *  @i2cctl: Current value of I2CCTL register
  *
  *  Returns the I2C data bit value