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

Cache object: b7130e8e56293c3f088ff66bb3db9f78


[ 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.