The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/e1000/e1000_82575.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /******************************************************************************
    2   SPDX-License-Identifier: BSD-3-Clause
    3 
    4   Copyright (c) 2001-2020, Intel Corporation
    5   All rights reserved.
    6 
    7   Redistribution and use in source and binary forms, with or without
    8   modification, are permitted provided that the following conditions are met:
    9 
   10    1. Redistributions of source code must retain the above copyright notice,
   11       this list of conditions and the following disclaimer.
   12 
   13    2. Redistributions in binary form must reproduce the above copyright
   14       notice, this list of conditions and the following disclaimer in the
   15       documentation and/or other materials provided with the distribution.
   16 
   17    3. Neither the name of the Intel Corporation nor the names of its
   18       contributors may be used to endorse or promote products derived from
   19       this software without specific prior written permission.
   20 
   21   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   22   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   25   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   26   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   27   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   28   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   29   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   30   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   31   POSSIBILITY OF SUCH DAMAGE.
   32 
   33 ******************************************************************************/
   34 /*$FreeBSD$*/
   35 
   36 /*
   37  * 82575EB Gigabit Network Connection
   38  * 82575EB Gigabit Backplane Connection
   39  * 82575GB Gigabit Network Connection
   40  * 82576 Gigabit Network Connection
   41  * 82576 Quad Port Gigabit Mezzanine Adapter
   42  * 82580 Gigabit Network Connection
   43  * I350 Gigabit Network Connection
   44  */
   45 
   46 #include "e1000_api.h"
   47 #include "e1000_i210.h"
   48 
   49 static s32  e1000_init_phy_params_82575(struct e1000_hw *hw);
   50 static s32  e1000_init_mac_params_82575(struct e1000_hw *hw);
   51 static s32  e1000_acquire_nvm_82575(struct e1000_hw *hw);
   52 static void e1000_release_nvm_82575(struct e1000_hw *hw);
   53 static s32  e1000_check_for_link_82575(struct e1000_hw *hw);
   54 static s32  e1000_check_for_link_media_swap(struct e1000_hw *hw);
   55 static s32  e1000_get_cfg_done_82575(struct e1000_hw *hw);
   56 static s32  e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
   57                                          u16 *duplex);
   58 static s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
   59 static s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
   60                                            u16 *data);
   61 static s32  e1000_reset_hw_82575(struct e1000_hw *hw);
   62 static s32  e1000_init_hw_82575(struct e1000_hw *hw);
   63 static s32  e1000_reset_hw_82580(struct e1000_hw *hw);
   64 static s32  e1000_read_phy_reg_82580(struct e1000_hw *hw,
   65                                      u32 offset, u16 *data);
   66 static s32  e1000_write_phy_reg_82580(struct e1000_hw *hw,
   67                                       u32 offset, u16 data);
   68 static s32  e1000_set_d0_lplu_state_82580(struct e1000_hw *hw,
   69                                           bool active);
   70 static s32  e1000_set_d3_lplu_state_82580(struct e1000_hw *hw,
   71                                           bool active);
   72 static s32  e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
   73                                           bool active);
   74 static s32  e1000_setup_copper_link_82575(struct e1000_hw *hw);
   75 static s32  e1000_setup_serdes_link_82575(struct e1000_hw *hw);
   76 static s32  e1000_get_media_type_82575(struct e1000_hw *hw);
   77 static s32  e1000_set_sfp_media_type_82575(struct e1000_hw *hw);
   78 static s32  e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
   79 static s32  e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
   80                                             u32 offset, u16 data);
   81 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
   82 static s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
   83                                                  u16 *speed, u16 *duplex);
   84 static s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
   85 static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
   86 static s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
   87 static void e1000_config_collision_dist_82575(struct e1000_hw *hw);
   88 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
   89 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw);
   90 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
   91 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw);
   92 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw);
   93 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw);
   94 static s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw,
   95                                                  u16 offset);
   96 static s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw,
   97                                                    u16 offset);
   98 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw);
   99 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw);
  100 static void e1000_clear_vfta_i350(struct e1000_hw *hw);
  101 
  102 static void e1000_i2c_start(struct e1000_hw *hw);
  103 static void e1000_i2c_stop(struct e1000_hw *hw);
  104 static void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data);
  105 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data);
  106 static s32 e1000_get_i2c_ack(struct e1000_hw *hw);
  107 static void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data);
  108 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data);
  109 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
  110 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
  111 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data);
  112 static bool e1000_get_i2c_data(u32 *i2cctl);
  113 
  114 static const u16 e1000_82580_rxpbs_table[] = {
  115         36, 72, 144, 1, 2, 4, 8, 16, 35, 70, 140 };
  116 #define E1000_82580_RXPBS_TABLE_SIZE \
  117         (sizeof(e1000_82580_rxpbs_table) / \
  118          sizeof(e1000_82580_rxpbs_table[0]))
  119 
  120 
  121 /**
  122  *  e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO
  123  *  @hw: pointer to the HW structure
  124  *
  125  *  Called to determine if the I2C pins are being used for I2C or as an
  126  *  external MDIO interface since the two options are mutually exclusive.
  127  **/
  128 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw)
  129 {
  130         u32 reg = 0;
  131         bool ext_mdio = false;
  132 
  133         DEBUGFUNC("e1000_sgmii_uses_mdio_82575");
  134 
  135         switch (hw->mac.type) {
  136         case e1000_82575:
  137         case e1000_82576:
  138                 reg = E1000_READ_REG(hw, E1000_MDIC);
  139                 ext_mdio = !!(reg & E1000_MDIC_DEST);
  140                 break;
  141         case e1000_82580:
  142         case e1000_i350:
  143         case e1000_i354:
  144         case e1000_i210:
  145         case e1000_i211:
  146                 reg = E1000_READ_REG(hw, E1000_MDICNFG);
  147                 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO);
  148                 break;
  149         default:
  150                 break;
  151         }
  152         return ext_mdio;
  153 }
  154 
  155 /**
  156  * e1000_init_phy_params_82575 - Initialize PHY function ptrs
  157  * @hw: pointer to the HW structure
  158  **/
  159 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
  160 {
  161         struct e1000_phy_info *phy = &hw->phy;
  162         s32 ret_val = E1000_SUCCESS;
  163         u32 ctrl_ext;
  164 
  165         DEBUGFUNC("e1000_init_phy_params_82575");
  166 
  167         phy->ops.read_i2c_byte = e1000_read_i2c_byte_generic;
  168         phy->ops.write_i2c_byte = e1000_write_i2c_byte_generic;
  169 
  170         if (hw->phy.media_type != e1000_media_type_copper) {
  171                 phy->type = e1000_phy_none;
  172                 goto out;
  173         }
  174 
  175         phy->ops.power_up       = e1000_power_up_phy_copper;
  176         phy->ops.power_down     = e1000_power_down_phy_copper_base;
  177 
  178         phy->autoneg_mask       = AUTONEG_ADVERTISE_SPEED_DEFAULT;
  179         phy->reset_delay_us     = 100;
  180 
  181         phy->ops.acquire        = e1000_acquire_phy_base;
  182         phy->ops.check_reset_block = e1000_check_reset_block_generic;
  183         phy->ops.commit         = e1000_phy_sw_reset_generic;
  184         phy->ops.get_cfg_done   = e1000_get_cfg_done_82575;
  185         phy->ops.release        = e1000_release_phy_base;
  186 
  187         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
  188 
  189         if (e1000_sgmii_active_82575(hw)) {
  190                 phy->ops.reset = e1000_phy_hw_reset_sgmii_82575;
  191                 ctrl_ext |= E1000_CTRL_I2C_ENA;
  192         } else {
  193                 phy->ops.reset = e1000_phy_hw_reset_generic;
  194                 ctrl_ext &= ~E1000_CTRL_I2C_ENA;
  195         }
  196 
  197         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
  198         e1000_reset_mdicnfg_82580(hw);
  199 
  200         if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) {
  201                 phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575;
  202                 phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575;
  203         } else {
  204                 switch (hw->mac.type) {
  205                 case e1000_82580:
  206                 case e1000_i350:
  207                 case e1000_i354:
  208                         phy->ops.read_reg = e1000_read_phy_reg_82580;
  209                         phy->ops.write_reg = e1000_write_phy_reg_82580;
  210                         break;
  211                 case e1000_i210:
  212                 case e1000_i211:
  213                         phy->ops.read_reg = e1000_read_phy_reg_gs40g;
  214                         phy->ops.write_reg = e1000_write_phy_reg_gs40g;
  215                         break;
  216                 default:
  217                         phy->ops.read_reg = e1000_read_phy_reg_igp;
  218                         phy->ops.write_reg = e1000_write_phy_reg_igp;
  219                 }
  220         }
  221 
  222         /* Set phy->phy_addr and phy->id. */
  223         ret_val = e1000_get_phy_id_82575(hw);
  224 
  225         /* Verify phy id and set remaining function pointers */
  226         switch (phy->id) {
  227         case M88E1543_E_PHY_ID:
  228         case M88E1512_E_PHY_ID:
  229         case I347AT4_E_PHY_ID:
  230         case M88E1112_E_PHY_ID:
  231         case M88E1340M_E_PHY_ID:
  232                 phy->type               = e1000_phy_m88;
  233                 phy->ops.check_polarity = e1000_check_polarity_m88;
  234                 phy->ops.get_info       = e1000_get_phy_info_m88;
  235                 phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
  236                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
  237                 break;
  238         case M88E1111_I_PHY_ID:
  239                 phy->type               = e1000_phy_m88;
  240                 phy->ops.check_polarity = e1000_check_polarity_m88;
  241                 phy->ops.get_info       = e1000_get_phy_info_m88;
  242                 phy->ops.get_cable_length = e1000_get_cable_length_m88;
  243                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
  244                 break;
  245         case IGP03E1000_E_PHY_ID:
  246         case IGP04E1000_E_PHY_ID:
  247                 phy->type               = e1000_phy_igp_3;
  248                 phy->ops.check_polarity = e1000_check_polarity_igp;
  249                 phy->ops.get_info       = e1000_get_phy_info_igp;
  250                 phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
  251                 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575;
  252                 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic;
  253                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
  254                 break;
  255         case I82580_I_PHY_ID:
  256         case I350_I_PHY_ID:
  257                 phy->type               = e1000_phy_82580;
  258                 phy->ops.check_polarity = e1000_check_polarity_82577;
  259                 phy->ops.get_info       = e1000_get_phy_info_82577;
  260                 phy->ops.get_cable_length = e1000_get_cable_length_82577;
  261                 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
  262                 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
  263                 phy->ops.force_speed_duplex =
  264                                 e1000_phy_force_speed_duplex_82577;
  265                 break;
  266         case I210_I_PHY_ID:
  267                 phy->type               = e1000_phy_i210;
  268                 phy->ops.check_polarity = e1000_check_polarity_m88;
  269                 phy->ops.get_info       = e1000_get_phy_info_m88;
  270                 phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
  271                 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
  272                 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
  273                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
  274                 break;
  275         default:
  276                 ret_val = -E1000_ERR_PHY;
  277                 goto out;
  278         }
  279 
  280         /* Check if this PHY is configured for media swap. */
  281         switch (phy->id) {
  282         case M88E1112_E_PHY_ID:
  283         {
  284                 u16 data;
  285 
  286                 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 2);
  287                 if (ret_val)
  288                         goto out;
  289                 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_MAC_CTRL_1,
  290                                             &data);
  291                 if (ret_val)
  292                         goto out;
  293 
  294                 data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >>
  295                         E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT;
  296                 if (data == E1000_M88E1112_AUTO_COPPER_SGMII ||
  297                     data == E1000_M88E1112_AUTO_COPPER_BASEX)
  298                         hw->mac.ops.check_for_link =
  299                                                 e1000_check_for_link_media_swap;
  300                 break;
  301         }
  302         case M88E1512_E_PHY_ID:
  303         {
  304                 ret_val = e1000_initialize_M88E1512_phy(hw);
  305                 break;
  306         }
  307         case M88E1543_E_PHY_ID:
  308         {
  309                 ret_val = e1000_initialize_M88E1543_phy(hw);
  310                 break;
  311         }
  312         default:
  313                 goto out;
  314         }
  315 
  316 out:
  317         return ret_val;
  318 }
  319 
  320 /**
  321  * e1000_init_mac_params_82575 - Init MAC func ptrs.
  322  * @hw: pointer to the HW structure
  323  **/
  324 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
  325 {
  326         struct e1000_mac_info *mac = &hw->mac;
  327         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
  328 
  329         DEBUGFUNC("e1000_init_mac_params_82575");
  330 
  331         /* Initialize function pointer */
  332         e1000_init_mac_ops_generic(hw);
  333 
  334         /* Derives media type */
  335         e1000_get_media_type_82575(hw);
  336         /* Set MTA register count */
  337         mac->mta_reg_count = 128;
  338         /* Set UTA register count */
  339         mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
  340         /* Set RAR entry count */
  341         mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
  342         if (mac->type == e1000_82576)
  343                 mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
  344         if (mac->type == e1000_82580)
  345                 mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
  346         if (mac->type == e1000_i350 || mac->type == e1000_i354)
  347                 mac->rar_entry_count = E1000_RAR_ENTRIES_I350;
  348 
  349         /* Enable EEE default settings for EEE supported devices */
  350         if (mac->type >= e1000_i350)
  351                 dev_spec->eee_disable = false;
  352 
  353         /* Allow a single clear of the SW semaphore on I210 and newer */
  354         if (mac->type >= e1000_i210)
  355                 dev_spec->clear_semaphore_once = true;
  356 
  357         /* Set if part includes ASF firmware */
  358         mac->asf_firmware_present = true;
  359         /* FWSM register */
  360         mac->has_fwsm = true;
  361         /* ARC supported; valid only if manageability features are enabled. */
  362         mac->arc_subsystem_valid =
  363                 !!(E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK);
  364 
  365         /* Function pointers */
  366 
  367         /* bus type/speed/width */
  368         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
  369         /* reset */
  370         if (mac->type >= e1000_82580)
  371                 mac->ops.reset_hw = e1000_reset_hw_82580;
  372         else
  373                 mac->ops.reset_hw = e1000_reset_hw_82575;
  374         /* HW initialization */
  375         if ((mac->type == e1000_i210) || (mac->type == e1000_i211))
  376                 mac->ops.init_hw = e1000_init_hw_i210;
  377         else
  378                 mac->ops.init_hw = e1000_init_hw_82575;
  379         /* link setup */
  380         mac->ops.setup_link = e1000_setup_link_generic;
  381         /* physical interface link setup */
  382         mac->ops.setup_physical_interface =
  383                 (hw->phy.media_type == e1000_media_type_copper)
  384                 ? e1000_setup_copper_link_82575 : e1000_setup_serdes_link_82575;
  385         /* physical interface shutdown */
  386         mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575;
  387         /* physical interface power up */
  388         mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575;
  389         /* check for link */
  390         mac->ops.check_for_link = e1000_check_for_link_82575;
  391         /* read mac address */
  392         mac->ops.read_mac_addr = e1000_read_mac_addr_82575;
  393         /* configure collision distance */
  394         mac->ops.config_collision_dist = e1000_config_collision_dist_82575;
  395         /* multicast address update */
  396         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
  397         if (hw->mac.type == e1000_i350 || mac->type == e1000_i354) {
  398                 /* writing VFTA */
  399                 mac->ops.write_vfta = e1000_write_vfta_i350;
  400                 /* clearing VFTA */
  401                 mac->ops.clear_vfta = e1000_clear_vfta_i350;
  402         } else {
  403                 /* writing VFTA */
  404                 mac->ops.write_vfta = e1000_write_vfta_generic;
  405                 /* clearing VFTA */
  406                 mac->ops.clear_vfta = e1000_clear_vfta_generic;
  407         }
  408         if (hw->mac.type >= e1000_82580)
  409                 mac->ops.validate_mdi_setting =
  410                         e1000_validate_mdi_setting_crossover_generic;
  411         /* ID LED init */
  412         mac->ops.id_led_init = e1000_id_led_init_generic;
  413         /* blink LED */
  414         mac->ops.blink_led = e1000_blink_led_generic;
  415         /* setup LED */
  416         mac->ops.setup_led = e1000_setup_led_generic;
  417         /* cleanup LED */
  418         mac->ops.cleanup_led = e1000_cleanup_led_generic;
  419         /* turn on/off LED */
  420         mac->ops.led_on = e1000_led_on_generic;
  421         mac->ops.led_off = e1000_led_off_generic;
  422         /* clear hardware counters */
  423         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575;
  424         /* link info */
  425         mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
  426         /* acquire SW_FW sync */
  427         mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync;
  428         /* release SW_FW sync */
  429         mac->ops.release_swfw_sync = e1000_release_swfw_sync;
  430 
  431         /* set lan id for port to determine which phy lock to use */
  432         hw->mac.ops.set_lan_id(hw);
  433 
  434         return E1000_SUCCESS;
  435 }
  436 
  437 /**
  438  * e1000_init_nvm_params_82575 - Initialize NVM function ptrs
  439  * @hw: pointer to the HW structure
  440  **/
  441 s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
  442 {
  443         struct e1000_nvm_info *nvm = &hw->nvm;
  444         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
  445         u16 size;
  446 
  447         DEBUGFUNC("e1000_init_nvm_params_82575");
  448 
  449         size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
  450                      E1000_EECD_SIZE_EX_SHIFT);
  451         /* Added to a constant, "size" becomes the left-shift value
  452          * for setting word_size.
  453          */
  454         size += NVM_WORD_SIZE_BASE_SHIFT;
  455 
  456         /* Just in case size is out of range, cap it to the largest
  457          * EEPROM size supported
  458          */
  459         if (size > 15)
  460                 size = 15;
  461 
  462         nvm->word_size = 1 << size;
  463         if (hw->mac.type < e1000_i210) {
  464                 nvm->opcode_bits = 8;
  465                 nvm->delay_usec = 1;
  466 
  467                 switch (nvm->override) {
  468                 case e1000_nvm_override_spi_large:
  469                         nvm->page_size = 32;
  470                         nvm->address_bits = 16;
  471                         break;
  472                 case e1000_nvm_override_spi_small:
  473                         nvm->page_size = 8;
  474                         nvm->address_bits = 8;
  475                         break;
  476                 default:
  477                         nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
  478                         nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
  479                                             16 : 8;
  480                         break;
  481                 }
  482                 if (nvm->word_size == (1 << 15))
  483                         nvm->page_size = 128;
  484 
  485                 nvm->type = e1000_nvm_eeprom_spi;
  486         } else {
  487                 nvm->type = e1000_nvm_flash_hw;
  488         }
  489 
  490         /* Function Pointers */
  491         nvm->ops.acquire = e1000_acquire_nvm_82575;
  492         nvm->ops.release = e1000_release_nvm_82575;
  493         if (nvm->word_size < (1 << 15))
  494                 nvm->ops.read = e1000_read_nvm_eerd;
  495         else
  496                 nvm->ops.read = e1000_read_nvm_spi;
  497 
  498         nvm->ops.write = e1000_write_nvm_spi;
  499         nvm->ops.validate = e1000_validate_nvm_checksum_generic;
  500         nvm->ops.update = e1000_update_nvm_checksum_generic;
  501         nvm->ops.valid_led_default = e1000_valid_led_default_82575;
  502 
  503         /* override generic family function pointers for specific descendants */
  504         switch (hw->mac.type) {
  505         case e1000_82580:
  506                 nvm->ops.validate = e1000_validate_nvm_checksum_82580;
  507                 nvm->ops.update = e1000_update_nvm_checksum_82580;
  508                 break;
  509         case e1000_i350:
  510                 nvm->ops.validate = e1000_validate_nvm_checksum_i350;
  511                 nvm->ops.update = e1000_update_nvm_checksum_i350;
  512                 break;
  513         default:
  514                 break;
  515         }
  516 
  517         return E1000_SUCCESS;
  518 }
  519 
  520 /**
  521  *  e1000_init_function_pointers_82575 - Init func ptrs.
  522  *  @hw: pointer to the HW structure
  523  *
  524  *  Called to initialize all function pointers and parameters.
  525  **/
  526 void e1000_init_function_pointers_82575(struct e1000_hw *hw)
  527 {
  528         DEBUGFUNC("e1000_init_function_pointers_82575");
  529 
  530         hw->mac.ops.init_params = e1000_init_mac_params_82575;
  531         hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
  532         hw->phy.ops.init_params = e1000_init_phy_params_82575;
  533         hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
  534 }
  535 
  536 /**
  537  *  e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
  538  *  @hw: pointer to the HW structure
  539  *  @offset: register offset to be read
  540  *  @data: pointer to the read data
  541  *
  542  *  Reads the PHY register at offset using the serial gigabit media independent
  543  *  interface and stores the retrieved information in data.
  544  **/
  545 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
  546                                           u16 *data)
  547 {
  548         s32 ret_val = -E1000_ERR_PARAM;
  549 
  550         DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
  551 
  552         if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
  553                 DEBUGOUT1("PHY Address %u is out of range\n", offset);
  554                 goto out;
  555         }
  556 
  557         ret_val = hw->phy.ops.acquire(hw);
  558         if (ret_val)
  559                 goto out;
  560 
  561         ret_val = e1000_read_phy_reg_i2c(hw, offset, data);
  562 
  563         hw->phy.ops.release(hw);
  564 
  565 out:
  566         return ret_val;
  567 }
  568 
  569 /**
  570  *  e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
  571  *  @hw: pointer to the HW structure
  572  *  @offset: register offset to write to
  573  *  @data: data to write at register offset
  574  *
  575  *  Writes the data to PHY register at the offset using the serial gigabit
  576  *  media independent interface.
  577  **/
  578 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
  579                                            u16 data)
  580 {
  581         s32 ret_val = -E1000_ERR_PARAM;
  582 
  583         DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
  584 
  585         if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
  586                 DEBUGOUT1("PHY Address %d is out of range\n", offset);
  587                 goto out;
  588         }
  589 
  590         ret_val = hw->phy.ops.acquire(hw);
  591         if (ret_val)
  592                 goto out;
  593 
  594         ret_val = e1000_write_phy_reg_i2c(hw, offset, data);
  595 
  596         hw->phy.ops.release(hw);
  597 
  598 out:
  599         return ret_val;
  600 }
  601 
  602 /**
  603  *  e1000_get_phy_id_82575 - Retrieve PHY addr and id
  604  *  @hw: pointer to the HW structure
  605  *
  606  *  Retrieves the PHY address and ID for both PHY's which do and do not use
  607  *  sgmi interface.
  608  **/
  609 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
  610 {
  611         struct e1000_phy_info *phy = &hw->phy;
  612         s32  ret_val = E1000_SUCCESS;
  613         u16 phy_id;
  614         u32 ctrl_ext;
  615         u32 mdic;
  616 
  617         DEBUGFUNC("e1000_get_phy_id_82575");
  618 
  619         /* some i354 devices need an extra read for phy id */
  620         if (hw->mac.type == e1000_i354)
  621                 e1000_get_phy_id(hw);
  622 
  623         /*
  624          * For SGMII PHYs, we try the list of possible addresses until
  625          * we find one that works.  For non-SGMII PHYs
  626          * (e.g. integrated copper PHYs), an address of 1 should
  627          * work.  The result of this function should mean phy->phy_addr
  628          * and phy->id are set correctly.
  629          */
  630         if (!e1000_sgmii_active_82575(hw)) {
  631                 phy->addr = 1;
  632                 ret_val = e1000_get_phy_id(hw);
  633                 goto out;
  634         }
  635 
  636         if (e1000_sgmii_uses_mdio_82575(hw)) {
  637                 switch (hw->mac.type) {
  638                 case e1000_82575:
  639                 case e1000_82576:
  640                         mdic = E1000_READ_REG(hw, E1000_MDIC);
  641                         mdic &= E1000_MDIC_PHY_MASK;
  642                         phy->addr = mdic >> E1000_MDIC_PHY_SHIFT;
  643                         break;
  644                 case e1000_82580:
  645                 case e1000_i350:
  646                 case e1000_i354:
  647                 case e1000_i210:
  648                 case e1000_i211:
  649                         mdic = E1000_READ_REG(hw, E1000_MDICNFG);
  650                         mdic &= E1000_MDICNFG_PHY_MASK;
  651                         phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT;
  652                         break;
  653                 default:
  654                         ret_val = -E1000_ERR_PHY;
  655                         goto out;
  656                         break;
  657                 }
  658                 ret_val = e1000_get_phy_id(hw);
  659                 goto out;
  660         }
  661 
  662         /* Power on sgmii phy if it is disabled */
  663         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
  664         E1000_WRITE_REG(hw, E1000_CTRL_EXT,
  665                         ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
  666         E1000_WRITE_FLUSH(hw);
  667         msec_delay(300);
  668 
  669         /*
  670          * The address field in the I2CCMD register is 3 bits and 0 is invalid.
  671          * Therefore, we need to test 1-7
  672          */
  673         for (phy->addr = 1; phy->addr < 8; phy->addr++) {
  674                 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
  675                 if (ret_val == E1000_SUCCESS) {
  676                         DEBUGOUT2("Vendor ID 0x%08X read at address %u\n",
  677                                   phy_id, phy->addr);
  678                         /*
  679                          * At the time of this writing, The M88 part is
  680                          * the only supported SGMII PHY product.
  681                          */
  682                         if (phy_id == M88_VENDOR)
  683                                 break;
  684                 } else {
  685                         DEBUGOUT1("PHY address %u was unreadable\n",
  686                                   phy->addr);
  687                 }
  688         }
  689 
  690         /* A valid PHY type couldn't be found. */
  691         if (phy->addr == 8) {
  692                 phy->addr = 0;
  693                 ret_val = -E1000_ERR_PHY;
  694         } else {
  695                 ret_val = e1000_get_phy_id(hw);
  696         }
  697 
  698         /* restore previous sfp cage power state */
  699         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
  700 
  701 out:
  702         return ret_val;
  703 }
  704 
  705 /**
  706  *  e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset
  707  *  @hw: pointer to the HW structure
  708  *
  709  *  Resets the PHY using the serial gigabit media independent interface.
  710  **/
  711 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
  712 {
  713         s32 ret_val = E1000_SUCCESS;
  714         struct e1000_phy_info *phy = &hw->phy;
  715 
  716         DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575");
  717 
  718         /*
  719          * This isn't a true "hard" reset, but is the only reset
  720          * available to us at this time.
  721          */
  722 
  723         DEBUGOUT("Soft resetting SGMII attached PHY...\n");
  724 
  725         if (!(hw->phy.ops.write_reg))
  726                 goto out;
  727 
  728         /*
  729          * SFP documentation requires the following to configure the SPF module
  730          * to work on SGMII.  No further documentation is given.
  731          */
  732         ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
  733         if (ret_val)
  734                 goto out;
  735 
  736         ret_val = hw->phy.ops.commit(hw);
  737         if (ret_val)
  738                 goto out;
  739 
  740         if (phy->id == M88E1512_E_PHY_ID)
  741                 ret_val = e1000_initialize_M88E1512_phy(hw);
  742 out:
  743         return ret_val;
  744 }
  745 
  746 /**
  747  *  e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
  748  *  @hw: pointer to the HW structure
  749  *  @active: true to enable LPLU, false to disable
  750  *
  751  *  Sets the LPLU D0 state according to the active flag.  When
  752  *  activating LPLU this function also disables smart speed
  753  *  and vice versa.  LPLU will not be activated unless the
  754  *  device autonegotiation advertisement meets standards of
  755  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
  756  *  This is a function pointer entry point only called by
  757  *  PHY setup routines.
  758  **/
  759 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
  760 {
  761         struct e1000_phy_info *phy = &hw->phy;
  762         s32 ret_val = E1000_SUCCESS;
  763         u16 data;
  764 
  765         DEBUGFUNC("e1000_set_d0_lplu_state_82575");
  766 
  767         if (!(hw->phy.ops.read_reg))
  768                 goto out;
  769 
  770         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
  771         if (ret_val)
  772                 goto out;
  773 
  774         if (active) {
  775                 data |= IGP02E1000_PM_D0_LPLU;
  776                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
  777                                              data);
  778                 if (ret_val)
  779                         goto out;
  780 
  781                 /* When LPLU is enabled, we should disable SmartSpeed */
  782                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
  783                                             &data);
  784                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
  785                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
  786                                              data);
  787                 if (ret_val)
  788                         goto out;
  789         } else {
  790                 data &= ~IGP02E1000_PM_D0_LPLU;
  791                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
  792                                              data);
  793                 /*
  794                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
  795                  * during Dx states where the power conservation is most
  796                  * important.  During driver activity we should enable
  797                  * SmartSpeed, so performance is maintained.
  798                  */
  799                 if (phy->smart_speed == e1000_smart_speed_on) {
  800                         ret_val = phy->ops.read_reg(hw,
  801                                                     IGP01E1000_PHY_PORT_CONFIG,
  802                                                     &data);
  803                         if (ret_val)
  804                                 goto out;
  805 
  806                         data |= IGP01E1000_PSCFR_SMART_SPEED;
  807                         ret_val = phy->ops.write_reg(hw,
  808                                                      IGP01E1000_PHY_PORT_CONFIG,
  809                                                      data);
  810                         if (ret_val)
  811                                 goto out;
  812                 } else if (phy->smart_speed == e1000_smart_speed_off) {
  813                         ret_val = phy->ops.read_reg(hw,
  814                                                     IGP01E1000_PHY_PORT_CONFIG,
  815                                                     &data);
  816                         if (ret_val)
  817                                 goto out;
  818 
  819                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
  820                         ret_val = phy->ops.write_reg(hw,
  821                                                      IGP01E1000_PHY_PORT_CONFIG,
  822                                                      data);
  823                         if (ret_val)
  824                                 goto out;
  825                 }
  826         }
  827 
  828 out:
  829         return ret_val;
  830 }
  831 
  832 /**
  833  *  e1000_set_d0_lplu_state_82580 - Set Low Power Linkup D0 state
  834  *  @hw: pointer to the HW structure
  835  *  @active: true to enable LPLU, false to disable
  836  *
  837  *  Sets the LPLU D0 state according to the active flag.  When
  838  *  activating LPLU this function also disables smart speed
  839  *  and vice versa.  LPLU will not be activated unless the
  840  *  device autonegotiation advertisement meets standards of
  841  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
  842  *  This is a function pointer entry point only called by
  843  *  PHY setup routines.
  844  **/
  845 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw, bool active)
  846 {
  847         struct e1000_phy_info *phy = &hw->phy;
  848         u32 data;
  849 
  850         DEBUGFUNC("e1000_set_d0_lplu_state_82580");
  851 
  852         data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
  853 
  854         if (active) {
  855                 data |= E1000_82580_PM_D0_LPLU;
  856 
  857                 /* When LPLU is enabled, we should disable SmartSpeed */
  858                 data &= ~E1000_82580_PM_SPD;
  859         } else {
  860                 data &= ~E1000_82580_PM_D0_LPLU;
  861 
  862                 /*
  863                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
  864                  * during Dx states where the power conservation is most
  865                  * important.  During driver activity we should enable
  866                  * SmartSpeed, so performance is maintained.
  867                  */
  868                 if (phy->smart_speed == e1000_smart_speed_on)
  869                         data |= E1000_82580_PM_SPD;
  870                 else if (phy->smart_speed == e1000_smart_speed_off)
  871                         data &= ~E1000_82580_PM_SPD;
  872         }
  873 
  874         E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
  875         return E1000_SUCCESS;
  876 }
  877 
  878 /**
  879  *  e1000_set_d3_lplu_state_82580 - Sets low power link up state for D3
  880  *  @hw: pointer to the HW structure
  881  *  @active: boolean used to enable/disable lplu
  882  *
  883  *  Success returns 0, Failure returns 1
  884  *
  885  *  The low power link up (lplu) state is set to the power management level D3
  886  *  and SmartSpeed is disabled when active is true, else clear lplu for D3
  887  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
  888  *  is used during Dx states where the power conservation is most important.
  889  *  During driver activity, SmartSpeed should be enabled so performance is
  890  *  maintained.
  891  **/
  892 s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, bool active)
  893 {
  894         struct e1000_phy_info *phy = &hw->phy;
  895         u32 data;
  896 
  897         DEBUGFUNC("e1000_set_d3_lplu_state_82580");
  898 
  899         data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
  900 
  901         if (!active) {
  902                 data &= ~E1000_82580_PM_D3_LPLU;
  903                 /*
  904                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
  905                  * during Dx states where the power conservation is most
  906                  * important.  During driver activity we should enable
  907                  * SmartSpeed, so performance is maintained.
  908                  */
  909                 if (phy->smart_speed == e1000_smart_speed_on)
  910                         data |= E1000_82580_PM_SPD;
  911                 else if (phy->smart_speed == e1000_smart_speed_off)
  912                         data &= ~E1000_82580_PM_SPD;
  913         } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
  914                    (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
  915                    (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
  916                 data |= E1000_82580_PM_D3_LPLU;
  917                 /* When LPLU is enabled, we should disable SmartSpeed */
  918                 data &= ~E1000_82580_PM_SPD;
  919         }
  920 
  921         E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
  922         return E1000_SUCCESS;
  923 }
  924 
  925 /**
  926  *  e1000_acquire_nvm_82575 - Request for access to EEPROM
  927  *  @hw: pointer to the HW structure
  928  *
  929  *  Acquire the necessary semaphores for exclusive access to the EEPROM.
  930  *  Set the EEPROM access request bit and wait for EEPROM access grant bit.
  931  *  Return successful if access grant bit set, else clear the request for
  932  *  EEPROM access and return -E1000_ERR_NVM (-1).
  933  **/
  934 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw)
  935 {
  936         s32 ret_val = E1000_SUCCESS;
  937 
  938         DEBUGFUNC("e1000_acquire_nvm_82575");
  939 
  940         ret_val = e1000_acquire_swfw_sync(hw, E1000_SWFW_EEP_SM);
  941         if (ret_val)
  942                 goto out;
  943 
  944         /*
  945          * Check if there is some access
  946          * error this access may hook on
  947          */
  948         if (hw->mac.type == e1000_i350) {
  949                 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
  950                 if (eecd & (E1000_EECD_BLOCKED | E1000_EECD_ABORT |
  951                     E1000_EECD_TIMEOUT)) {
  952                         /* Clear all access error flags */
  953                         E1000_WRITE_REG(hw, E1000_EECD, eecd |
  954                                         E1000_EECD_ERROR_CLR);
  955                         DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
  956                 }
  957         }
  958 
  959         if (hw->mac.type == e1000_82580) {
  960                 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
  961                 if (eecd & E1000_EECD_BLOCKED) {
  962                         /* Clear access error flag */
  963                         E1000_WRITE_REG(hw, E1000_EECD, eecd |
  964                                         E1000_EECD_BLOCKED);
  965                         DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
  966                 }
  967         }
  968 
  969         ret_val = e1000_acquire_nvm_generic(hw);
  970         if (ret_val)
  971                 e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
  972 
  973 out:
  974         return ret_val;
  975 }
  976 
  977 /**
  978  *  e1000_release_nvm_82575 - Release exclusive access to EEPROM
  979  *  @hw: pointer to the HW structure
  980  *
  981  *  Stop any current commands to the EEPROM and clear the EEPROM request bit,
  982  *  then release the semaphores acquired.
  983  **/
  984 static void e1000_release_nvm_82575(struct e1000_hw *hw)
  985 {
  986         DEBUGFUNC("e1000_release_nvm_82575");
  987 
  988         e1000_release_nvm_generic(hw);
  989 
  990         e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
  991 }
  992 
  993 /**
  994  *  e1000_get_cfg_done_82575 - Read config done bit
  995  *  @hw: pointer to the HW structure
  996  *
  997  *  Read the management control register for the config done bit for
  998  *  completion status.  NOTE: silicon which is EEPROM-less will fail trying
  999  *  to read the config done bit, so an error is *ONLY* logged and returns
 1000  *  E1000_SUCCESS.  If we were to return with error, EEPROM-less silicon
 1001  *  would not be able to be reset or change link.
 1002  **/
 1003 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
 1004 {
 1005         s32 timeout = PHY_CFG_TIMEOUT;
 1006         u32 mask = E1000_NVM_CFG_DONE_PORT_0;
 1007 
 1008         DEBUGFUNC("e1000_get_cfg_done_82575");
 1009 
 1010         if (hw->bus.func == E1000_FUNC_1)
 1011                 mask = E1000_NVM_CFG_DONE_PORT_1;
 1012         else if (hw->bus.func == E1000_FUNC_2)
 1013                 mask = E1000_NVM_CFG_DONE_PORT_2;
 1014         else if (hw->bus.func == E1000_FUNC_3)
 1015                 mask = E1000_NVM_CFG_DONE_PORT_3;
 1016         while (timeout) {
 1017                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
 1018                         break;
 1019                 msec_delay(1);
 1020                 timeout--;
 1021         }
 1022         if (!timeout)
 1023                 DEBUGOUT("MNG configuration cycle has not completed.\n");
 1024 
 1025         /* If EEPROM is not marked present, init the PHY manually */
 1026         if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) &&
 1027             (hw->phy.type == e1000_phy_igp_3))
 1028                 e1000_phy_init_script_igp3(hw);
 1029 
 1030         return E1000_SUCCESS;
 1031 }
 1032 
 1033 /**
 1034  *  e1000_get_link_up_info_82575 - Get link speed/duplex info
 1035  *  @hw: pointer to the HW structure
 1036  *  @speed: stores the current speed
 1037  *  @duplex: stores the current duplex
 1038  *
 1039  *  This is a wrapper function, if using the serial gigabit media independent
 1040  *  interface, use PCS to retrieve the link speed and duplex information.
 1041  *  Otherwise, use the generic function to get the link speed and duplex info.
 1042  **/
 1043 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
 1044                                         u16 *duplex)
 1045 {
 1046         s32 ret_val;
 1047 
 1048         DEBUGFUNC("e1000_get_link_up_info_82575");
 1049 
 1050         if (hw->phy.media_type != e1000_media_type_copper)
 1051                 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
 1052                                                                duplex);
 1053         else
 1054                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
 1055                                                                     duplex);
 1056 
 1057         return ret_val;
 1058 }
 1059 
 1060 /**
 1061  *  e1000_check_for_link_82575 - Check for link
 1062  *  @hw: pointer to the HW structure
 1063  *
 1064  *  If sgmii is enabled, then use the pcs register to determine link, otherwise
 1065  *  use the generic interface for determining link.
 1066  **/
 1067 static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
 1068 {
 1069         s32 ret_val;
 1070         u16 speed, duplex;
 1071 
 1072         DEBUGFUNC("e1000_check_for_link_82575");
 1073 
 1074         if (hw->phy.media_type != e1000_media_type_copper) {
 1075                 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
 1076                                                                &duplex);
 1077                 /*
 1078                  * Use this flag to determine if link needs to be checked or
 1079                  * not.  If we have link clear the flag so that we do not
 1080                  * continue to check for link.
 1081                  */
 1082                 hw->mac.get_link_status = !hw->mac.serdes_has_link;
 1083 
 1084                 /*
 1085                  * Configure Flow Control now that Auto-Neg has completed.
 1086                  * First, we need to restore the desired flow control
 1087                  * settings because we may have had to re-autoneg with a
 1088                  * different link partner.
 1089                  */
 1090                 ret_val = e1000_config_fc_after_link_up_generic(hw);
 1091                 if (ret_val)
 1092                         DEBUGOUT("Error configuring flow control\n");
 1093         } else {
 1094                 ret_val = e1000_check_for_copper_link_generic(hw);
 1095         }
 1096 
 1097         return ret_val;
 1098 }
 1099 
 1100 /**
 1101  *  e1000_check_for_link_media_swap - Check which M88E1112 interface linked
 1102  *  @hw: pointer to the HW structure
 1103  *
 1104  *  Poll the M88E1112 interfaces to see which interface achieved link.
 1105  */
 1106 static s32 e1000_check_for_link_media_swap(struct e1000_hw *hw)
 1107 {
 1108         struct e1000_phy_info *phy = &hw->phy;
 1109         s32 ret_val;
 1110         u16 data;
 1111         u8 port = 0;
 1112 
 1113         DEBUGFUNC("e1000_check_for_link_media_swap");
 1114 
 1115         /* Check for copper. */
 1116         ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
 1117         if (ret_val)
 1118                 return ret_val;
 1119 
 1120         ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
 1121         if (ret_val)
 1122                 return ret_val;
 1123 
 1124         if (data & E1000_M88E1112_STATUS_LINK)
 1125                 port = E1000_MEDIA_PORT_COPPER;
 1126 
 1127         /* Check for other. */
 1128         ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 1);
 1129         if (ret_val)
 1130                 return ret_val;
 1131 
 1132         ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
 1133         if (ret_val)
 1134                 return ret_val;
 1135 
 1136         if (data & E1000_M88E1112_STATUS_LINK)
 1137                 port = E1000_MEDIA_PORT_OTHER;
 1138 
 1139         /* Determine if a swap needs to happen. */
 1140         if (port && (hw->dev_spec._82575.media_port != port)) {
 1141                 hw->dev_spec._82575.media_port = port;
 1142                 hw->dev_spec._82575.media_changed = true;
 1143         }
 1144 
 1145         if (port == E1000_MEDIA_PORT_COPPER) {
 1146                 /* reset page to 0 */
 1147                 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
 1148                 if (ret_val)
 1149                         return ret_val;
 1150                 e1000_check_for_link_82575(hw);
 1151         } else {
 1152                 e1000_check_for_link_82575(hw);
 1153                 /* reset page to 0 */
 1154                 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
 1155                 if (ret_val)
 1156                         return ret_val;
 1157         }
 1158 
 1159         return E1000_SUCCESS;
 1160 }
 1161 
 1162 /**
 1163  *  e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown
 1164  *  @hw: pointer to the HW structure
 1165  **/
 1166 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw)
 1167 {
 1168         u32 reg;
 1169 
 1170         DEBUGFUNC("e1000_power_up_serdes_link_82575");
 1171 
 1172         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
 1173             !e1000_sgmii_active_82575(hw))
 1174                 return;
 1175 
 1176         /* Enable PCS to turn on link */
 1177         reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
 1178         reg |= E1000_PCS_CFG_PCS_EN;
 1179         E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
 1180 
 1181         /* Power up the laser */
 1182         reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1183         reg &= ~E1000_CTRL_EXT_SDP3_DATA;
 1184         E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 1185 
 1186         /* flush the write to verify completion */
 1187         E1000_WRITE_FLUSH(hw);
 1188         msec_delay(1);
 1189 }
 1190 
 1191 /**
 1192  *  e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
 1193  *  @hw: pointer to the HW structure
 1194  *  @speed: stores the current speed
 1195  *  @duplex: stores the current duplex
 1196  *
 1197  *  Using the physical coding sub-layer (PCS), retrieve the current speed and
 1198  *  duplex, then store the values in the pointers provided.
 1199  **/
 1200 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
 1201                                                 u16 *speed, u16 *duplex)
 1202 {
 1203         struct e1000_mac_info *mac = &hw->mac;
 1204         u32 pcs;
 1205         u32 status;
 1206 
 1207         DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575");
 1208 
 1209         /*
 1210          * Read the PCS Status register for link state. For non-copper mode,
 1211          * the status register is not accurate. The PCS status register is
 1212          * used instead.
 1213          */
 1214         pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT);
 1215 
 1216         /*
 1217          * The link up bit determines when link is up on autoneg.
 1218          */
 1219         if (pcs & E1000_PCS_LSTS_LINK_OK) {
 1220                 mac->serdes_has_link = true;
 1221 
 1222                 /* Detect and store PCS speed */
 1223                 if (pcs & E1000_PCS_LSTS_SPEED_1000)
 1224                         *speed = SPEED_1000;
 1225                 else if (pcs & E1000_PCS_LSTS_SPEED_100)
 1226                         *speed = SPEED_100;
 1227                 else
 1228                         *speed = SPEED_10;
 1229 
 1230                 /* Detect and store PCS duplex */
 1231                 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL)
 1232                         *duplex = FULL_DUPLEX;
 1233                 else
 1234                         *duplex = HALF_DUPLEX;
 1235 
 1236                 /* Check if it is an I354 2.5Gb backplane connection. */
 1237                 if (mac->type == e1000_i354) {
 1238                         status = E1000_READ_REG(hw, E1000_STATUS);
 1239                         if ((status & E1000_STATUS_2P5_SKU) &&
 1240                             !(status & E1000_STATUS_2P5_SKU_OVER)) {
 1241                                 *speed = SPEED_2500;
 1242                                 *duplex = FULL_DUPLEX;
 1243                                 DEBUGOUT("2500 Mbs, ");
 1244                                 DEBUGOUT("Full Duplex\n");
 1245                         }
 1246                 }
 1247 
 1248         } else {
 1249                 mac->serdes_has_link = false;
 1250                 *speed = 0;
 1251                 *duplex = 0;
 1252         }
 1253 
 1254         return E1000_SUCCESS;
 1255 }
 1256 
 1257 /**
 1258  *  e1000_shutdown_serdes_link_82575 - Remove link during power down
 1259  *  @hw: pointer to the HW structure
 1260  *
 1261  *  In the case of serdes shut down sfp and PCS on driver unload
 1262  *  when management pass thru is not enabled.
 1263  **/
 1264 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw)
 1265 {
 1266         u32 reg;
 1267 
 1268         DEBUGFUNC("e1000_shutdown_serdes_link_82575");
 1269 
 1270         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
 1271             !e1000_sgmii_active_82575(hw))
 1272                 return;
 1273 
 1274         if (!e1000_enable_mng_pass_thru(hw)) {
 1275                 /* Disable PCS to turn off link */
 1276                 reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
 1277                 reg &= ~E1000_PCS_CFG_PCS_EN;
 1278                 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
 1279 
 1280                 /* shutdown the laser */
 1281                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1282                 reg |= E1000_CTRL_EXT_SDP3_DATA;
 1283                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 1284 
 1285                 /* flush the write to verify completion */
 1286                 E1000_WRITE_FLUSH(hw);
 1287                 msec_delay(1);
 1288         }
 1289 
 1290         return;
 1291 }
 1292 
 1293 /**
 1294  *  e1000_reset_hw_82575 - Reset hardware
 1295  *  @hw: pointer to the HW structure
 1296  *
 1297  *  This resets the hardware into a known state.
 1298  **/
 1299 static s32 e1000_reset_hw_82575(struct e1000_hw *hw)
 1300 {
 1301         u32 ctrl;
 1302         s32 ret_val;
 1303 
 1304         DEBUGFUNC("e1000_reset_hw_82575");
 1305 
 1306         /*
 1307          * Prevent the PCI-E bus from sticking if there is no TLP connection
 1308          * on the last TLP read/write transaction when MAC is reset.
 1309          */
 1310         ret_val = e1000_disable_pcie_master_generic(hw);
 1311         if (ret_val)
 1312                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
 1313 
 1314         /* set the completion timeout for interface */
 1315         ret_val = e1000_set_pcie_completion_timeout(hw);
 1316         if (ret_val)
 1317                 DEBUGOUT("PCI-E Set completion timeout has failed.\n");
 1318 
 1319         DEBUGOUT("Masking off all interrupts\n");
 1320         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 1321 
 1322         E1000_WRITE_REG(hw, E1000_RCTL, 0);
 1323         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
 1324         E1000_WRITE_FLUSH(hw);
 1325 
 1326         msec_delay(10);
 1327 
 1328         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 1329 
 1330         DEBUGOUT("Issuing a global reset to MAC\n");
 1331         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
 1332 
 1333         ret_val = e1000_get_auto_rd_done_generic(hw);
 1334         if (ret_val) {
 1335                 /*
 1336                  * When auto config read does not complete, do not
 1337                  * return with an error. This can happen in situations
 1338                  * where there is no eeprom and prevents getting link.
 1339                  */
 1340                 DEBUGOUT("Auto Read Done did not complete\n");
 1341         }
 1342 
 1343         /* If EEPROM is not present, run manual init scripts */
 1344         if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES))
 1345                 e1000_reset_init_script_82575(hw);
 1346 
 1347         /* Clear any pending interrupt events. */
 1348         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 1349         E1000_READ_REG(hw, E1000_ICR);
 1350 
 1351         /* Install any alternate MAC address into RAR0 */
 1352         ret_val = e1000_check_alt_mac_addr_generic(hw);
 1353 
 1354         return ret_val;
 1355 }
 1356 
 1357 /**
 1358  * e1000_init_hw_82575 - Initialize hardware
 1359  * @hw: pointer to the HW structure
 1360  *
 1361  * This inits the hardware readying it for operation.
 1362  **/
 1363 static s32 e1000_init_hw_82575(struct e1000_hw *hw)
 1364 {
 1365         struct e1000_mac_info *mac = &hw->mac;
 1366         s32 ret_val;
 1367 
 1368         DEBUGFUNC("e1000_init_hw_82575");
 1369 
 1370         /* Initialize identification LED */
 1371         ret_val = mac->ops.id_led_init(hw);
 1372         if (ret_val) {
 1373                 DEBUGOUT("Error initializing identification LED\n");
 1374                 /* This is not fatal and we should not stop init due to this */
 1375         }
 1376 
 1377         /* Disabling VLAN filtering */
 1378         DEBUGOUT("Initializing the IEEE VLAN\n");
 1379         mac->ops.clear_vfta(hw);
 1380 
 1381         ret_val = e1000_init_hw_base(hw);
 1382 
 1383         /* Set the default MTU size */
 1384         hw->dev_spec._82575.mtu = 1500;
 1385 
 1386         /* Clear all of the statistics registers (clear on read).  It is
 1387          * important that we do this after we have tried to establish link
 1388          * because the symbol error count will increment wildly if there
 1389          * is no link.
 1390          */
 1391         e1000_clear_hw_cntrs_82575(hw);
 1392 
 1393         return ret_val;
 1394 }
 1395 /**
 1396  *  e1000_setup_copper_link_82575 - Configure copper link settings
 1397  *  @hw: pointer to the HW structure
 1398  *
 1399  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
 1400  *  for link, once link is established calls to configure collision distance
 1401  *  and flow control are called.
 1402  **/
 1403 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 1404 {
 1405         u32 phpm_reg;
 1406         u32 ctrl;
 1407         s32 ret_val;
 1408 
 1409         DEBUGFUNC("e1000_setup_copper_link_82575");
 1410 
 1411         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 1412         ctrl |= E1000_CTRL_SLU;
 1413         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 1414         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 1415 
 1416         /* Clear Go Link Disconnect bit on supported devices */
 1417         switch (hw->mac.type) {
 1418         case e1000_82580:
 1419         case e1000_i350:
 1420         case e1000_i210:
 1421         case e1000_i211:
 1422                 phpm_reg = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
 1423                 phpm_reg &= ~E1000_82580_PM_GO_LINKD;
 1424                 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, phpm_reg);
 1425                 break;
 1426         default:
 1427                 break;
 1428         }
 1429 
 1430         ret_val = e1000_setup_serdes_link_82575(hw);
 1431         if (ret_val)
 1432                 goto out;
 1433 
 1434         if (e1000_sgmii_active_82575(hw)) {
 1435                 /* allow time for SFP cage time to power up phy */
 1436                 msec_delay(300);
 1437 
 1438                 ret_val = hw->phy.ops.reset(hw);
 1439                 if (ret_val) {
 1440                         DEBUGOUT("Error resetting the PHY.\n");
 1441                         goto out;
 1442                 }
 1443         }
 1444         switch (hw->phy.type) {
 1445         case e1000_phy_i210:
 1446                 /* FALLTHROUGH */
 1447         case e1000_phy_m88:
 1448                 switch (hw->phy.id) {
 1449                 case I347AT4_E_PHY_ID:
 1450                         /* FALLTHROUGH */
 1451                 case M88E1112_E_PHY_ID:
 1452                         /* FALLTHROUGH */
 1453                 case M88E1340M_E_PHY_ID:
 1454                         /* FALLTHROUGH */
 1455                 case M88E1543_E_PHY_ID:
 1456                         /* FALLTHROUGH */
 1457                 case M88E1512_E_PHY_ID:
 1458                         /* FALLTHROUGH */
 1459                 case I210_I_PHY_ID:
 1460                         ret_val = e1000_copper_link_setup_m88_gen2(hw);
 1461                         break;
 1462                 default:
 1463                         ret_val = e1000_copper_link_setup_m88(hw);
 1464                         break;
 1465                 }
 1466                 break;
 1467         case e1000_phy_igp_3:
 1468                 ret_val = e1000_copper_link_setup_igp(hw);
 1469                 break;
 1470         case e1000_phy_82580:
 1471                 ret_val = e1000_copper_link_setup_82577(hw);
 1472                 break;
 1473         default:
 1474                 ret_val = -E1000_ERR_PHY;
 1475                 break;
 1476         }
 1477 
 1478         if (ret_val)
 1479                 goto out;
 1480 
 1481         ret_val = e1000_setup_copper_link_generic(hw);
 1482 out:
 1483         return ret_val;
 1484 }
 1485 
 1486 /**
 1487  *  e1000_setup_serdes_link_82575 - Setup link for serdes
 1488  *  @hw: pointer to the HW structure
 1489  *
 1490  *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
 1491  *  used on copper connections where the serialized gigabit media independent
 1492  *  interface (sgmii), or serdes fiber is being used.  Configures the link
 1493  *  for auto-negotiation or forces speed/duplex.
 1494  **/
 1495 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
 1496 {
 1497         u32 ctrl_ext, ctrl_reg, reg, anadv_reg;
 1498         bool pcs_autoneg;
 1499         s32 ret_val = E1000_SUCCESS;
 1500         u16 data;
 1501 
 1502         DEBUGFUNC("e1000_setup_serdes_link_82575");
 1503 
 1504         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
 1505             !e1000_sgmii_active_82575(hw))
 1506                 return ret_val;
 1507 
 1508         /*
 1509          * On the 82575, SerDes loopback mode persists until it is
 1510          * explicitly turned off or a power cycle is performed.  A read to
 1511          * the register does not indicate its status.  Therefore, we ensure
 1512          * loopback mode is disabled during initialization.
 1513          */
 1514         E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
 1515 
 1516         /* power on the sfp cage if present */
 1517         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1518         ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
 1519         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 1520 
 1521         ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
 1522         ctrl_reg |= E1000_CTRL_SLU;
 1523 
 1524         /* set both sw defined pins on 82575/82576*/
 1525         if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576)
 1526                 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
 1527 
 1528         reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
 1529 
 1530         /* default pcs_autoneg to the same setting as mac autoneg */
 1531         pcs_autoneg = hw->mac.autoneg;
 1532 
 1533         switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
 1534         case E1000_CTRL_EXT_LINK_MODE_SGMII:
 1535                 /* sgmii mode lets the phy handle forcing speed/duplex */
 1536                 pcs_autoneg = true;
 1537                 /* autoneg time out should be disabled for SGMII mode */
 1538                 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
 1539                 break;
 1540         case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
 1541                 /* disable PCS autoneg and support parallel detect only */
 1542                 pcs_autoneg = false;
 1543                 /* FALLTHROUGH */
 1544         default:
 1545                 if (hw->mac.type == e1000_82575 ||
 1546                     hw->mac.type == e1000_82576) {
 1547                         ret_val = hw->nvm.ops.read(hw, NVM_COMPAT, 1, &data);
 1548                         if (ret_val) {
 1549                                 DEBUGOUT("NVM Read Error\n");
 1550                                 return ret_val;
 1551                         }
 1552 
 1553                         if (data & E1000_EEPROM_PCS_AUTONEG_DISABLE_BIT)
 1554                                 pcs_autoneg = false;
 1555                 }
 1556 
 1557                 /*
 1558                  * non-SGMII modes only supports a speed of 1000/Full for the
 1559                  * link so it is best to just force the MAC and let the pcs
 1560                  * link either autoneg or be forced to 1000/Full
 1561                  */
 1562                 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
 1563                             E1000_CTRL_FD | E1000_CTRL_FRCDPX;
 1564 
 1565                 /* set speed of 1000/Full if speed/duplex is forced */
 1566                 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
 1567                 break;
 1568         }
 1569 
 1570         E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
 1571 
 1572         /*
 1573          * New SerDes mode allows for forcing speed or autonegotiating speed
 1574          * at 1gb. Autoneg should be default set by most drivers. This is the
 1575          * mode that will be compatible with older link partners and switches.
 1576          * However, both are supported by the hardware and some drivers/tools.
 1577          */
 1578         reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
 1579                  E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
 1580 
 1581         if (pcs_autoneg) {
 1582                 /* Set PCS register for autoneg */
 1583                 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
 1584                        E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
 1585 
 1586                 /* Disable force flow control for autoneg */
 1587                 reg &= ~E1000_PCS_LCTL_FORCE_FCTRL;
 1588 
 1589                 /* Configure flow control advertisement for autoneg */
 1590                 anadv_reg = E1000_READ_REG(hw, E1000_PCS_ANADV);
 1591                 anadv_reg &= ~(E1000_TXCW_ASM_DIR | E1000_TXCW_PAUSE);
 1592 
 1593                 switch (hw->fc.requested_mode) {
 1594                 case e1000_fc_full:
 1595                 case e1000_fc_rx_pause:
 1596                         anadv_reg |= E1000_TXCW_ASM_DIR;
 1597                         anadv_reg |= E1000_TXCW_PAUSE;
 1598                         break;
 1599                 case e1000_fc_tx_pause:
 1600                         anadv_reg |= E1000_TXCW_ASM_DIR;
 1601                         break;
 1602                 default:
 1603                         break;
 1604                 }
 1605 
 1606                 E1000_WRITE_REG(hw, E1000_PCS_ANADV, anadv_reg);
 1607 
 1608                 DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
 1609         } else {
 1610                 /* Set PCS register for forced link */
 1611                 reg |= E1000_PCS_LCTL_FSD;      /* Force Speed */
 1612 
 1613                 /* Force flow control for forced link */
 1614                 reg |= E1000_PCS_LCTL_FORCE_FCTRL;
 1615 
 1616                 DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
 1617         }
 1618 
 1619         E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
 1620 
 1621         if (!pcs_autoneg && !e1000_sgmii_active_82575(hw))
 1622                 e1000_force_mac_fc_generic(hw);
 1623 
 1624         return ret_val;
 1625 }
 1626 
 1627 /**
 1628  *  e1000_get_media_type_82575 - derives current media type.
 1629  *  @hw: pointer to the HW structure
 1630  *
 1631  *  The media type is chosen reflecting few settings.
 1632  *  The following are taken into account:
 1633  *  - link mode set in the current port Init Control Word #3
 1634  *  - current link mode settings in CSR register
 1635  *  - MDIO vs. I2C PHY control interface chosen
 1636  *  - SFP module media type
 1637  **/
 1638 static s32 e1000_get_media_type_82575(struct e1000_hw *hw)
 1639 {
 1640         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
 1641         s32 ret_val = E1000_SUCCESS;
 1642         u32 ctrl_ext = 0;
 1643         u32 link_mode = 0;
 1644 
 1645         /* Set internal phy as default */
 1646         dev_spec->sgmii_active = false;
 1647         dev_spec->module_plugged = false;
 1648 
 1649         /* Get CSR setting */
 1650         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1651 
 1652         /* extract link mode setting */
 1653         link_mode = ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK;
 1654 
 1655         switch (link_mode) {
 1656         case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
 1657                 hw->phy.media_type = e1000_media_type_internal_serdes;
 1658                 break;
 1659         case E1000_CTRL_EXT_LINK_MODE_GMII:
 1660                 hw->phy.media_type = e1000_media_type_copper;
 1661                 break;
 1662         case E1000_CTRL_EXT_LINK_MODE_SGMII:
 1663                 /* Get phy control interface type set (MDIO vs. I2C)*/
 1664                 if (e1000_sgmii_uses_mdio_82575(hw)) {
 1665                         hw->phy.media_type = e1000_media_type_copper;
 1666                         dev_spec->sgmii_active = true;
 1667                         break;
 1668                 }
 1669                 /* fall through for I2C based SGMII */
 1670                 /* FALLTHROUGH */
 1671         case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
 1672                 /* read media type from SFP EEPROM */
 1673                 ret_val = e1000_set_sfp_media_type_82575(hw);
 1674                 if ((ret_val != E1000_SUCCESS) ||
 1675                     (hw->phy.media_type == e1000_media_type_unknown)) {
 1676                         /*
 1677                          * If media type was not identified then return media
 1678                          * type defined by the CTRL_EXT settings.
 1679                          */
 1680                         hw->phy.media_type = e1000_media_type_internal_serdes;
 1681 
 1682                         if (link_mode == E1000_CTRL_EXT_LINK_MODE_SGMII) {
 1683                                 hw->phy.media_type = e1000_media_type_copper;
 1684                                 dev_spec->sgmii_active = true;
 1685                         }
 1686 
 1687                         break;
 1688                 }
 1689 
 1690                 /* do not change link mode for 100BaseFX */
 1691                 if (dev_spec->eth_flags.e100_base_fx)
 1692                         break;
 1693 
 1694                 /* change current link mode setting */
 1695                 ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK;
 1696 
 1697                 if (hw->phy.media_type == e1000_media_type_copper)
 1698                         ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_SGMII;
 1699                 else
 1700                         ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES;
 1701 
 1702                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 1703 
 1704                 break;
 1705         }
 1706 
 1707         return ret_val;
 1708 }
 1709 
 1710 /**
 1711  *  e1000_set_sfp_media_type_82575 - derives SFP module media type.
 1712  *  @hw: pointer to the HW structure
 1713  *
 1714  *  The media type is chosen based on SFP module.
 1715  *  compatibility flags retrieved from SFP ID EEPROM.
 1716  **/
 1717 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw)
 1718 {
 1719         s32 ret_val = E1000_ERR_CONFIG;
 1720         u32 ctrl_ext = 0;
 1721         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
 1722         struct sfp_e1000_flags *eth_flags = &dev_spec->eth_flags;
 1723         u8 tranceiver_type = 0;
 1724         s32 timeout = 3;
 1725 
 1726         /* Turn I2C interface ON and power on sfp cage */
 1727         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1728         ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
 1729         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext | E1000_CTRL_I2C_ENA);
 1730 
 1731         E1000_WRITE_FLUSH(hw);
 1732 
 1733         /* Read SFP module data */
 1734         while (timeout) {
 1735                 ret_val = e1000_read_sfp_data_byte(hw,
 1736                         E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_IDENTIFIER_OFFSET),
 1737                         &tranceiver_type);
 1738                 if (ret_val == E1000_SUCCESS)
 1739                         break;
 1740                 msec_delay(100);
 1741                 timeout--;
 1742         }
 1743         if (ret_val != E1000_SUCCESS)
 1744                 goto out;
 1745 
 1746         ret_val = e1000_read_sfp_data_byte(hw,
 1747                         E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_ETH_FLAGS_OFFSET),
 1748                         (u8 *)eth_flags);
 1749         if (ret_val != E1000_SUCCESS)
 1750                 goto out;
 1751 
 1752         /* Check if there is some SFP module plugged and powered */
 1753         if ((tranceiver_type == E1000_SFF_IDENTIFIER_SFP) ||
 1754             (tranceiver_type == E1000_SFF_IDENTIFIER_SFF)) {
 1755                 dev_spec->module_plugged = true;
 1756                 if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) {
 1757                         hw->phy.media_type = e1000_media_type_internal_serdes;
 1758                 } else if (eth_flags->e100_base_fx) {
 1759                         dev_spec->sgmii_active = true;
 1760                         hw->phy.media_type = e1000_media_type_internal_serdes;
 1761                 } else if (eth_flags->e1000_base_t) {
 1762                         dev_spec->sgmii_active = true;
 1763                         hw->phy.media_type = e1000_media_type_copper;
 1764                 } else {
 1765                         hw->phy.media_type = e1000_media_type_unknown;
 1766                         DEBUGOUT("PHY module has not been recognized\n");
 1767                         goto out;
 1768                 }
 1769         } else {
 1770                 hw->phy.media_type = e1000_media_type_unknown;
 1771         }
 1772         ret_val = E1000_SUCCESS;
 1773 out:
 1774         /* Restore I2C interface setting */
 1775         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 1776         return ret_val;
 1777 }
 1778 
 1779 /**
 1780  *  e1000_valid_led_default_82575 - Verify a valid default LED config
 1781  *  @hw: pointer to the HW structure
 1782  *  @data: pointer to the NVM (EEPROM)
 1783  *
 1784  *  Read the EEPROM for the current default LED configuration.  If the
 1785  *  LED configuration is not valid, set to a valid LED configuration.
 1786  **/
 1787 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data)
 1788 {
 1789         s32 ret_val;
 1790 
 1791         DEBUGFUNC("e1000_valid_led_default_82575");
 1792 
 1793         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
 1794         if (ret_val) {
 1795                 DEBUGOUT("NVM Read Error\n");
 1796                 goto out;
 1797         }
 1798 
 1799         if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
 1800                 switch (hw->phy.media_type) {
 1801                 case e1000_media_type_internal_serdes:
 1802                         *data = ID_LED_DEFAULT_82575_SERDES;
 1803                         break;
 1804                 case e1000_media_type_copper:
 1805                 default:
 1806                         *data = ID_LED_DEFAULT;
 1807                         break;
 1808                 }
 1809         }
 1810 out:
 1811         return ret_val;
 1812 }
 1813 
 1814 /**
 1815  *  e1000_sgmii_active_82575 - Return sgmii state
 1816  *  @hw: pointer to the HW structure
 1817  *
 1818  *  82575 silicon has a serialized gigabit media independent interface (sgmii)
 1819  *  which can be enabled for use in the embedded applications.  Simply
 1820  *  return the current state of the sgmii interface.
 1821  **/
 1822 static bool e1000_sgmii_active_82575(struct e1000_hw *hw)
 1823 {
 1824         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
 1825         return dev_spec->sgmii_active;
 1826 }
 1827 
 1828 /**
 1829  *  e1000_reset_init_script_82575 - Inits HW defaults after reset
 1830  *  @hw: pointer to the HW structure
 1831  *
 1832  *  Inits recommended HW defaults after a reset when there is no EEPROM
 1833  *  detected. This is only for the 82575.
 1834  **/
 1835 s32 e1000_reset_init_script_82575(struct e1000_hw *hw)
 1836 {
 1837         DEBUGFUNC("e1000_reset_init_script_82575");
 1838 
 1839         if (hw->mac.type == e1000_82575) {
 1840                 DEBUGOUT("Running reset init script for 82575\n");
 1841                 /* SerDes configuration via SERDESCTRL */
 1842                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C);
 1843                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78);
 1844                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23);
 1845                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15);
 1846 
 1847                 /* CCM configuration via CCMCTL register */
 1848                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00);
 1849                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00);
 1850 
 1851                 /* PCIe lanes configuration */
 1852                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC);
 1853                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF);
 1854                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05);
 1855                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81);
 1856 
 1857                 /* PCIe PLL Configuration */
 1858                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47);
 1859                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00);
 1860                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00);
 1861         }
 1862 
 1863         return E1000_SUCCESS;
 1864 }
 1865 
 1866 /**
 1867  *  e1000_read_mac_addr_82575 - Read device MAC address
 1868  *  @hw: pointer to the HW structure
 1869  **/
 1870 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw)
 1871 {
 1872         s32 ret_val;
 1873 
 1874         DEBUGFUNC("e1000_read_mac_addr_82575");
 1875 
 1876         /*
 1877          * If there's an alternate MAC address place it in RAR0
 1878          * so that it will override the Si installed default perm
 1879          * address.
 1880          */
 1881         ret_val = e1000_check_alt_mac_addr_generic(hw);
 1882         if (ret_val)
 1883                 goto out;
 1884 
 1885         ret_val = e1000_read_mac_addr_generic(hw);
 1886 
 1887 out:
 1888         return ret_val;
 1889 }
 1890 
 1891 /**
 1892  *  e1000_config_collision_dist_82575 - Configure collision distance
 1893  *  @hw: pointer to the HW structure
 1894  *
 1895  *  Configures the collision distance to the default value and is used
 1896  *  during link setup.
 1897  **/
 1898 static void e1000_config_collision_dist_82575(struct e1000_hw *hw)
 1899 {
 1900         u32 tctl_ext;
 1901 
 1902         DEBUGFUNC("e1000_config_collision_dist_82575");
 1903 
 1904         tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT);
 1905 
 1906         tctl_ext &= ~E1000_TCTL_EXT_COLD;
 1907         tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT;
 1908 
 1909         E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext);
 1910         E1000_WRITE_FLUSH(hw);
 1911 }
 1912 
 1913 /**
 1914  *  e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
 1915  *  @hw: pointer to the HW structure
 1916  *
 1917  *  Clears the hardware counters by reading the counter registers.
 1918  **/
 1919 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
 1920 {
 1921         DEBUGFUNC("e1000_clear_hw_cntrs_82575");
 1922 
 1923         e1000_clear_hw_cntrs_base_generic(hw);
 1924 
 1925         E1000_READ_REG(hw, E1000_PRC64);
 1926         E1000_READ_REG(hw, E1000_PRC127);
 1927         E1000_READ_REG(hw, E1000_PRC255);
 1928         E1000_READ_REG(hw, E1000_PRC511);
 1929         E1000_READ_REG(hw, E1000_PRC1023);
 1930         E1000_READ_REG(hw, E1000_PRC1522);
 1931         E1000_READ_REG(hw, E1000_PTC64);
 1932         E1000_READ_REG(hw, E1000_PTC127);
 1933         E1000_READ_REG(hw, E1000_PTC255);
 1934         E1000_READ_REG(hw, E1000_PTC511);
 1935         E1000_READ_REG(hw, E1000_PTC1023);
 1936         E1000_READ_REG(hw, E1000_PTC1522);
 1937 
 1938         E1000_READ_REG(hw, E1000_ALGNERRC);
 1939         E1000_READ_REG(hw, E1000_RXERRC);
 1940         E1000_READ_REG(hw, E1000_TNCRS);
 1941         E1000_READ_REG(hw, E1000_CEXTERR);
 1942         E1000_READ_REG(hw, E1000_TSCTC);
 1943         E1000_READ_REG(hw, E1000_TSCTFC);
 1944 
 1945         E1000_READ_REG(hw, E1000_MGTPRC);
 1946         E1000_READ_REG(hw, E1000_MGTPDC);
 1947         E1000_READ_REG(hw, E1000_MGTPTC);
 1948 
 1949         E1000_READ_REG(hw, E1000_IAC);
 1950         E1000_READ_REG(hw, E1000_ICRXOC);
 1951 
 1952         E1000_READ_REG(hw, E1000_ICRXPTC);
 1953         E1000_READ_REG(hw, E1000_ICRXATC);
 1954         E1000_READ_REG(hw, E1000_ICTXPTC);
 1955         E1000_READ_REG(hw, E1000_ICTXATC);
 1956         E1000_READ_REG(hw, E1000_ICTXQEC);
 1957         E1000_READ_REG(hw, E1000_ICTXQMTC);
 1958         E1000_READ_REG(hw, E1000_ICRXDMTC);
 1959 
 1960         E1000_READ_REG(hw, E1000_CBTMPC);
 1961         E1000_READ_REG(hw, E1000_HTDPMC);
 1962         E1000_READ_REG(hw, E1000_CBRMPC);
 1963         E1000_READ_REG(hw, E1000_RPTHC);
 1964         E1000_READ_REG(hw, E1000_HGPTC);
 1965         E1000_READ_REG(hw, E1000_HTCBDPC);
 1966         E1000_READ_REG(hw, E1000_HGORCL);
 1967         E1000_READ_REG(hw, E1000_HGORCH);
 1968         E1000_READ_REG(hw, E1000_HGOTCL);
 1969         E1000_READ_REG(hw, E1000_HGOTCH);
 1970         E1000_READ_REG(hw, E1000_LENERRS);
 1971 
 1972         /* This register should not be read in copper configurations */
 1973         if ((hw->phy.media_type == e1000_media_type_internal_serdes) ||
 1974             e1000_sgmii_active_82575(hw))
 1975                 E1000_READ_REG(hw, E1000_SCVPC);
 1976 }
 1977 
 1978 /**
 1979  *  e1000_set_pcie_completion_timeout - set pci-e completion timeout
 1980  *  @hw: pointer to the HW structure
 1981  *
 1982  *  The defaults for 82575 and 82576 should be in the range of 50us to 50ms,
 1983  *  however the hardware default for these parts is 500us to 1ms which is less
 1984  *  than the 10ms recommended by the pci-e spec.  To address this we need to
 1985  *  increase the value to either 10ms to 200ms for capability version 1 config,
 1986  *  or 16ms to 55ms for version 2.
 1987  **/
 1988 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw)
 1989 {
 1990         u32 gcr = E1000_READ_REG(hw, E1000_GCR);
 1991         s32 ret_val = E1000_SUCCESS;
 1992         u16 pcie_devctl2;
 1993 
 1994         /* only take action if timeout value is defaulted to 0 */
 1995         if (gcr & E1000_GCR_CMPL_TMOUT_MASK)
 1996                 goto out;
 1997 
 1998         /*
 1999          * if capababilities version is type 1 we can write the
 2000          * timeout of 10ms to 200ms through the GCR register
 2001          */
 2002         if (!(gcr & E1000_GCR_CAP_VER2)) {
 2003                 gcr |= E1000_GCR_CMPL_TMOUT_10ms;
 2004                 goto out;
 2005         }
 2006 
 2007         /*
 2008          * for version 2 capabilities we need to write the config space
 2009          * directly in order to set the completion timeout value for
 2010          * 16ms to 55ms
 2011          */
 2012         ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
 2013                                           &pcie_devctl2);
 2014         if (ret_val)
 2015                 goto out;
 2016 
 2017         pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms;
 2018 
 2019         ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
 2020                                            &pcie_devctl2);
 2021 out:
 2022         /* disable completion timeout resend */
 2023         gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND;
 2024 
 2025         E1000_WRITE_REG(hw, E1000_GCR, gcr);
 2026         return ret_val;
 2027 }
 2028 
 2029 /**
 2030  *  e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing
 2031  *  @hw: pointer to the hardware struct
 2032  *  @enable: state to enter, either enabled or disabled
 2033  *  @pf: Physical Function pool - do not set anti-spoofing for the PF
 2034  *
 2035  *  enables/disables L2 switch anti-spoofing functionality.
 2036  **/
 2037 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
 2038 {
 2039         u32 reg_val, reg_offset;
 2040 
 2041         switch (hw->mac.type) {
 2042         case e1000_82576:
 2043                 reg_offset = E1000_DTXSWC;
 2044                 break;
 2045         case e1000_i350:
 2046         case e1000_i354:
 2047                 reg_offset = E1000_TXSWC;
 2048                 break;
 2049         default:
 2050                 return;
 2051         }
 2052 
 2053         reg_val = E1000_READ_REG(hw, reg_offset);
 2054         if (enable) {
 2055                 reg_val |= (E1000_DTXSWC_MAC_SPOOF_MASK |
 2056                              E1000_DTXSWC_VLAN_SPOOF_MASK);
 2057                 /* The PF can spoof - it has to in order to
 2058                  * support emulation mode NICs
 2059                  */
 2060                 reg_val ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
 2061         } else {
 2062                 reg_val &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
 2063                              E1000_DTXSWC_VLAN_SPOOF_MASK);
 2064         }
 2065         E1000_WRITE_REG(hw, reg_offset, reg_val);
 2066 }
 2067 
 2068 /**
 2069  *  e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
 2070  *  @hw: pointer to the hardware struct
 2071  *  @enable: state to enter, either enabled or disabled
 2072  *
 2073  *  enables/disables L2 switch loopback functionality.
 2074  **/
 2075 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
 2076 {
 2077         u32 dtxswc;
 2078 
 2079         switch (hw->mac.type) {
 2080         case e1000_82576:
 2081                 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
 2082                 if (enable)
 2083                         dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
 2084                 else
 2085                         dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
 2086                 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
 2087                 break;
 2088         case e1000_i350:
 2089         case e1000_i354:
 2090                 dtxswc = E1000_READ_REG(hw, E1000_TXSWC);
 2091                 if (enable)
 2092                         dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
 2093                 else
 2094                         dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
 2095                 E1000_WRITE_REG(hw, E1000_TXSWC, dtxswc);
 2096                 break;
 2097         default:
 2098                 /* Currently no other hardware supports loopback */
 2099                 break;
 2100         }
 2101 
 2102 
 2103 }
 2104 
 2105 /**
 2106  *  e1000_vmdq_set_replication_pf - enable or disable vmdq replication
 2107  *  @hw: pointer to the hardware struct
 2108  *  @enable: state to enter, either enabled or disabled
 2109  *
 2110  *  enables/disables replication of packets across multiple pools.
 2111  **/
 2112 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
 2113 {
 2114         u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL);
 2115 
 2116         if (enable)
 2117                 vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
 2118         else
 2119                 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
 2120 
 2121         E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl);
 2122 }
 2123 
 2124 /**
 2125  *  e1000_read_phy_reg_82580 - Read 82580 MDI control register
 2126  *  @hw: pointer to the HW structure
 2127  *  @offset: register offset to be read
 2128  *  @data: pointer to the read data
 2129  *
 2130  *  Reads the MDI control register in the PHY at offset and stores the
 2131  *  information read to data.
 2132  **/
 2133 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
 2134 {
 2135         s32 ret_val;
 2136 
 2137         DEBUGFUNC("e1000_read_phy_reg_82580");
 2138 
 2139         ret_val = hw->phy.ops.acquire(hw);
 2140         if (ret_val)
 2141                 goto out;
 2142 
 2143         ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
 2144 
 2145         hw->phy.ops.release(hw);
 2146 
 2147 out:
 2148         return ret_val;
 2149 }
 2150 
 2151 /**
 2152  *  e1000_write_phy_reg_82580 - Write 82580 MDI control register
 2153  *  @hw: pointer to the HW structure
 2154  *  @offset: register offset to write to
 2155  *  @data: data to write to register at offset
 2156  *
 2157  *  Writes data to MDI control register in the PHY at offset.
 2158  **/
 2159 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
 2160 {
 2161         s32 ret_val;
 2162 
 2163         DEBUGFUNC("e1000_write_phy_reg_82580");
 2164 
 2165         ret_val = hw->phy.ops.acquire(hw);
 2166         if (ret_val)
 2167                 goto out;
 2168 
 2169         ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
 2170 
 2171         hw->phy.ops.release(hw);
 2172 
 2173 out:
 2174         return ret_val;
 2175 }
 2176 
 2177 /**
 2178  *  e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
 2179  *  @hw: pointer to the HW structure
 2180  *
 2181  *  This resets the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
 2182  *  the values found in the EEPROM.  This addresses an issue in which these
 2183  *  bits are not restored from EEPROM after reset.
 2184  **/
 2185 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw)
 2186 {
 2187         s32 ret_val = E1000_SUCCESS;
 2188         u32 mdicnfg;
 2189         u16 nvm_data = 0;
 2190 
 2191         DEBUGFUNC("e1000_reset_mdicnfg_82580");
 2192 
 2193         if (hw->mac.type != e1000_82580)
 2194                 goto out;
 2195         if (!e1000_sgmii_active_82575(hw))
 2196                 goto out;
 2197 
 2198         ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
 2199                                    NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
 2200                                    &nvm_data);
 2201         if (ret_val) {
 2202                 DEBUGOUT("NVM Read Error\n");
 2203                 goto out;
 2204         }
 2205 
 2206         mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG);
 2207         if (nvm_data & NVM_WORD24_EXT_MDIO)
 2208                 mdicnfg |= E1000_MDICNFG_EXT_MDIO;
 2209         if (nvm_data & NVM_WORD24_COM_MDIO)
 2210                 mdicnfg |= E1000_MDICNFG_COM_MDIO;
 2211         E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
 2212 out:
 2213         return ret_val;
 2214 }
 2215 
 2216 /**
 2217  *  e1000_reset_hw_82580 - Reset hardware
 2218  *  @hw: pointer to the HW structure
 2219  *
 2220  *  This resets function or entire device (all ports, etc.)
 2221  *  to a known state.
 2222  **/
 2223 static s32 e1000_reset_hw_82580(struct e1000_hw *hw)
 2224 {
 2225         s32 ret_val = E1000_SUCCESS;
 2226         /* BH SW mailbox bit in SW_FW_SYNC */
 2227         u16 swmbsw_mask = E1000_SW_SYNCH_MB;
 2228         u32 ctrl;
 2229         bool global_device_reset = hw->dev_spec._82575.global_device_reset;
 2230 
 2231         DEBUGFUNC("e1000_reset_hw_82580");
 2232 
 2233         hw->dev_spec._82575.global_device_reset = false;
 2234 
 2235         /* 82580 does not reliably do global_device_reset due to hw errata */
 2236         if (hw->mac.type == e1000_82580)
 2237                 global_device_reset = false;
 2238 
 2239         /* Get current control state. */
 2240         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 2241 
 2242         /*
 2243          * Prevent the PCI-E bus from sticking if there is no TLP connection
 2244          * on the last TLP read/write transaction when MAC is reset.
 2245          */
 2246         ret_val = e1000_disable_pcie_master_generic(hw);
 2247         if (ret_val)
 2248                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
 2249 
 2250         DEBUGOUT("Masking off all interrupts\n");
 2251         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 2252         E1000_WRITE_REG(hw, E1000_RCTL, 0);
 2253         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
 2254         E1000_WRITE_FLUSH(hw);
 2255 
 2256         msec_delay(10);
 2257 
 2258         /* Determine whether or not a global dev reset is requested */
 2259         if (global_device_reset && hw->mac.ops.acquire_swfw_sync(hw,
 2260             swmbsw_mask))
 2261                         global_device_reset = false;
 2262 
 2263         if (global_device_reset && !(E1000_READ_REG(hw, E1000_STATUS) &
 2264             E1000_STAT_DEV_RST_SET))
 2265                 ctrl |= E1000_CTRL_DEV_RST;
 2266         else
 2267                 ctrl |= E1000_CTRL_RST;
 2268 
 2269         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 2270 
 2271         switch (hw->device_id) {
 2272         case E1000_DEV_ID_DH89XXCC_SGMII:
 2273                 break;
 2274         default:
 2275                 E1000_WRITE_FLUSH(hw);
 2276                 break;
 2277         }
 2278 
 2279         /* Add delay to insure DEV_RST or RST has time to complete */
 2280         msec_delay(5);
 2281 
 2282         ret_val = e1000_get_auto_rd_done_generic(hw);
 2283         if (ret_val) {
 2284                 /*
 2285                  * When auto config read does not complete, do not
 2286                  * return with an error. This can happen in situations
 2287                  * where there is no eeprom and prevents getting link.
 2288                  */
 2289                 DEBUGOUT("Auto Read Done did not complete\n");
 2290         }
 2291 
 2292         /* clear global device reset status bit */
 2293         E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET);
 2294 
 2295         /* Clear any pending interrupt events. */
 2296         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 2297         E1000_READ_REG(hw, E1000_ICR);
 2298 
 2299         ret_val = e1000_reset_mdicnfg_82580(hw);
 2300         if (ret_val)
 2301                 DEBUGOUT("Could not reset MDICNFG based on EEPROM\n");
 2302 
 2303         /* Install any alternate MAC address into RAR0 */
 2304         ret_val = e1000_check_alt_mac_addr_generic(hw);
 2305 
 2306         /* Release semaphore */
 2307         if (global_device_reset)
 2308                 hw->mac.ops.release_swfw_sync(hw, swmbsw_mask);
 2309 
 2310         return ret_val;
 2311 }
 2312 
 2313 /**
 2314  *  e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual Rx PBA size
 2315  *  @data: data received by reading RXPBS register
 2316  *
 2317  *  The 82580 uses a table based approach for packet buffer allocation sizes.
 2318  *  This function converts the retrieved value into the correct table value
 2319  *     0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
 2320  *  0x0 36  72 144   1   2   4   8  16
 2321  *  0x8 35  70 140 rsv rsv rsv rsv rsv
 2322  */
 2323 u16 e1000_rxpbs_adjust_82580(u32 data)
 2324 {
 2325         u16 ret_val = 0;
 2326 
 2327         if (data < E1000_82580_RXPBS_TABLE_SIZE)
 2328                 ret_val = e1000_82580_rxpbs_table[data];
 2329 
 2330         return ret_val;
 2331 }
 2332 
 2333 /**
 2334  *  e1000_validate_nvm_checksum_with_offset - Validate EEPROM
 2335  *  checksum
 2336  *  @hw: pointer to the HW structure
 2337  *  @offset: offset in words of the checksum protected region
 2338  *
 2339  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
 2340  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
 2341  **/
 2342 s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
 2343 {
 2344         s32 ret_val = E1000_SUCCESS;
 2345         u16 checksum = 0;
 2346         u16 i, nvm_data;
 2347 
 2348         DEBUGFUNC("e1000_validate_nvm_checksum_with_offset");
 2349 
 2350         for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) {
 2351                 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
 2352                 if (ret_val) {
 2353                         DEBUGOUT("NVM Read Error\n");
 2354                         goto out;
 2355                 }
 2356                 checksum += nvm_data;
 2357         }
 2358 
 2359         if (checksum != (u16) NVM_SUM) {
 2360                 DEBUGOUT("NVM Checksum Invalid\n");
 2361                 ret_val = -E1000_ERR_NVM;
 2362                 goto out;
 2363         }
 2364 
 2365 out:
 2366         return ret_val;
 2367 }
 2368 
 2369 /**
 2370  *  e1000_update_nvm_checksum_with_offset - Update EEPROM
 2371  *  checksum
 2372  *  @hw: pointer to the HW structure
 2373  *  @offset: offset in words of the checksum protected region
 2374  *
 2375  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
 2376  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
 2377  *  value to the EEPROM.
 2378  **/
 2379 s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
 2380 {
 2381         s32 ret_val;
 2382         u16 checksum = 0;
 2383         u16 i, nvm_data;
 2384 
 2385         DEBUGFUNC("e1000_update_nvm_checksum_with_offset");
 2386 
 2387         for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) {
 2388                 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
 2389                 if (ret_val) {
 2390                         DEBUGOUT("NVM Read Error while updating checksum.\n");
 2391                         goto out;
 2392                 }
 2393                 checksum += nvm_data;
 2394         }
 2395         checksum = (u16) NVM_SUM - checksum;
 2396         ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1,
 2397                                     &checksum);
 2398         if (ret_val)
 2399                 DEBUGOUT("NVM Write Error while updating checksum.\n");
 2400 
 2401 out:
 2402         return ret_val;
 2403 }
 2404 
 2405 /**
 2406  *  e1000_validate_nvm_checksum_82580 - Validate EEPROM checksum
 2407  *  @hw: pointer to the HW structure
 2408  *
 2409  *  Calculates the EEPROM section checksum by reading/adding each word of
 2410  *  the EEPROM and then verifies that the sum of the EEPROM is
 2411  *  equal to 0xBABA.
 2412  **/
 2413 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw)
 2414 {
 2415         s32 ret_val;
 2416         u16 eeprom_regions_count = 1;
 2417         u16 j, nvm_data;
 2418         u16 nvm_offset;
 2419 
 2420         DEBUGFUNC("e1000_validate_nvm_checksum_82580");
 2421 
 2422         ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
 2423         if (ret_val) {
 2424                 DEBUGOUT("NVM Read Error\n");
 2425                 goto out;
 2426         }
 2427 
 2428         if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) {
 2429                 /* if chekcsums compatibility bit is set validate checksums
 2430                  * for all 4 ports. */
 2431                 eeprom_regions_count = 4;
 2432         }
 2433 
 2434         for (j = 0; j < eeprom_regions_count; j++) {
 2435                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
 2436                 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
 2437                                                                   nvm_offset);
 2438                 if (ret_val != E1000_SUCCESS)
 2439                         goto out;
 2440         }
 2441 
 2442 out:
 2443         return ret_val;
 2444 }
 2445 
 2446 /**
 2447  *  e1000_update_nvm_checksum_82580 - Update EEPROM checksum
 2448  *  @hw: pointer to the HW structure
 2449  *
 2450  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
 2451  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
 2452  *  checksum and writes the value to the EEPROM.
 2453  **/
 2454 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw)
 2455 {
 2456         s32 ret_val;
 2457         u16 j, nvm_data;
 2458         u16 nvm_offset;
 2459 
 2460         DEBUGFUNC("e1000_update_nvm_checksum_82580");
 2461 
 2462         ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
 2463         if (ret_val) {
 2464                 DEBUGOUT("NVM Read Error while updating checksum compatibility bit.\n");
 2465                 goto out;
 2466         }
 2467 
 2468         if (!(nvm_data & NVM_COMPATIBILITY_BIT_MASK)) {
 2469                 /* set compatibility bit to validate checksums appropriately */
 2470                 nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK;
 2471                 ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1,
 2472                                             &nvm_data);
 2473                 if (ret_val) {
 2474                         DEBUGOUT("NVM Write Error while updating checksum compatibility bit.\n");
 2475                         goto out;
 2476                 }
 2477         }
 2478 
 2479         for (j = 0; j < 4; j++) {
 2480                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
 2481                 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
 2482                 if (ret_val)
 2483                         goto out;
 2484         }
 2485 
 2486 out:
 2487         return ret_val;
 2488 }
 2489 
 2490 /**
 2491  *  e1000_validate_nvm_checksum_i350 - Validate EEPROM checksum
 2492  *  @hw: pointer to the HW structure
 2493  *
 2494  *  Calculates the EEPROM section checksum by reading/adding each word of
 2495  *  the EEPROM and then verifies that the sum of the EEPROM is
 2496  *  equal to 0xBABA.
 2497  **/
 2498 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw)
 2499 {
 2500         s32 ret_val = E1000_SUCCESS;
 2501         u16 j;
 2502         u16 nvm_offset;
 2503 
 2504         DEBUGFUNC("e1000_validate_nvm_checksum_i350");
 2505 
 2506         for (j = 0; j < 4; j++) {
 2507                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
 2508                 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
 2509                                                                   nvm_offset);
 2510                 if (ret_val != E1000_SUCCESS)
 2511                         goto out;
 2512         }
 2513 
 2514 out:
 2515         return ret_val;
 2516 }
 2517 
 2518 /**
 2519  *  e1000_update_nvm_checksum_i350 - Update EEPROM checksum
 2520  *  @hw: pointer to the HW structure
 2521  *
 2522  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
 2523  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
 2524  *  checksum and writes the value to the EEPROM.
 2525  **/
 2526 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw)
 2527 {
 2528         s32 ret_val = E1000_SUCCESS;
 2529         u16 j;
 2530         u16 nvm_offset;
 2531 
 2532         DEBUGFUNC("e1000_update_nvm_checksum_i350");
 2533 
 2534         for (j = 0; j < 4; j++) {
 2535                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
 2536                 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
 2537                 if (ret_val != E1000_SUCCESS)
 2538                         goto out;
 2539         }
 2540 
 2541 out:
 2542         return ret_val;
 2543 }
 2544 
 2545 /**
 2546  *  __e1000_access_emi_reg - Read/write EMI register
 2547  *  @hw: pointer to the HW structure
 2548  *  @address: EMI address to program
 2549  *  @data: pointer to value to read/write from/to the EMI address
 2550  *  @read: boolean flag to indicate read or write
 2551  **/
 2552 static s32 __e1000_access_emi_reg(struct e1000_hw *hw, u16 address,
 2553                                   u16 *data, bool read)
 2554 {
 2555         s32 ret_val;
 2556 
 2557         DEBUGFUNC("__e1000_access_emi_reg");
 2558 
 2559         ret_val = hw->phy.ops.write_reg(hw, E1000_EMIADD, address);
 2560         if (ret_val)
 2561                 return ret_val;
 2562 
 2563         if (read)
 2564                 ret_val = hw->phy.ops.read_reg(hw, E1000_EMIDATA, data);
 2565         else
 2566                 ret_val = hw->phy.ops.write_reg(hw, E1000_EMIDATA, *data);
 2567 
 2568         return ret_val;
 2569 }
 2570 
 2571 /**
 2572  *  e1000_read_emi_reg - Read Extended Management Interface register
 2573  *  @hw: pointer to the HW structure
 2574  *  @addr: EMI address to program
 2575  *  @data: value to be read from the EMI address
 2576  **/
 2577 s32 e1000_read_emi_reg(struct e1000_hw *hw, u16 addr, u16 *data)
 2578 {
 2579         DEBUGFUNC("e1000_read_emi_reg");
 2580 
 2581         return __e1000_access_emi_reg(hw, addr, data, true);
 2582 }
 2583 
 2584 /**
 2585  *  e1000_initialize_M88E1512_phy - Initialize M88E1512 PHY
 2586  *  @hw: pointer to the HW structure
 2587  *
 2588  *  Initialize Marvell 1512 to work correctly with Avoton.
 2589  **/
 2590 s32 e1000_initialize_M88E1512_phy(struct e1000_hw *hw)
 2591 {
 2592         struct e1000_phy_info *phy = &hw->phy;
 2593         s32 ret_val = E1000_SUCCESS;
 2594 
 2595         DEBUGFUNC("e1000_initialize_M88E1512_phy");
 2596 
 2597         /* Check if this is correct PHY. */
 2598         if (phy->id != M88E1512_E_PHY_ID)
 2599                 goto out;
 2600 
 2601         /* Switch to PHY page 0xFF. */
 2602         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
 2603         if (ret_val)
 2604                 goto out;
 2605 
 2606         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
 2607         if (ret_val)
 2608                 goto out;
 2609 
 2610         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
 2611         if (ret_val)
 2612                 goto out;
 2613 
 2614         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
 2615         if (ret_val)
 2616                 goto out;
 2617 
 2618         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
 2619         if (ret_val)
 2620                 goto out;
 2621 
 2622         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
 2623         if (ret_val)
 2624                 goto out;
 2625 
 2626         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
 2627         if (ret_val)
 2628                 goto out;
 2629 
 2630         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xCC0C);
 2631         if (ret_val)
 2632                 goto out;
 2633 
 2634         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
 2635         if (ret_val)
 2636                 goto out;
 2637 
 2638         /* Switch to PHY page 0xFB. */
 2639         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
 2640         if (ret_val)
 2641                 goto out;
 2642 
 2643         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x000D);
 2644         if (ret_val)
 2645                 goto out;
 2646 
 2647         /* Switch to PHY page 0x12. */
 2648         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
 2649         if (ret_val)
 2650                 goto out;
 2651 
 2652         /* Change mode to SGMII-to-Copper */
 2653         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
 2654         if (ret_val)
 2655                 goto out;
 2656 
 2657         /* Return the PHY to page 0. */
 2658         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
 2659         if (ret_val)
 2660                 goto out;
 2661 
 2662         ret_val = phy->ops.commit(hw);
 2663         if (ret_val) {
 2664                 DEBUGOUT("Error committing the PHY changes\n");
 2665                 return ret_val;
 2666         }
 2667 
 2668         msec_delay(1000);
 2669 out:
 2670         return ret_val;
 2671 }
 2672 
 2673 /**
 2674  *  e1000_initialize_M88E1543_phy - Initialize M88E1543 PHY
 2675  *  @hw: pointer to the HW structure
 2676  *
 2677  *  Initialize Marvell 1543 to work correctly with Avoton.
 2678  **/
 2679 s32 e1000_initialize_M88E1543_phy(struct e1000_hw *hw)
 2680 {
 2681         struct e1000_phy_info *phy = &hw->phy;
 2682         s32 ret_val = E1000_SUCCESS;
 2683 
 2684         DEBUGFUNC("e1000_initialize_M88E1543_phy");
 2685 
 2686         /* Check if this is correct PHY. */
 2687         if (phy->id != M88E1543_E_PHY_ID)
 2688                 goto out;
 2689 
 2690         /* Switch to PHY page 0xFF. */
 2691         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
 2692         if (ret_val)
 2693                 goto out;
 2694 
 2695         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
 2696         if (ret_val)
 2697                 goto out;
 2698 
 2699         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
 2700         if (ret_val)
 2701                 goto out;
 2702 
 2703         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
 2704         if (ret_val)
 2705                 goto out;
 2706 
 2707         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
 2708         if (ret_val)
 2709                 goto out;
 2710 
 2711         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
 2712         if (ret_val)
 2713                 goto out;
 2714 
 2715         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
 2716         if (ret_val)
 2717                 goto out;
 2718 
 2719         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xDC0C);
 2720         if (ret_val)
 2721                 goto out;
 2722 
 2723         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
 2724         if (ret_val)
 2725                 goto out;
 2726 
 2727         /* Switch to PHY page 0xFB. */
 2728         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
 2729         if (ret_val)
 2730                 goto out;
 2731 
 2732         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0xC00D);
 2733         if (ret_val)
 2734                 goto out;
 2735 
 2736         /* Switch to PHY page 0x12. */
 2737         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
 2738         if (ret_val)
 2739                 goto out;
 2740 
 2741         /* Change mode to SGMII-to-Copper */
 2742         ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
 2743         if (ret_val)
 2744                 goto out;
 2745 
 2746         /* Switch to PHY page 1. */
 2747         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x1);
 2748         if (ret_val)
 2749                 goto out;
 2750 
 2751         /* Change mode to 1000BASE-X/SGMII and autoneg enable; reset */
 2752         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_FIBER_CTRL, 0x9140);
 2753         if (ret_val)
 2754                 goto out;
 2755 
 2756         /* Return the PHY to page 0. */
 2757         ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
 2758         if (ret_val)
 2759                 goto out;
 2760 
 2761         ret_val = phy->ops.commit(hw);
 2762         if (ret_val) {
 2763                 DEBUGOUT("Error committing the PHY changes\n");
 2764                 return ret_val;
 2765         }
 2766 
 2767         msec_delay(1000);
 2768 out:
 2769         return ret_val;
 2770 }
 2771 
 2772 /**
 2773  *  e1000_set_eee_i350 - Enable/disable EEE support
 2774  *  @hw: pointer to the HW structure
 2775  *  @adv1G: boolean flag enabling 1G EEE advertisement
 2776  *  @adv100M: boolean flag enabling 100M EEE advertisement
 2777  *
 2778  *  Enable/disable EEE based on setting in dev_spec structure.
 2779  *
 2780  **/
 2781 s32 e1000_set_eee_i350(struct e1000_hw *hw, bool adv1G, bool adv100M)
 2782 {
 2783         u32 ipcnfg, eeer;
 2784 
 2785         DEBUGFUNC("e1000_set_eee_i350");
 2786 
 2787         if ((hw->mac.type < e1000_i350) ||
 2788             (hw->phy.media_type != e1000_media_type_copper))
 2789                 goto out;
 2790         ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG);
 2791         eeer = E1000_READ_REG(hw, E1000_EEER);
 2792 
 2793         /* enable or disable per user setting */
 2794         if (!(hw->dev_spec._82575.eee_disable)) {
 2795                 u32 eee_su = E1000_READ_REG(hw, E1000_EEE_SU);
 2796 
 2797                 if (adv100M)
 2798                         ipcnfg |= E1000_IPCNFG_EEE_100M_AN;
 2799                 else
 2800                         ipcnfg &= ~E1000_IPCNFG_EEE_100M_AN;
 2801 
 2802                 if (adv1G)
 2803                         ipcnfg |= E1000_IPCNFG_EEE_1G_AN;
 2804                 else
 2805                         ipcnfg &= ~E1000_IPCNFG_EEE_1G_AN;
 2806 
 2807                 eeer |= (E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
 2808                          E1000_EEER_LPI_FC);
 2809 
 2810                 /* This bit should not be set in normal operation. */
 2811                 if (eee_su & E1000_EEE_SU_LPI_CLK_STP)
 2812                         DEBUGOUT("LPI Clock Stop Bit should not be set!\n");
 2813         } else {
 2814                 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN | E1000_IPCNFG_EEE_100M_AN);
 2815                 eeer &= ~(E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
 2816                           E1000_EEER_LPI_FC);
 2817         }
 2818         E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg);
 2819         E1000_WRITE_REG(hw, E1000_EEER, eeer);
 2820         E1000_READ_REG(hw, E1000_IPCNFG);
 2821         E1000_READ_REG(hw, E1000_EEER);
 2822 out:
 2823 
 2824         return E1000_SUCCESS;
 2825 }
 2826 
 2827 /**
 2828  *  e1000_set_eee_i354 - Enable/disable EEE support
 2829  *  @hw: pointer to the HW structure
 2830  *  @adv1G: boolean flag enabling 1G EEE advertisement
 2831  *  @adv100M: boolean flag enabling 100M EEE advertisement
 2832  *
 2833  *  Enable/disable EEE legacy mode based on setting in dev_spec structure.
 2834  *
 2835  **/
 2836 s32 e1000_set_eee_i354(struct e1000_hw *hw, bool adv1G, bool adv100M)
 2837 {
 2838         struct e1000_phy_info *phy = &hw->phy;
 2839         s32 ret_val = E1000_SUCCESS;
 2840         u16 phy_data;
 2841 
 2842         DEBUGFUNC("e1000_set_eee_i354");
 2843 
 2844         if ((hw->phy.media_type != e1000_media_type_copper) ||
 2845             ((phy->id != M88E1543_E_PHY_ID) &&
 2846             (phy->id != M88E1512_E_PHY_ID)))
 2847                 goto out;
 2848 
 2849         if (!hw->dev_spec._82575.eee_disable) {
 2850                 /* Switch to PHY page 18. */
 2851                 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 18);
 2852                 if (ret_val)
 2853                         goto out;
 2854 
 2855                 ret_val = phy->ops.read_reg(hw, E1000_M88E1543_EEE_CTRL_1,
 2856                                             &phy_data);
 2857                 if (ret_val)
 2858                         goto out;
 2859 
 2860                 phy_data |= E1000_M88E1543_EEE_CTRL_1_MS;
 2861                 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_EEE_CTRL_1,
 2862                                              phy_data);
 2863                 if (ret_val)
 2864                         goto out;
 2865 
 2866                 /* Return the PHY to page 0. */
 2867                 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
 2868                 if (ret_val)
 2869                         goto out;
 2870 
 2871                 /* Turn on EEE advertisement. */
 2872                 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
 2873                                                E1000_EEE_ADV_DEV_I354,
 2874                                                &phy_data);
 2875                 if (ret_val)
 2876                         goto out;
 2877 
 2878                 if (adv100M)
 2879                         phy_data |= E1000_EEE_ADV_100_SUPPORTED;
 2880                 else
 2881                         phy_data &= ~E1000_EEE_ADV_100_SUPPORTED;
 2882 
 2883                 if (adv1G)
 2884                         phy_data |= E1000_EEE_ADV_1000_SUPPORTED;
 2885                 else
 2886                         phy_data &= ~E1000_EEE_ADV_1000_SUPPORTED;
 2887 
 2888                 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
 2889                                                 E1000_EEE_ADV_DEV_I354,
 2890                                                 phy_data);
 2891         } else {
 2892                 /* Turn off EEE advertisement. */
 2893                 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
 2894                                                E1000_EEE_ADV_DEV_I354,
 2895                                                &phy_data);
 2896                 if (ret_val)
 2897                         goto out;
 2898 
 2899                 phy_data &= ~(E1000_EEE_ADV_100_SUPPORTED |
 2900                               E1000_EEE_ADV_1000_SUPPORTED);
 2901                 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
 2902                                                 E1000_EEE_ADV_DEV_I354,
 2903                                                 phy_data);
 2904         }
 2905 
 2906 out:
 2907         return ret_val;
 2908 }
 2909 
 2910 /**
 2911  *  e1000_get_eee_status_i354 - Get EEE status
 2912  *  @hw: pointer to the HW structure
 2913  *  @status: EEE status
 2914  *
 2915  *  Get EEE status by guessing based on whether Tx or Rx LPI indications have
 2916  *  been received.
 2917  **/
 2918 s32 e1000_get_eee_status_i354(struct e1000_hw *hw, bool *status)
 2919 {
 2920         struct e1000_phy_info *phy = &hw->phy;
 2921         s32 ret_val = E1000_SUCCESS;
 2922         u16 phy_data;
 2923 
 2924         DEBUGFUNC("e1000_get_eee_status_i354");
 2925 
 2926         /* Check if EEE is supported on this device. */
 2927         if ((hw->phy.media_type != e1000_media_type_copper) ||
 2928             ((phy->id != M88E1543_E_PHY_ID) &&
 2929             (phy->id != M88E1512_E_PHY_ID)))
 2930                 goto out;
 2931 
 2932         ret_val = e1000_read_xmdio_reg(hw, E1000_PCS_STATUS_ADDR_I354,
 2933                                        E1000_PCS_STATUS_DEV_I354,
 2934                                        &phy_data);
 2935         if (ret_val)
 2936                 goto out;
 2937 
 2938         *status = phy_data & (E1000_PCS_STATUS_TX_LPI_RCVD |
 2939                               E1000_PCS_STATUS_RX_LPI_RCVD) ? true : false;
 2940 
 2941 out:
 2942         return ret_val;
 2943 }
 2944 
 2945 /* Due to a hw errata, if the host tries to  configure the VFTA register
 2946  * while performing queries from the BMC or DMA, then the VFTA in some
 2947  * cases won't be written.
 2948  */
 2949 
 2950 /**
 2951  *  e1000_clear_vfta_i350 - Clear VLAN filter table
 2952  *  @hw: pointer to the HW structure
 2953  *
 2954  *  Clears the register array which contains the VLAN filter table by
 2955  *  setting all the values to 0.
 2956  **/
 2957 void e1000_clear_vfta_i350(struct e1000_hw *hw)
 2958 {
 2959         u32 offset;
 2960         int i;
 2961 
 2962         DEBUGFUNC("e1000_clear_vfta_350");
 2963 
 2964         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
 2965                 for (i = 0; i < 10; i++)
 2966                         E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0);
 2967 
 2968                 E1000_WRITE_FLUSH(hw);
 2969         }
 2970 }
 2971 
 2972 /**
 2973  *  e1000_write_vfta_i350 - Write value to VLAN filter table
 2974  *  @hw: pointer to the HW structure
 2975  *  @offset: register offset in VLAN filter table
 2976  *  @value: register value written to VLAN filter table
 2977  *
 2978  *  Writes value at the given offset in the register array which stores
 2979  *  the VLAN filter table.
 2980  **/
 2981 void e1000_write_vfta_i350(struct e1000_hw *hw, u32 offset, u32 value)
 2982 {
 2983         int i;
 2984 
 2985         DEBUGFUNC("e1000_write_vfta_350");
 2986 
 2987         for (i = 0; i < 10; i++)
 2988                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value);
 2989 
 2990         E1000_WRITE_FLUSH(hw);
 2991 }
 2992 
 2993 
 2994 /**
 2995  *  e1000_set_i2c_bb - Enable I2C bit-bang
 2996  *  @hw: pointer to the HW structure
 2997  *
 2998  *  Enable I2C bit-bang interface
 2999  *
 3000  **/
 3001 s32 e1000_set_i2c_bb(struct e1000_hw *hw)
 3002 {
 3003         s32 ret_val = E1000_SUCCESS;
 3004         u32 ctrl_ext, i2cparams;
 3005 
 3006         DEBUGFUNC("e1000_set_i2c_bb");
 3007 
 3008         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 3009         ctrl_ext |= E1000_CTRL_I2C_ENA;
 3010         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 3011         E1000_WRITE_FLUSH(hw);
 3012 
 3013         i2cparams = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3014         i2cparams |= E1000_I2CBB_EN;
 3015         i2cparams |= E1000_I2C_DATA_OE_N;
 3016         i2cparams |= E1000_I2C_CLK_OE_N;
 3017         E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cparams);
 3018         E1000_WRITE_FLUSH(hw);
 3019 
 3020         return ret_val;
 3021 }
 3022 
 3023 /**
 3024  *  e1000_read_i2c_byte_generic - Reads 8 bit word over I2C
 3025  *  @hw: pointer to hardware structure
 3026  *  @byte_offset: byte offset to read
 3027  *  @dev_addr: device address
 3028  *  @data: value read
 3029  *
 3030  *  Performs byte read operation over I2C interface at
 3031  *  a specified device address.
 3032  **/
 3033 s32 e1000_read_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
 3034                                 u8 dev_addr, u8 *data)
 3035 {
 3036         s32 status = E1000_SUCCESS;
 3037         u32 max_retry = 10;
 3038         u32 retry = 1;
 3039         u16 swfw_mask = 0;
 3040 
 3041         bool nack = true;
 3042 
 3043         DEBUGFUNC("e1000_read_i2c_byte_generic");
 3044 
 3045         swfw_mask = E1000_SWFW_PHY0_SM;
 3046 
 3047         do {
 3048                 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
 3049                     != E1000_SUCCESS) {
 3050                         status = E1000_ERR_SWFW_SYNC;
 3051                         goto read_byte_out;
 3052                 }
 3053 
 3054                 e1000_i2c_start(hw);
 3055 
 3056                 /* Device Address and write indication */
 3057                 status = e1000_clock_out_i2c_byte(hw, dev_addr);
 3058                 if (status != E1000_SUCCESS)
 3059                         goto fail;
 3060 
 3061                 status = e1000_get_i2c_ack(hw);
 3062                 if (status != E1000_SUCCESS)
 3063                         goto fail;
 3064 
 3065                 status = e1000_clock_out_i2c_byte(hw, byte_offset);
 3066                 if (status != E1000_SUCCESS)
 3067                         goto fail;
 3068 
 3069                 status = e1000_get_i2c_ack(hw);
 3070                 if (status != E1000_SUCCESS)
 3071                         goto fail;
 3072 
 3073                 e1000_i2c_start(hw);
 3074 
 3075                 /* Device Address and read indication */
 3076                 status = e1000_clock_out_i2c_byte(hw, (dev_addr | 0x1));
 3077                 if (status != E1000_SUCCESS)
 3078                         goto fail;
 3079 
 3080                 status = e1000_get_i2c_ack(hw);
 3081                 if (status != E1000_SUCCESS)
 3082                         goto fail;
 3083 
 3084                 e1000_clock_in_i2c_byte(hw, data);
 3085 
 3086                 status = e1000_clock_out_i2c_bit(hw, nack);
 3087                 if (status != E1000_SUCCESS)
 3088                         goto fail;
 3089 
 3090                 e1000_i2c_stop(hw);
 3091                 break;
 3092 
 3093 fail:
 3094                 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 3095                 msec_delay(100);
 3096                 e1000_i2c_bus_clear(hw);
 3097                 retry++;
 3098                 if (retry < max_retry)
 3099                         DEBUGOUT("I2C byte read error - Retrying.\n");
 3100                 else
 3101                         DEBUGOUT("I2C byte read error.\n");
 3102 
 3103         } while (retry < max_retry);
 3104 
 3105         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 3106 
 3107 read_byte_out:
 3108 
 3109         return status;
 3110 }
 3111 
 3112 /**
 3113  *  e1000_write_i2c_byte_generic - Writes 8 bit word over I2C
 3114  *  @hw: pointer to hardware structure
 3115  *  @byte_offset: byte offset to write
 3116  *  @dev_addr: device address
 3117  *  @data: value to write
 3118  *
 3119  *  Performs byte write operation over I2C interface at
 3120  *  a specified device address.
 3121  **/
 3122 s32 e1000_write_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
 3123                                  u8 dev_addr, u8 data)
 3124 {
 3125         s32 status = E1000_SUCCESS;
 3126         u32 max_retry = 1;
 3127         u32 retry = 0;
 3128         u16 swfw_mask = 0;
 3129 
 3130         DEBUGFUNC("e1000_write_i2c_byte_generic");
 3131 
 3132         swfw_mask = E1000_SWFW_PHY0_SM;
 3133 
 3134         if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != E1000_SUCCESS) {
 3135                 status = E1000_ERR_SWFW_SYNC;
 3136                 goto write_byte_out;
 3137         }
 3138 
 3139         do {
 3140                 e1000_i2c_start(hw);
 3141 
 3142                 status = e1000_clock_out_i2c_byte(hw, dev_addr);
 3143                 if (status != E1000_SUCCESS)
 3144                         goto fail;
 3145 
 3146                 status = e1000_get_i2c_ack(hw);
 3147                 if (status != E1000_SUCCESS)
 3148                         goto fail;
 3149 
 3150                 status = e1000_clock_out_i2c_byte(hw, byte_offset);
 3151                 if (status != E1000_SUCCESS)
 3152                         goto fail;
 3153 
 3154                 status = e1000_get_i2c_ack(hw);
 3155                 if (status != E1000_SUCCESS)
 3156                         goto fail;
 3157 
 3158                 status = e1000_clock_out_i2c_byte(hw, data);
 3159                 if (status != E1000_SUCCESS)
 3160                         goto fail;
 3161 
 3162                 status = e1000_get_i2c_ack(hw);
 3163                 if (status != E1000_SUCCESS)
 3164                         goto fail;
 3165 
 3166                 e1000_i2c_stop(hw);
 3167                 break;
 3168 
 3169 fail:
 3170                 e1000_i2c_bus_clear(hw);
 3171                 retry++;
 3172                 if (retry < max_retry)
 3173                         DEBUGOUT("I2C byte write error - Retrying.\n");
 3174                 else
 3175                         DEBUGOUT("I2C byte write error.\n");
 3176         } while (retry < max_retry);
 3177 
 3178         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 3179 
 3180 write_byte_out:
 3181 
 3182         return status;
 3183 }
 3184 
 3185 /**
 3186  *  e1000_i2c_start - Sets I2C start condition
 3187  *  @hw: pointer to hardware structure
 3188  *
 3189  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
 3190  **/
 3191 static void e1000_i2c_start(struct e1000_hw *hw)
 3192 {
 3193         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3194 
 3195         DEBUGFUNC("e1000_i2c_start");
 3196 
 3197         /* Start condition must begin with data and clock high */
 3198         e1000_set_i2c_data(hw, &i2cctl, 1);
 3199         e1000_raise_i2c_clk(hw, &i2cctl);
 3200 
 3201         /* Setup time for start condition (4.7us) */
 3202         usec_delay(E1000_I2C_T_SU_STA);
 3203 
 3204         e1000_set_i2c_data(hw, &i2cctl, 0);
 3205 
 3206         /* Hold time for start condition (4us) */
 3207         usec_delay(E1000_I2C_T_HD_STA);
 3208 
 3209         e1000_lower_i2c_clk(hw, &i2cctl);
 3210 
 3211         /* Minimum low period of clock is 4.7 us */
 3212         usec_delay(E1000_I2C_T_LOW);
 3213 
 3214 }
 3215 
 3216 /**
 3217  *  e1000_i2c_stop - Sets I2C stop condition
 3218  *  @hw: pointer to hardware structure
 3219  *
 3220  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
 3221  **/
 3222 static void e1000_i2c_stop(struct e1000_hw *hw)
 3223 {
 3224         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3225 
 3226         DEBUGFUNC("e1000_i2c_stop");
 3227 
 3228         /* Stop condition must begin with data low and clock high */
 3229         e1000_set_i2c_data(hw, &i2cctl, 0);
 3230         e1000_raise_i2c_clk(hw, &i2cctl);
 3231 
 3232         /* Setup time for stop condition (4us) */
 3233         usec_delay(E1000_I2C_T_SU_STO);
 3234 
 3235         e1000_set_i2c_data(hw, &i2cctl, 1);
 3236 
 3237         /* bus free time between stop and start (4.7us)*/
 3238         usec_delay(E1000_I2C_T_BUF);
 3239 }
 3240 
 3241 /**
 3242  *  e1000_clock_in_i2c_byte - Clocks in one byte via I2C
 3243  *  @hw: pointer to hardware structure
 3244  *  @data: data byte to clock in
 3245  *
 3246  *  Clocks in one byte data via I2C data/clock
 3247  **/
 3248 static void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
 3249 {
 3250         s32 i;
 3251         bool bit = 0;
 3252 
 3253         DEBUGFUNC("e1000_clock_in_i2c_byte");
 3254 
 3255         *data = 0;
 3256         for (i = 7; i >= 0; i--) {
 3257                 e1000_clock_in_i2c_bit(hw, &bit);
 3258                 *data |= bit << i;
 3259         }
 3260 }
 3261 
 3262 /**
 3263  *  e1000_clock_out_i2c_byte - Clocks out one byte via I2C
 3264  *  @hw: pointer to hardware structure
 3265  *  @data: data byte clocked out
 3266  *
 3267  *  Clocks out one byte data via I2C data/clock
 3268  **/
 3269 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data)
 3270 {
 3271         s32 status = E1000_SUCCESS;
 3272         s32 i;
 3273         u32 i2cctl;
 3274         bool bit = 0;
 3275 
 3276         DEBUGFUNC("e1000_clock_out_i2c_byte");
 3277 
 3278         for (i = 7; i >= 0; i--) {
 3279                 bit = (data >> i) & 0x1;
 3280                 status = e1000_clock_out_i2c_bit(hw, bit);
 3281 
 3282                 if (status != E1000_SUCCESS)
 3283                         break;
 3284         }
 3285 
 3286         /* Release SDA line (set high) */
 3287         i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3288 
 3289         i2cctl |= E1000_I2C_DATA_OE_N;
 3290         E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cctl);
 3291         E1000_WRITE_FLUSH(hw);
 3292 
 3293         return status;
 3294 }
 3295 
 3296 /**
 3297  *  e1000_get_i2c_ack - Polls for I2C ACK
 3298  *  @hw: pointer to hardware structure
 3299  *
 3300  *  Clocks in/out one bit via I2C data/clock
 3301  **/
 3302 static s32 e1000_get_i2c_ack(struct e1000_hw *hw)
 3303 {
 3304         s32 status = E1000_SUCCESS;
 3305         u32 i = 0;
 3306         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3307         u32 timeout = 10;
 3308         bool ack = true;
 3309 
 3310         DEBUGFUNC("e1000_get_i2c_ack");
 3311 
 3312         e1000_raise_i2c_clk(hw, &i2cctl);
 3313 
 3314         /* Minimum high period of clock is 4us */
 3315         usec_delay(E1000_I2C_T_HIGH);
 3316 
 3317         /* Wait until SCL returns high */
 3318         for (i = 0; i < timeout; i++) {
 3319                 usec_delay(1);
 3320                 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3321                 if (i2cctl & E1000_I2C_CLK_IN)
 3322                         break;
 3323         }
 3324         if (!(i2cctl & E1000_I2C_CLK_IN))
 3325                 return E1000_ERR_I2C;
 3326 
 3327         ack = e1000_get_i2c_data(&i2cctl);
 3328         if (ack) {
 3329                 DEBUGOUT("I2C ack was not received.\n");
 3330                 status = E1000_ERR_I2C;
 3331         }
 3332 
 3333         e1000_lower_i2c_clk(hw, &i2cctl);
 3334 
 3335         /* Minimum low period of clock is 4.7 us */
 3336         usec_delay(E1000_I2C_T_LOW);
 3337 
 3338         return status;
 3339 }
 3340 
 3341 /**
 3342  *  e1000_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
 3343  *  @hw: pointer to hardware structure
 3344  *  @data: read data value
 3345  *
 3346  *  Clocks in one bit via I2C data/clock
 3347  **/
 3348 static void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
 3349 {
 3350         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3351 
 3352         DEBUGFUNC("e1000_clock_in_i2c_bit");
 3353 
 3354         e1000_raise_i2c_clk(hw, &i2cctl);
 3355 
 3356         /* Minimum high period of clock is 4us */
 3357         usec_delay(E1000_I2C_T_HIGH);
 3358 
 3359         i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3360         *data = e1000_get_i2c_data(&i2cctl);
 3361 
 3362         e1000_lower_i2c_clk(hw, &i2cctl);
 3363 
 3364         /* Minimum low period of clock is 4.7 us */
 3365         usec_delay(E1000_I2C_T_LOW);
 3366 }
 3367 
 3368 /**
 3369  *  e1000_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
 3370  *  @hw: pointer to hardware structure
 3371  *  @data: data value to write
 3372  *
 3373  *  Clocks out one bit via I2C data/clock
 3374  **/
 3375 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data)
 3376 {
 3377         s32 status;
 3378         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3379 
 3380         DEBUGFUNC("e1000_clock_out_i2c_bit");
 3381 
 3382         status = e1000_set_i2c_data(hw, &i2cctl, data);
 3383         if (status == E1000_SUCCESS) {
 3384                 e1000_raise_i2c_clk(hw, &i2cctl);
 3385 
 3386                 /* Minimum high period of clock is 4us */
 3387                 usec_delay(E1000_I2C_T_HIGH);
 3388 
 3389                 e1000_lower_i2c_clk(hw, &i2cctl);
 3390 
 3391                 /* Minimum low period of clock is 4.7 us.
 3392                  * This also takes care of the data hold time.
 3393                  */
 3394                 usec_delay(E1000_I2C_T_LOW);
 3395         } else {
 3396                 status = E1000_ERR_I2C;
 3397                 DEBUGOUT1("I2C data was not set to %X\n", data);
 3398         }
 3399 
 3400         return status;
 3401 }
 3402 /**
 3403  *  e1000_raise_i2c_clk - Raises the I2C SCL clock
 3404  *  @hw: pointer to hardware structure
 3405  *  @i2cctl: Current value of I2CCTL register
 3406  *
 3407  *  Raises the I2C clock line ''->'1'
 3408  **/
 3409 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
 3410 {
 3411         DEBUGFUNC("e1000_raise_i2c_clk");
 3412 
 3413         *i2cctl |= E1000_I2C_CLK_OUT;
 3414         *i2cctl &= ~E1000_I2C_CLK_OE_N;
 3415         E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
 3416         E1000_WRITE_FLUSH(hw);
 3417 
 3418         /* SCL rise time (1000ns) */
 3419         usec_delay(E1000_I2C_T_RISE);
 3420 }
 3421 
 3422 /**
 3423  *  e1000_lower_i2c_clk - Lowers the I2C SCL clock
 3424  *  @hw: pointer to hardware structure
 3425  *  @i2cctl: Current value of I2CCTL register
 3426  *
 3427  *  Lowers the I2C clock line '1'->''
 3428  **/
 3429 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
 3430 {
 3431 
 3432         DEBUGFUNC("e1000_lower_i2c_clk");
 3433 
 3434         *i2cctl &= ~E1000_I2C_CLK_OUT;
 3435         *i2cctl &= ~E1000_I2C_CLK_OE_N;
 3436         E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
 3437         E1000_WRITE_FLUSH(hw);
 3438 
 3439         /* SCL fall time (300ns) */
 3440         usec_delay(E1000_I2C_T_FALL);
 3441 }
 3442 
 3443 /**
 3444  *  e1000_set_i2c_data - Sets the I2C data bit
 3445  *  @hw: pointer to hardware structure
 3446  *  @i2cctl: Current value of I2CCTL register
 3447  *  @data: I2C data value (0 or 1) to set
 3448  *
 3449  *  Sets the I2C data bit
 3450  **/
 3451 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data)
 3452 {
 3453         s32 status = E1000_SUCCESS;
 3454 
 3455         DEBUGFUNC("e1000_set_i2c_data");
 3456 
 3457         if (data)
 3458                 *i2cctl |= E1000_I2C_DATA_OUT;
 3459         else
 3460                 *i2cctl &= ~E1000_I2C_DATA_OUT;
 3461 
 3462         *i2cctl &= ~E1000_I2C_DATA_OE_N;
 3463         *i2cctl |= E1000_I2C_CLK_OE_N;
 3464         E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
 3465         E1000_WRITE_FLUSH(hw);
 3466 
 3467         /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
 3468         usec_delay(E1000_I2C_T_RISE + E1000_I2C_T_FALL + E1000_I2C_T_SU_DATA);
 3469 
 3470         *i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3471         if (data != e1000_get_i2c_data(i2cctl)) {
 3472                 status = E1000_ERR_I2C;
 3473                 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
 3474         }
 3475 
 3476         return status;
 3477 }
 3478 
 3479 /**
 3480  *  e1000_get_i2c_data - Reads the I2C SDA data bit
 3481  *  @i2cctl: Current value of I2CCTL register
 3482  *
 3483  *  Returns the I2C data bit value
 3484  **/
 3485 static bool e1000_get_i2c_data(u32 *i2cctl)
 3486 {
 3487         bool data;
 3488 
 3489         DEBUGFUNC("e1000_get_i2c_data");
 3490 
 3491         if (*i2cctl & E1000_I2C_DATA_IN)
 3492                 data = 1;
 3493         else
 3494                 data = 0;
 3495 
 3496         return data;
 3497 }
 3498 
 3499 /**
 3500  *  e1000_i2c_bus_clear - Clears the I2C bus
 3501  *  @hw: pointer to hardware structure
 3502  *
 3503  *  Clears the I2C bus by sending nine clock pulses.
 3504  *  Used when data line is stuck low.
 3505  **/
 3506 void e1000_i2c_bus_clear(struct e1000_hw *hw)
 3507 {
 3508         u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 3509         u32 i;
 3510 
 3511         DEBUGFUNC("e1000_i2c_bus_clear");
 3512 
 3513         e1000_i2c_start(hw);
 3514 
 3515         e1000_set_i2c_data(hw, &i2cctl, 1);
 3516 
 3517         for (i = 0; i < 9; i++) {
 3518                 e1000_raise_i2c_clk(hw, &i2cctl);
 3519 
 3520                 /* Min high period of clock is 4us */
 3521                 usec_delay(E1000_I2C_T_HIGH);
 3522 
 3523                 e1000_lower_i2c_clk(hw, &i2cctl);
 3524 
 3525                 /* Min low period of clock is 4.7us*/
 3526                 usec_delay(E1000_I2C_T_LOW);
 3527         }
 3528 
 3529         e1000_i2c_start(hw);
 3530 
 3531         /* Put the i2c bus back to default state */
 3532         e1000_i2c_stop(hw);
 3533 }
 3534 

Cache object: 62577eb0aac9dddd50c1db39da821985


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.