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_82571.c

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

    1 /******************************************************************************
    2   SPDX-License-Identifier: BSD-3-Clause
    3 
    4   Copyright (c) 2001-2020, Intel Corporation
    5   All rights reserved.
    6 
    7   Redistribution and use in source and binary forms, with or without
    8   modification, are permitted provided that the following conditions are met:
    9 
   10    1. Redistributions of source code must retain the above copyright notice,
   11       this list of conditions and the following disclaimer.
   12 
   13    2. Redistributions in binary form must reproduce the above copyright
   14       notice, this list of conditions and the following disclaimer in the
   15       documentation and/or other materials provided with the distribution.
   16 
   17    3. Neither the name of the Intel Corporation nor the names of its
   18       contributors may be used to endorse or promote products derived from
   19       this software without specific prior written permission.
   20 
   21   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   22   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   25   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   26   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   27   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   28   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   29   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   30   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   31   POSSIBILITY OF SUCH DAMAGE.
   32 
   33 ******************************************************************************/
   34 /*$FreeBSD$*/
   35 
   36 /* 82571EB Gigabit Ethernet Controller
   37  * 82571EB Gigabit Ethernet Controller (Copper)
   38  * 82571EB Gigabit Ethernet Controller (Fiber)
   39  * 82571EB Dual Port Gigabit Mezzanine Adapter
   40  * 82571EB Quad Port Gigabit Mezzanine Adapter
   41  * 82571PT Gigabit PT Quad Port Server ExpressModule
   42  * 82572EI Gigabit Ethernet Controller (Copper)
   43  * 82572EI Gigabit Ethernet Controller (Fiber)
   44  * 82572EI Gigabit Ethernet Controller
   45  * 82573V Gigabit Ethernet Controller (Copper)
   46  * 82573E Gigabit Ethernet Controller (Copper)
   47  * 82573L Gigabit Ethernet Controller
   48  * 82574L Gigabit Network Connection
   49  * 82583V Gigabit Network Connection
   50  */
   51 
   52 #include "e1000_api.h"
   53 
   54 static s32  e1000_acquire_nvm_82571(struct e1000_hw *hw);
   55 static void e1000_release_nvm_82571(struct e1000_hw *hw);
   56 static s32  e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset,
   57                                   u16 words, u16 *data);
   58 static s32  e1000_update_nvm_checksum_82571(struct e1000_hw *hw);
   59 static s32  e1000_validate_nvm_checksum_82571(struct e1000_hw *hw);
   60 static s32  e1000_get_cfg_done_82571(struct e1000_hw *hw);
   61 static s32  e1000_set_d0_lplu_state_82571(struct e1000_hw *hw,
   62                                           bool active);
   63 static s32  e1000_reset_hw_82571(struct e1000_hw *hw);
   64 static s32  e1000_init_hw_82571(struct e1000_hw *hw);
   65 static void e1000_clear_vfta_82571(struct e1000_hw *hw);
   66 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
   67 static s32 e1000_led_on_82574(struct e1000_hw *hw);
   68 static s32  e1000_setup_link_82571(struct e1000_hw *hw);
   69 static s32  e1000_setup_copper_link_82571(struct e1000_hw *hw);
   70 static s32  e1000_check_for_serdes_link_82571(struct e1000_hw *hw);
   71 static s32  e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
   72 static s32  e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data);
   73 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
   74 static s32  e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
   75 static s32  e1000_get_phy_id_82571(struct e1000_hw *hw);
   76 static s32  e1000_get_hw_semaphore_82574(struct e1000_hw *hw);
   77 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw);
   78 static s32  e1000_set_d0_lplu_state_82574(struct e1000_hw *hw,
   79                                           bool active);
   80 static s32  e1000_set_d3_lplu_state_82574(struct e1000_hw *hw,
   81                                           bool active);
   82 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
   83 static s32  e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
   84                                        u16 words, u16 *data);
   85 static s32  e1000_read_mac_addr_82571(struct e1000_hw *hw);
   86 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw);
   87 
   88 /**
   89  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
   90  *  @hw: pointer to the HW structure
   91  **/
   92 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
   93 {
   94         struct e1000_phy_info *phy = &hw->phy;
   95         s32 ret_val;
   96 
   97         DEBUGFUNC("e1000_init_phy_params_82571");
   98 
   99         if (hw->phy.media_type != e1000_media_type_copper) {
  100                 phy->type = e1000_phy_none;
  101                 return E1000_SUCCESS;
  102         }
  103 
  104         phy->addr                       = 1;
  105         phy->autoneg_mask               = AUTONEG_ADVERTISE_SPEED_DEFAULT;
  106         phy->reset_delay_us             = 100;
  107 
  108         phy->ops.check_reset_block      = e1000_check_reset_block_generic;
  109         phy->ops.reset                  = e1000_phy_hw_reset_generic;
  110         phy->ops.set_d0_lplu_state      = e1000_set_d0_lplu_state_82571;
  111         phy->ops.set_d3_lplu_state      = e1000_set_d3_lplu_state_generic;
  112         phy->ops.power_up               = e1000_power_up_phy_copper;
  113         phy->ops.power_down             = e1000_power_down_phy_copper_82571;
  114 
  115         switch (hw->mac.type) {
  116         case e1000_82571:
  117         case e1000_82572:
  118                 phy->type               = e1000_phy_igp_2;
  119                 phy->ops.get_cfg_done   = e1000_get_cfg_done_82571;
  120                 phy->ops.get_info       = e1000_get_phy_info_igp;
  121                 phy->ops.check_polarity = e1000_check_polarity_igp;
  122                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
  123                 phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
  124                 phy->ops.read_reg       = e1000_read_phy_reg_igp;
  125                 phy->ops.write_reg      = e1000_write_phy_reg_igp;
  126                 phy->ops.acquire        = e1000_get_hw_semaphore;
  127                 phy->ops.release        = e1000_put_hw_semaphore;
  128                 break;
  129         case e1000_82573:
  130                 phy->type               = e1000_phy_m88;
  131                 phy->ops.get_cfg_done   = e1000_get_cfg_done_generic;
  132                 phy->ops.get_info       = e1000_get_phy_info_m88;
  133                 phy->ops.check_polarity = e1000_check_polarity_m88;
  134                 phy->ops.commit         = e1000_phy_sw_reset_generic;
  135                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
  136                 phy->ops.get_cable_length = e1000_get_cable_length_m88;
  137                 phy->ops.read_reg       = e1000_read_phy_reg_m88;
  138                 phy->ops.write_reg      = e1000_write_phy_reg_m88;
  139                 phy->ops.acquire        = e1000_get_hw_semaphore;
  140                 phy->ops.release        = e1000_put_hw_semaphore;
  141                 break;
  142         case e1000_82574:
  143         case e1000_82583:
  144 
  145                 phy->type               = e1000_phy_bm;
  146                 phy->ops.get_cfg_done   = e1000_get_cfg_done_generic;
  147                 phy->ops.get_info       = e1000_get_phy_info_m88;
  148                 phy->ops.check_polarity = e1000_check_polarity_m88;
  149                 phy->ops.commit         = e1000_phy_sw_reset_generic;
  150                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
  151                 phy->ops.get_cable_length = e1000_get_cable_length_m88;
  152                 phy->ops.read_reg       = e1000_read_phy_reg_bm2;
  153                 phy->ops.write_reg      = e1000_write_phy_reg_bm2;
  154                 phy->ops.acquire        = e1000_get_hw_semaphore_82574;
  155                 phy->ops.release        = e1000_put_hw_semaphore_82574;
  156                 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82574;
  157                 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82574;
  158                 break;
  159         default:
  160                 return -E1000_ERR_PHY;
  161                 break;
  162         }
  163 
  164         /* This can only be done after all function pointers are setup. */
  165         ret_val = e1000_get_phy_id_82571(hw);
  166         if (ret_val) {
  167                 DEBUGOUT("Error getting PHY ID\n");
  168                 return ret_val;
  169         }
  170 
  171         /* Verify phy id */
  172         switch (hw->mac.type) {
  173         case e1000_82571:
  174         case e1000_82572:
  175                 if (phy->id != IGP01E1000_I_PHY_ID)
  176                         ret_val = -E1000_ERR_PHY;
  177                 break;
  178         case e1000_82573:
  179                 if (phy->id != M88E1111_I_PHY_ID)
  180                         ret_val = -E1000_ERR_PHY;
  181                 break;
  182         case e1000_82574:
  183         case e1000_82583:
  184                 if (phy->id != BME1000_E_PHY_ID_R2)
  185                         ret_val = -E1000_ERR_PHY;
  186                 break;
  187         default:
  188                 ret_val = -E1000_ERR_PHY;
  189                 break;
  190         }
  191 
  192         if (ret_val)
  193                 DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
  194 
  195         return ret_val;
  196 }
  197 
  198 /**
  199  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
  200  *  @hw: pointer to the HW structure
  201  **/
  202 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
  203 {
  204         struct e1000_nvm_info *nvm = &hw->nvm;
  205         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
  206         u16 size;
  207 
  208         DEBUGFUNC("e1000_init_nvm_params_82571");
  209 
  210         nvm->opcode_bits = 8;
  211         nvm->delay_usec = 1;
  212         switch (nvm->override) {
  213         case e1000_nvm_override_spi_large:
  214                 nvm->page_size = 32;
  215                 nvm->address_bits = 16;
  216                 break;
  217         case e1000_nvm_override_spi_small:
  218                 nvm->page_size = 8;
  219                 nvm->address_bits = 8;
  220                 break;
  221         default:
  222                 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
  223                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
  224                 break;
  225         }
  226 
  227         switch (hw->mac.type) {
  228         case e1000_82573:
  229         case e1000_82574:
  230         case e1000_82583:
  231                 if (((eecd >> 15) & 0x3) == 0x3) {
  232                         nvm->type = e1000_nvm_flash_hw;
  233                         nvm->word_size = 2048;
  234                         /* Autonomous Flash update bit must be cleared due
  235                          * to Flash update issue.
  236                          */
  237                         eecd &= ~E1000_EECD_AUPDEN;
  238                         E1000_WRITE_REG(hw, E1000_EECD, eecd);
  239                         break;
  240                 }
  241                 /* FALLTHROUGH */
  242         default:
  243                 nvm->type = e1000_nvm_eeprom_spi;
  244                 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
  245                              E1000_EECD_SIZE_EX_SHIFT);
  246                 /* Added to a constant, "size" becomes the left-shift value
  247                  * for setting word_size.
  248                  */
  249                 size += NVM_WORD_SIZE_BASE_SHIFT;
  250 
  251                 /* EEPROM access above 16k is unsupported */
  252                 if (size > 14)
  253                         size = 14;
  254                 nvm->word_size = 1 << size;
  255                 break;
  256         }
  257 
  258         /* Function Pointers */
  259         switch (hw->mac.type) {
  260         case e1000_82574:
  261         case e1000_82583:
  262                 nvm->ops.acquire = e1000_get_hw_semaphore_82574;
  263                 nvm->ops.release = e1000_put_hw_semaphore_82574;
  264                 break;
  265         default:
  266                 nvm->ops.acquire = e1000_acquire_nvm_82571;
  267                 nvm->ops.release = e1000_release_nvm_82571;
  268                 break;
  269         }
  270         nvm->ops.read = e1000_read_nvm_eerd;
  271         nvm->ops.update = e1000_update_nvm_checksum_82571;
  272         nvm->ops.validate = e1000_validate_nvm_checksum_82571;
  273         nvm->ops.valid_led_default = e1000_valid_led_default_82571;
  274         nvm->ops.write = e1000_write_nvm_82571;
  275 
  276         return E1000_SUCCESS;
  277 }
  278 
  279 /**
  280  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
  281  *  @hw: pointer to the HW structure
  282  **/
  283 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
  284 {
  285         struct e1000_mac_info *mac = &hw->mac;
  286         u32 swsm = 0;
  287         u32 swsm2 = 0;
  288         bool force_clear_smbi = false;
  289 
  290         DEBUGFUNC("e1000_init_mac_params_82571");
  291 
  292         /* Set media type and media-dependent function pointers */
  293         switch (hw->device_id) {
  294         case E1000_DEV_ID_82571EB_FIBER:
  295         case E1000_DEV_ID_82572EI_FIBER:
  296         case E1000_DEV_ID_82571EB_QUAD_FIBER:
  297                 hw->phy.media_type = e1000_media_type_fiber;
  298                 mac->ops.setup_physical_interface =
  299                         e1000_setup_fiber_serdes_link_82571;
  300                 mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
  301                 mac->ops.get_link_up_info =
  302                         e1000_get_speed_and_duplex_fiber_serdes_generic;
  303                 break;
  304         case E1000_DEV_ID_82571EB_SERDES:
  305         case E1000_DEV_ID_82571EB_SERDES_DUAL:
  306         case E1000_DEV_ID_82571EB_SERDES_QUAD:
  307         case E1000_DEV_ID_82572EI_SERDES:
  308                 hw->phy.media_type = e1000_media_type_internal_serdes;
  309                 mac->ops.setup_physical_interface =
  310                         e1000_setup_fiber_serdes_link_82571;
  311                 mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
  312                 mac->ops.get_link_up_info =
  313                         e1000_get_speed_and_duplex_fiber_serdes_generic;
  314                 break;
  315         default:
  316                 hw->phy.media_type = e1000_media_type_copper;
  317                 mac->ops.setup_physical_interface =
  318                         e1000_setup_copper_link_82571;
  319                 mac->ops.check_for_link = e1000_check_for_copper_link_generic;
  320                 mac->ops.get_link_up_info =
  321                         e1000_get_speed_and_duplex_copper_generic;
  322                 break;
  323         }
  324 
  325         /* Set mta register count */
  326         mac->mta_reg_count = 128;
  327         /* Set rar entry count */
  328         mac->rar_entry_count = E1000_RAR_ENTRIES;
  329         /* Set if part includes ASF firmware */
  330         mac->asf_firmware_present = true;
  331         /* Adaptive IFS supported */
  332         mac->adaptive_ifs = true;
  333 
  334         /* Function pointers */
  335 
  336         /* bus type/speed/width */
  337         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
  338         /* reset */
  339         mac->ops.reset_hw = e1000_reset_hw_82571;
  340         /* hw initialization */
  341         mac->ops.init_hw = e1000_init_hw_82571;
  342         /* link setup */
  343         mac->ops.setup_link = e1000_setup_link_82571;
  344         /* multicast address update */
  345         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
  346         /* writing VFTA */
  347         mac->ops.write_vfta = e1000_write_vfta_generic;
  348         /* clearing VFTA */
  349         mac->ops.clear_vfta = e1000_clear_vfta_82571;
  350         /* read mac address */
  351         mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
  352         /* ID LED init */
  353         mac->ops.id_led_init = e1000_id_led_init_generic;
  354         /* setup LED */
  355         mac->ops.setup_led = e1000_setup_led_generic;
  356         /* cleanup LED */
  357         mac->ops.cleanup_led = e1000_cleanup_led_generic;
  358         /* turn off LED */
  359         mac->ops.led_off = e1000_led_off_generic;
  360         /* clear hardware counters */
  361         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
  362 
  363         /* MAC-specific function pointers */
  364         switch (hw->mac.type) {
  365         case e1000_82573:
  366                 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
  367                 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
  368                 mac->ops.led_on = e1000_led_on_generic;
  369                 mac->ops.blink_led = e1000_blink_led_generic;
  370 
  371                 /* FWSM register */
  372                 mac->has_fwsm = true;
  373                 /* ARC supported; valid only if manageability features are
  374                  * enabled.
  375                  */
  376                 mac->arc_subsystem_valid = !!(E1000_READ_REG(hw, E1000_FWSM) &
  377                                               E1000_FWSM_MODE_MASK);
  378                 break;
  379         case e1000_82574:
  380         case e1000_82583:
  381                 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
  382                 mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
  383                 mac->ops.led_on = e1000_led_on_82574;
  384                 break;
  385         default:
  386                 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
  387                 mac->ops.led_on = e1000_led_on_generic;
  388                 mac->ops.blink_led = e1000_blink_led_generic;
  389 
  390                 /* FWSM register */
  391                 mac->has_fwsm = true;
  392                 break;
  393         }
  394 
  395         /* Ensure that the inter-port SWSM.SMBI lock bit is clear before
  396          * first NVM or PHY access. This should be done for single-port
  397          * devices, and for one port only on dual-port devices so that
  398          * for those devices we can still use the SMBI lock to synchronize
  399          * inter-port accesses to the PHY & NVM.
  400          */
  401         switch (hw->mac.type) {
  402         case e1000_82571:
  403         case e1000_82572:
  404                 swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
  405 
  406                 if (!(swsm2 & E1000_SWSM2_LOCK)) {
  407                         /* Only do this for the first interface on this card */
  408                         E1000_WRITE_REG(hw, E1000_SWSM2, swsm2 |
  409                                         E1000_SWSM2_LOCK);
  410                         force_clear_smbi = true;
  411                 } else {
  412                         force_clear_smbi = false;
  413                 }
  414                 break;
  415         default:
  416                 force_clear_smbi = true;
  417                 break;
  418         }
  419 
  420         if (force_clear_smbi) {
  421                 /* Make sure SWSM.SMBI is clear */
  422                 swsm = E1000_READ_REG(hw, E1000_SWSM);
  423                 if (swsm & E1000_SWSM_SMBI) {
  424                         /* This bit should not be set on a first interface, and
  425                          * indicates that the bootagent or EFI code has
  426                          * improperly left this bit enabled
  427                          */
  428                         DEBUGOUT("Please update your 82571 Bootagent\n");
  429                 }
  430                 E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
  431         }
  432 
  433         /* Initialze device specific counter of SMBI acquisition timeouts. */
  434          hw->dev_spec._82571.smb_counter = 0;
  435 
  436         return E1000_SUCCESS;
  437 }
  438 
  439 /**
  440  *  e1000_init_function_pointers_82571 - Init func ptrs.
  441  *  @hw: pointer to the HW structure
  442  *
  443  *  Called to initialize all function pointers and parameters.
  444  **/
  445 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
  446 {
  447         DEBUGFUNC("e1000_init_function_pointers_82571");
  448 
  449         hw->mac.ops.init_params = e1000_init_mac_params_82571;
  450         hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
  451         hw->phy.ops.init_params = e1000_init_phy_params_82571;
  452 }
  453 
  454 /**
  455  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
  456  *  @hw: pointer to the HW structure
  457  *
  458  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
  459  *  revision in the hardware structure.
  460  **/
  461 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
  462 {
  463         struct e1000_phy_info *phy = &hw->phy;
  464         s32 ret_val;
  465         u16 phy_id = 0;
  466 
  467         DEBUGFUNC("e1000_get_phy_id_82571");
  468 
  469         switch (hw->mac.type) {
  470         case e1000_82571:
  471         case e1000_82572:
  472                 /* The 82571 firmware may still be configuring the PHY.
  473                  * In this case, we cannot access the PHY until the
  474                  * configuration is done.  So we explicitly set the
  475                  * PHY ID.
  476                  */
  477                 phy->id = IGP01E1000_I_PHY_ID;
  478                 break;
  479         case e1000_82573:
  480                 return e1000_get_phy_id(hw);
  481                 break;
  482         case e1000_82574:
  483         case e1000_82583:
  484                 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
  485                 if (ret_val)
  486                         return ret_val;
  487 
  488                 phy->id = (u32)(phy_id << 16);
  489                 usec_delay(20);
  490                 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
  491                 if (ret_val)
  492                         return ret_val;
  493 
  494                 phy->id |= (u32)(phy_id);
  495                 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
  496                 break;
  497         default:
  498                 return -E1000_ERR_PHY;
  499                 break;
  500         }
  501 
  502         return E1000_SUCCESS;
  503 }
  504 
  505 /**
  506  *  e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
  507  *  @hw: pointer to the HW structure
  508  *
  509  *  Acquire the HW semaphore during reset.
  510  *
  511  **/
  512 static s32
  513 e1000_get_hw_semaphore_82574(struct e1000_hw *hw)
  514 {
  515         u32 extcnf_ctrl;
  516         s32 i = 0;
  517         /* XXX assert that mutex is held */
  518         DEBUGFUNC("e1000_get_hw_semaphore_82574");
  519 
  520         ASSERT_CTX_LOCK_HELD(hw);
  521         extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
  522         do {
  523                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
  524                 E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
  525                 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
  526 
  527                 if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
  528                         break;
  529 
  530                 msec_delay(2);
  531                 i++;
  532         } while (i < MDIO_OWNERSHIP_TIMEOUT);
  533 
  534         if (i == MDIO_OWNERSHIP_TIMEOUT) {
  535                 /* Release semaphores */
  536                 e1000_put_hw_semaphore_82574(hw);
  537                 DEBUGOUT("Driver can't access the PHY\n");
  538                 return -E1000_ERR_PHY;
  539         }
  540 
  541         return E1000_SUCCESS;
  542 }
  543 
  544 /**
  545  *  e1000_put_hw_semaphore_82574 - Release hardware semaphore
  546  *  @hw: pointer to the HW structure
  547  *
  548  *  Release hardware semaphore used during reset.
  549  *
  550  **/
  551 static void
  552 e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
  553 {
  554         u32 extcnf_ctrl;
  555 
  556         DEBUGFUNC("e1000_put_hw_semaphore_82574");
  557 
  558         extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
  559         extcnf_ctrl &= ~E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
  560         E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
  561 }
  562 
  563 /**
  564  *  e1000_set_d0_lplu_state_82574 - Set Low Power Linkup D0 state
  565  *  @hw: pointer to the HW structure
  566  *  @active: true to enable LPLU, false to disable
  567  *
  568  *  Sets the LPLU D0 state according to the active flag.
  569  *  LPLU will not be activated unless the
  570  *  device autonegotiation advertisement meets standards of
  571  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
  572  *  This is a function pointer entry point only called by
  573  *  PHY setup routines.
  574  **/
  575 static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
  576 {
  577         u32 data = E1000_READ_REG(hw, E1000_POEMB);
  578 
  579         DEBUGFUNC("e1000_set_d0_lplu_state_82574");
  580 
  581         if (active)
  582                 data |= E1000_PHY_CTRL_D0A_LPLU;
  583         else
  584                 data &= ~E1000_PHY_CTRL_D0A_LPLU;
  585 
  586         E1000_WRITE_REG(hw, E1000_POEMB, data);
  587         return E1000_SUCCESS;
  588 }
  589 
  590 /**
  591  *  e1000_set_d3_lplu_state_82574 - Sets low power link up state for D3
  592  *  @hw: pointer to the HW structure
  593  *  @active: boolean used to enable/disable lplu
  594  *
  595  *  The low power link up (lplu) state is set to the power management level D3
  596  *  when active is true, else clear lplu for D3. LPLU
  597  *  is used during Dx states where the power conservation is most important.
  598  *  During driver activity, SmartSpeed should be enabled so performance is
  599  *  maintained.
  600  **/
  601 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
  602 {
  603         u32 data = E1000_READ_REG(hw, E1000_POEMB);
  604 
  605         DEBUGFUNC("e1000_set_d3_lplu_state_82574");
  606 
  607         if (!active) {
  608                 data &= ~E1000_PHY_CTRL_NOND0A_LPLU;
  609         } else if ((hw->phy.autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
  610                    (hw->phy.autoneg_advertised == E1000_ALL_NOT_GIG) ||
  611                    (hw->phy.autoneg_advertised == E1000_ALL_10_SPEED)) {
  612                 data |= E1000_PHY_CTRL_NOND0A_LPLU;
  613         }
  614 
  615         E1000_WRITE_REG(hw, E1000_POEMB, data);
  616         return E1000_SUCCESS;
  617 }
  618 
  619 /**
  620  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
  621  *  @hw: pointer to the HW structure
  622  *
  623  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
  624  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
  625  *  for EEPROM access grant bit.  If the access grant bit is not set, release
  626  *  hardware semaphore.
  627  **/
  628 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
  629 {
  630         s32 ret_val;
  631 
  632         DEBUGFUNC("e1000_acquire_nvm_82571");
  633 
  634         ret_val = e1000_get_hw_semaphore(hw);
  635         if (ret_val)
  636                 return ret_val;
  637 
  638         switch (hw->mac.type) {
  639         case e1000_82573:
  640                 break;
  641         default:
  642                 ret_val = e1000_acquire_nvm_generic(hw);
  643                 break;
  644         }
  645 
  646         if (ret_val)
  647                 e1000_put_hw_semaphore(hw);
  648 
  649         return ret_val;
  650 }
  651 
  652 /**
  653  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
  654  *  @hw: pointer to the HW structure
  655  *
  656  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
  657  **/
  658 static void e1000_release_nvm_82571(struct e1000_hw *hw)
  659 {
  660         DEBUGFUNC("e1000_release_nvm_82571");
  661 
  662         e1000_release_nvm_generic(hw);
  663         e1000_put_hw_semaphore(hw);
  664 }
  665 
  666 /**
  667  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
  668  *  @hw: pointer to the HW structure
  669  *  @offset: offset within the EEPROM to be written to
  670  *  @words: number of words to write
  671  *  @data: 16 bit word(s) to be written to the EEPROM
  672  *
  673  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
  674  *
  675  *  If e1000_update_nvm_checksum is not called after this function, the
  676  *  EEPROM will most likely contain an invalid checksum.
  677  **/
  678 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
  679                                  u16 *data)
  680 {
  681         s32 ret_val;
  682 
  683         DEBUGFUNC("e1000_write_nvm_82571");
  684 
  685         switch (hw->mac.type) {
  686         case e1000_82573:
  687         case e1000_82574:
  688         case e1000_82583:
  689                 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
  690                 break;
  691         case e1000_82571:
  692         case e1000_82572:
  693                 ret_val = e1000_write_nvm_spi(hw, offset, words, data);
  694                 break;
  695         default:
  696                 ret_val = -E1000_ERR_NVM;
  697                 break;
  698         }
  699 
  700         return ret_val;
  701 }
  702 
  703 /**
  704  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
  705  *  @hw: pointer to the HW structure
  706  *
  707  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
  708  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
  709  *  value to the EEPROM.
  710  **/
  711 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
  712 {
  713         u32 eecd;
  714         s32 ret_val;
  715         u16 i;
  716 
  717         DEBUGFUNC("e1000_update_nvm_checksum_82571");
  718 
  719         ret_val = e1000_update_nvm_checksum_generic(hw);
  720         if (ret_val)
  721                 return ret_val;
  722 
  723         /* If our nvm is an EEPROM, then we're done
  724          * otherwise, commit the checksum to the flash NVM.
  725          */
  726         if (hw->nvm.type != e1000_nvm_flash_hw)
  727                 return E1000_SUCCESS;
  728 
  729         /* Check for pending operations. */
  730         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
  731                 msec_delay(1);
  732                 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD))
  733                         break;
  734         }
  735 
  736         if (i == E1000_FLASH_UPDATES)
  737                 return -E1000_ERR_NVM;
  738 
  739         /* Reset the firmware if using STM opcode. */
  740         if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
  741                 /* The enabling of and the actual reset must be done
  742                  * in two write cycles.
  743                  */
  744                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
  745                 E1000_WRITE_FLUSH(hw);
  746                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
  747         }
  748 
  749         /* Commit the write to flash */
  750         eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
  751         E1000_WRITE_REG(hw, E1000_EECD, eecd);
  752 
  753         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
  754                 msec_delay(1);
  755                 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD))
  756                         break;
  757         }
  758 
  759         if (i == E1000_FLASH_UPDATES)
  760                 return -E1000_ERR_NVM;
  761 
  762         return E1000_SUCCESS;
  763 }
  764 
  765 /**
  766  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
  767  *  @hw: pointer to the HW structure
  768  *
  769  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
  770  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
  771  **/
  772 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
  773 {
  774         DEBUGFUNC("e1000_validate_nvm_checksum_82571");
  775 
  776         if (hw->nvm.type == e1000_nvm_flash_hw)
  777                 e1000_fix_nvm_checksum_82571(hw);
  778 
  779         return e1000_validate_nvm_checksum_generic(hw);
  780 }
  781 
  782 /**
  783  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
  784  *  @hw: pointer to the HW structure
  785  *  @offset: offset within the EEPROM to be written to
  786  *  @words: number of words to write
  787  *  @data: 16 bit word(s) to be written to the EEPROM
  788  *
  789  *  After checking for invalid values, poll the EEPROM to ensure the previous
  790  *  command has completed before trying to write the next word.  After write
  791  *  poll for completion.
  792  *
  793  *  If e1000_update_nvm_checksum is not called after this function, the
  794  *  EEPROM will most likely contain an invalid checksum.
  795  **/
  796 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
  797                                       u16 words, u16 *data)
  798 {
  799         struct e1000_nvm_info *nvm = &hw->nvm;
  800         u32 i, eewr = 0;
  801         s32 ret_val = E1000_SUCCESS;
  802 
  803         DEBUGFUNC("e1000_write_nvm_eewr_82571");
  804 
  805         /* A check for invalid values:  offset too large, too many words,
  806          * and not enough words.
  807          */
  808         if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
  809             (words == 0)) {
  810                 DEBUGOUT("nvm parameter(s) out of bounds\n");
  811                 return -E1000_ERR_NVM;
  812         }
  813 
  814         for (i = 0; i < words; i++) {
  815                 eewr = ((data[i] << E1000_NVM_RW_REG_DATA) |
  816                         ((offset + i) << E1000_NVM_RW_ADDR_SHIFT) |
  817                         E1000_NVM_RW_REG_START);
  818 
  819                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
  820                 if (ret_val)
  821                         break;
  822 
  823                 E1000_WRITE_REG(hw, E1000_EEWR, eewr);
  824 
  825                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
  826                 if (ret_val)
  827                         break;
  828         }
  829 
  830         return ret_val;
  831 }
  832 
  833 /**
  834  *  e1000_get_cfg_done_82571 - Poll for configuration done
  835  *  @hw: pointer to the HW structure
  836  *
  837  *  Reads the management control register for the config done bit to be set.
  838  **/
  839 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
  840 {
  841         s32 timeout = PHY_CFG_TIMEOUT;
  842 
  843         DEBUGFUNC("e1000_get_cfg_done_82571");
  844 
  845         while (timeout) {
  846                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
  847                     E1000_NVM_CFG_DONE_PORT_0)
  848                         break;
  849                 msec_delay(1);
  850                 timeout--;
  851         }
  852         if (!timeout) {
  853                 DEBUGOUT("MNG configuration cycle has not completed.\n");
  854                 return -E1000_ERR_RESET;
  855         }
  856 
  857         return E1000_SUCCESS;
  858 }
  859 
  860 /**
  861  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
  862  *  @hw: pointer to the HW structure
  863  *  @active: true to enable LPLU, false to disable
  864  *
  865  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
  866  *  this function also disables smart speed and vice versa.  LPLU will not be
  867  *  activated unless the device autonegotiation advertisement meets standards
  868  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
  869  *  pointer entry point only called by PHY setup routines.
  870  **/
  871 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
  872 {
  873         struct e1000_phy_info *phy = &hw->phy;
  874         s32 ret_val;
  875         u16 data;
  876 
  877         DEBUGFUNC("e1000_set_d0_lplu_state_82571");
  878 
  879         if (!(phy->ops.read_reg))
  880                 return E1000_SUCCESS;
  881 
  882         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
  883         if (ret_val)
  884                 return ret_val;
  885 
  886         if (active) {
  887                 data |= IGP02E1000_PM_D0_LPLU;
  888                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
  889                                              data);
  890                 if (ret_val)
  891                         return ret_val;
  892 
  893                 /* When LPLU is enabled, we should disable SmartSpeed */
  894                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
  895                                             &data);
  896                 if (ret_val)
  897                         return ret_val;
  898                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
  899                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
  900                                              data);
  901                 if (ret_val)
  902                         return ret_val;
  903         } else {
  904                 data &= ~IGP02E1000_PM_D0_LPLU;
  905                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
  906                                              data);
  907                 /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used
  908                  * during Dx states where the power conservation is most
  909                  * important.  During driver activity we should enable
  910                  * SmartSpeed, so performance is maintained.
  911                  */
  912                 if (phy->smart_speed == e1000_smart_speed_on) {
  913                         ret_val = phy->ops.read_reg(hw,
  914                                                     IGP01E1000_PHY_PORT_CONFIG,
  915                                                     &data);
  916                         if (ret_val)
  917                                 return ret_val;
  918 
  919                         data |= IGP01E1000_PSCFR_SMART_SPEED;
  920                         ret_val = phy->ops.write_reg(hw,
  921                                                      IGP01E1000_PHY_PORT_CONFIG,
  922                                                      data);
  923                         if (ret_val)
  924                                 return ret_val;
  925                 } else if (phy->smart_speed == e1000_smart_speed_off) {
  926                         ret_val = phy->ops.read_reg(hw,
  927                                                     IGP01E1000_PHY_PORT_CONFIG,
  928                                                     &data);
  929                         if (ret_val)
  930                                 return ret_val;
  931 
  932                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
  933                         ret_val = phy->ops.write_reg(hw,
  934                                                      IGP01E1000_PHY_PORT_CONFIG,
  935                                                      data);
  936                         if (ret_val)
  937                                 return ret_val;
  938                 }
  939         }
  940 
  941         return E1000_SUCCESS;
  942 }
  943 
  944 /**
  945  *  e1000_reset_hw_82571 - Reset hardware
  946  *  @hw: pointer to the HW structure
  947  *
  948  *  This resets the hardware into a known state.
  949  **/
  950 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
  951 {
  952         u32 ctrl, ctrl_ext, eecd, tctl;
  953         s32 ret_val;
  954 
  955         DEBUGFUNC("e1000_reset_hw_82571");
  956 
  957         /* Prevent the PCI-E bus from sticking if there is no TLP connection
  958          * on the last TLP read/write transaction when MAC is reset.
  959          */
  960         ret_val = e1000_disable_pcie_master_generic(hw);
  961         if (ret_val)
  962                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
  963 
  964         DEBUGOUT("Masking off all interrupts\n");
  965         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
  966 
  967         E1000_WRITE_REG(hw, E1000_RCTL, 0);
  968         tctl = E1000_READ_REG(hw, E1000_TCTL);
  969         tctl &= ~E1000_TCTL_EN;
  970         E1000_WRITE_REG(hw, E1000_TCTL, tctl);
  971         E1000_WRITE_FLUSH(hw);
  972 
  973         msec_delay(10);
  974 
  975         /* Must acquire the MDIO ownership before MAC reset.
  976          * Ownership defaults to firmware after a reset.
  977          */
  978         switch (hw->mac.type) {
  979         case e1000_82573:
  980         case e1000_82574:
  981         case e1000_82583:
  982                 ret_val = e1000_get_hw_semaphore_82574(hw);
  983                 break;
  984         default:
  985                 break;
  986         }
  987 
  988         ctrl = E1000_READ_REG(hw, E1000_CTRL);
  989 
  990         DEBUGOUT("Issuing a global reset to MAC\n");
  991         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
  992 
  993         /* Must release MDIO ownership and mutex after MAC reset. */
  994         switch (hw->mac.type) {
  995         case e1000_82573:
  996         case e1000_82574:
  997         case e1000_82583:
  998                 /* Release mutex only if the hw semaphore is acquired */
  999                 if (!ret_val)
 1000                         e1000_put_hw_semaphore_82574(hw);
 1001                 break;
 1002         default:
 1003                 /* we didn't get the semaphore no need to put it */
 1004                 break;
 1005         }
 1006 
 1007         if (hw->nvm.type == e1000_nvm_flash_hw) {
 1008                 usec_delay(10);
 1009                 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1010                 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
 1011                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 1012                 E1000_WRITE_FLUSH(hw);
 1013         }
 1014 
 1015         ret_val = e1000_get_auto_rd_done_generic(hw);
 1016         if (ret_val)
 1017                 /* We don't want to continue accessing MAC registers. */
 1018                 return ret_val;
 1019 
 1020         /* Phy configuration from NVM just starts after EECD_AUTO_RD is set.
 1021          * Need to wait for Phy configuration completion before accessing
 1022          * NVM and Phy.
 1023          */
 1024 
 1025         switch (hw->mac.type) {
 1026         case e1000_82571:
 1027         case e1000_82572:
 1028                 /* REQ and GNT bits need to be cleared when using AUTO_RD
 1029                  * to access the EEPROM.
 1030                  */
 1031                 eecd = E1000_READ_REG(hw, E1000_EECD);
 1032                 eecd &= ~(E1000_EECD_REQ | E1000_EECD_GNT);
 1033                 E1000_WRITE_REG(hw, E1000_EECD, eecd);
 1034                 break;
 1035         case e1000_82573:
 1036         case e1000_82574:
 1037         case e1000_82583:
 1038                 msec_delay(25);
 1039                 break;
 1040         default:
 1041                 break;
 1042         }
 1043 
 1044         /* Clear any pending interrupt events. */
 1045         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 1046         E1000_READ_REG(hw, E1000_ICR);
 1047 
 1048         if (hw->mac.type == e1000_82571) {
 1049                 /* Install any alternate MAC address into RAR0 */
 1050                 ret_val = e1000_check_alt_mac_addr_generic(hw);
 1051                 if (ret_val)
 1052                         return ret_val;
 1053 
 1054                 e1000_set_laa_state_82571(hw, true);
 1055         }
 1056 
 1057         /* Reinitialize the 82571 serdes link state machine */
 1058         if (hw->phy.media_type == e1000_media_type_internal_serdes)
 1059                 hw->mac.serdes_link_state = e1000_serdes_link_down;
 1060 
 1061         return E1000_SUCCESS;
 1062 }
 1063 
 1064 /**
 1065  *  e1000_init_hw_82571 - Initialize hardware
 1066  *  @hw: pointer to the HW structure
 1067  *
 1068  *  This inits the hardware readying it for operation.
 1069  **/
 1070 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 1071 {
 1072         struct e1000_mac_info *mac = &hw->mac;
 1073         u32 reg_data;
 1074         s32 ret_val;
 1075         u16 i, rar_count = mac->rar_entry_count;
 1076 
 1077         DEBUGFUNC("e1000_init_hw_82571");
 1078 
 1079         e1000_initialize_hw_bits_82571(hw);
 1080 
 1081         /* Initialize identification LED */
 1082         ret_val = mac->ops.id_led_init(hw);
 1083         /* An error is not fatal and we should not stop init due to this */
 1084         if (ret_val)
 1085                 DEBUGOUT("Error initializing identification LED\n");
 1086 
 1087         /* Disabling VLAN filtering */
 1088         DEBUGOUT("Initializing the IEEE VLAN\n");
 1089         mac->ops.clear_vfta(hw);
 1090 
 1091         /* Setup the receive address.
 1092          * If, however, a locally administered address was assigned to the
 1093          * 82571, we must reserve a RAR for it to work around an issue where
 1094          * resetting one port will reload the MAC on the other port.
 1095          */
 1096         if (e1000_get_laa_state_82571(hw))
 1097                 rar_count--;
 1098         e1000_init_rx_addrs_generic(hw, rar_count);
 1099 
 1100         /* Zero out the Multicast HASH table */
 1101         DEBUGOUT("Zeroing the MTA\n");
 1102         for (i = 0; i < mac->mta_reg_count; i++)
 1103                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
 1104 
 1105         /* Setup link and flow control */
 1106         ret_val = mac->ops.setup_link(hw);
 1107 
 1108         /* Set the transmit descriptor write-back policy */
 1109         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
 1110         reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
 1111                     E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC);
 1112         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
 1113 
 1114         /* ...for both queues. */
 1115         switch (mac->type) {
 1116         case e1000_82573:
 1117                 e1000_enable_tx_pkt_filtering_generic(hw);
 1118                 /* FALLTHROUGH */
 1119         case e1000_82574:
 1120         case e1000_82583:
 1121                 reg_data = E1000_READ_REG(hw, E1000_GCR);
 1122                 reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
 1123                 E1000_WRITE_REG(hw, E1000_GCR, reg_data);
 1124                 break;
 1125         default:
 1126                 reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
 1127                 reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
 1128                             E1000_TXDCTL_FULL_TX_DESC_WB |
 1129                             E1000_TXDCTL_COUNT_DESC);
 1130                 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
 1131                 break;
 1132         }
 1133 
 1134         /* Clear all of the statistics registers (clear on read).  It is
 1135          * important that we do this after we have tried to establish link
 1136          * because the symbol error count will increment wildly if there
 1137          * is no link.
 1138          */
 1139         e1000_clear_hw_cntrs_82571(hw);
 1140 
 1141         return ret_val;
 1142 }
 1143 
 1144 /**
 1145  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
 1146  *  @hw: pointer to the HW structure
 1147  *
 1148  *  Initializes required hardware-dependent bits needed for normal operation.
 1149  **/
 1150 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 1151 {
 1152         u32 reg;
 1153 
 1154         DEBUGFUNC("e1000_initialize_hw_bits_82571");
 1155 
 1156         /* Transmit Descriptor Control 0 */
 1157         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
 1158         reg |= (1 << 22);
 1159         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
 1160 
 1161         /* Transmit Descriptor Control 1 */
 1162         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
 1163         reg |= (1 << 22);
 1164         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
 1165 
 1166         /* Transmit Arbitration Control 0 */
 1167         reg = E1000_READ_REG(hw, E1000_TARC(0));
 1168         reg &= ~(0xF << 27); /* 30:27 */
 1169         switch (hw->mac.type) {
 1170         case e1000_82571:
 1171         case e1000_82572:
 1172                 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
 1173                 break;
 1174         case e1000_82574:
 1175         case e1000_82583:
 1176                 reg |= (1 << 26);
 1177                 break;
 1178         default:
 1179                 break;
 1180         }
 1181         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
 1182 
 1183         /* Transmit Arbitration Control 1 */
 1184         reg = E1000_READ_REG(hw, E1000_TARC(1));
 1185         switch (hw->mac.type) {
 1186         case e1000_82571:
 1187         case e1000_82572:
 1188                 reg &= ~((1 << 29) | (1 << 30));
 1189                 reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
 1190                 if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
 1191                         reg &= ~(1 << 28);
 1192                 else
 1193                         reg |= (1 << 28);
 1194                 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
 1195                 break;
 1196         default:
 1197                 break;
 1198         }
 1199 
 1200         /* Device Control */
 1201         switch (hw->mac.type) {
 1202         case e1000_82573:
 1203         case e1000_82574:
 1204         case e1000_82583:
 1205                 reg = E1000_READ_REG(hw, E1000_CTRL);
 1206                 reg &= ~(1 << 29);
 1207                 E1000_WRITE_REG(hw, E1000_CTRL, reg);
 1208                 break;
 1209         default:
 1210                 break;
 1211         }
 1212 
 1213         /* Extended Device Control */
 1214         switch (hw->mac.type) {
 1215         case e1000_82573:
 1216         case e1000_82574:
 1217         case e1000_82583:
 1218                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1219                 reg &= ~(1 << 23);
 1220                 reg |= (1 << 22);
 1221                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 1222                 break;
 1223         default:
 1224                 break;
 1225         }
 1226 
 1227         if (hw->mac.type == e1000_82571) {
 1228                 reg = E1000_READ_REG(hw, E1000_PBA_ECC);
 1229                 reg |= E1000_PBA_ECC_CORR_EN;
 1230                 E1000_WRITE_REG(hw, E1000_PBA_ECC, reg);
 1231         }
 1232 
 1233         /* Workaround for hardware errata.
 1234          * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
 1235          */
 1236         if ((hw->mac.type == e1000_82571) ||
 1237            (hw->mac.type == e1000_82572)) {
 1238                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1239                 reg &= ~E1000_CTRL_EXT_DMA_DYN_CLK_EN;
 1240                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 1241         }
 1242 
 1243         /* Disable IPv6 extension header parsing because some malformed
 1244          * IPv6 headers can hang the Rx.
 1245          */
 1246         if (hw->mac.type <= e1000_82573) {
 1247                 reg = E1000_READ_REG(hw, E1000_RFCTL);
 1248                 reg |= (E1000_RFCTL_IPV6_EX_DIS | E1000_RFCTL_NEW_IPV6_EXT_DIS);
 1249                 E1000_WRITE_REG(hw, E1000_RFCTL, reg);
 1250         }
 1251 
 1252         /* PCI-Ex Control Registers */
 1253         switch (hw->mac.type) {
 1254         case e1000_82574:
 1255         case e1000_82583:
 1256                 reg = E1000_READ_REG(hw, E1000_GCR);
 1257                 reg |= (1 << 22);
 1258                 E1000_WRITE_REG(hw, E1000_GCR, reg);
 1259 
 1260                 /* Workaround for hardware errata.
 1261                  * apply workaround for hardware errata documented in errata
 1262                  * docs Fixes issue where some error prone or unreliable PCIe
 1263                  * completions are occurring, particularly with ASPM enabled.
 1264                  * Without fix, issue can cause Tx timeouts.
 1265                  */
 1266                 reg = E1000_READ_REG(hw, E1000_GCR2);
 1267                 reg |= 1;
 1268                 E1000_WRITE_REG(hw, E1000_GCR2, reg);
 1269                 break;
 1270         default:
 1271                 break;
 1272         }
 1273 
 1274         return;
 1275 }
 1276 
 1277 /**
 1278  *  e1000_clear_vfta_82571 - Clear VLAN filter table
 1279  *  @hw: pointer to the HW structure
 1280  *
 1281  *  Clears the register array which contains the VLAN filter table by
 1282  *  setting all the values to 0.
 1283  **/
 1284 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
 1285 {
 1286         u32 offset;
 1287         u32 vfta_value = 0;
 1288         u32 vfta_offset = 0;
 1289         u32 vfta_bit_in_reg = 0;
 1290 
 1291         DEBUGFUNC("e1000_clear_vfta_82571");
 1292 
 1293         switch (hw->mac.type) {
 1294         case e1000_82573:
 1295         case e1000_82574:
 1296         case e1000_82583:
 1297                 if (hw->mng_cookie.vlan_id != 0) {
 1298                         /* The VFTA is a 4096b bit-field, each identifying
 1299                          * a single VLAN ID.  The following operations
 1300                          * determine which 32b entry (i.e. offset) into the
 1301                          * array we want to set the VLAN ID (i.e. bit) of
 1302                          * the manageability unit.
 1303                          */
 1304                         vfta_offset = (hw->mng_cookie.vlan_id >>
 1305                                        E1000_VFTA_ENTRY_SHIFT) &
 1306                             E1000_VFTA_ENTRY_MASK;
 1307                         vfta_bit_in_reg =
 1308                             1 << (hw->mng_cookie.vlan_id &
 1309                                   E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
 1310                 }
 1311                 break;
 1312         default:
 1313                 break;
 1314         }
 1315         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
 1316                 /* If the offset we want to clear is the same offset of the
 1317                  * manageability VLAN ID, then clear all bits except that of
 1318                  * the manageability unit.
 1319                  */
 1320                 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
 1321                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
 1322                 E1000_WRITE_FLUSH(hw);
 1323         }
 1324 }
 1325 
 1326 /**
 1327  *  e1000_check_mng_mode_82574 - Check manageability is enabled
 1328  *  @hw: pointer to the HW structure
 1329  *
 1330  *  Reads the NVM Initialization Control Word 2 and returns true
 1331  *  (>0) if any manageability is enabled, else false (0).
 1332  **/
 1333 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
 1334 {
 1335         u16 data;
 1336         s32 ret_val;
 1337 
 1338         DEBUGFUNC("e1000_check_mng_mode_82574");
 1339 
 1340         ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
 1341         if (ret_val)
 1342                 return false;
 1343 
 1344         return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
 1345 }
 1346 
 1347 /**
 1348  *  e1000_led_on_82574 - Turn LED on
 1349  *  @hw: pointer to the HW structure
 1350  *
 1351  *  Turn LED on.
 1352  **/
 1353 static s32 e1000_led_on_82574(struct e1000_hw *hw)
 1354 {
 1355         u32 ctrl;
 1356         u32 i;
 1357 
 1358         DEBUGFUNC("e1000_led_on_82574");
 1359 
 1360         ctrl = hw->mac.ledctl_mode2;
 1361         if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
 1362                 /* If no link, then turn LED on by setting the invert bit
 1363                  * for each LED that's "on" (0x0E) in ledctl_mode2.
 1364                  */
 1365                 for (i = 0; i < 4; i++)
 1366                         if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
 1367                             E1000_LEDCTL_MODE_LED_ON)
 1368                                 ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
 1369         }
 1370         E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
 1371 
 1372         return E1000_SUCCESS;
 1373 }
 1374 
 1375 /**
 1376  *  e1000_check_phy_82574 - check 82574 phy hung state
 1377  *  @hw: pointer to the HW structure
 1378  *
 1379  *  Returns whether phy is hung or not
 1380  **/
 1381 bool e1000_check_phy_82574(struct e1000_hw *hw)
 1382 {
 1383         u16 status_1kbt = 0;
 1384         u16 receive_errors = 0;
 1385         s32 ret_val;
 1386 
 1387         DEBUGFUNC("e1000_check_phy_82574");
 1388 
 1389         /* Read PHY Receive Error counter first, if its is max - all F's then
 1390          * read the Base1000T status register If both are max then PHY is hung.
 1391          */
 1392         ret_val = hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER,
 1393                                        &receive_errors);
 1394         if (ret_val)
 1395                 return false;
 1396         if (receive_errors == E1000_RECEIVE_ERROR_MAX) {
 1397                 ret_val = hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS,
 1398                                                &status_1kbt);
 1399                 if (ret_val)
 1400                         return false;
 1401                 if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) ==
 1402                     E1000_IDLE_ERROR_COUNT_MASK)
 1403                         return true;
 1404         }
 1405 
 1406         return false;
 1407 }
 1408 
 1409 
 1410 /**
 1411  *  e1000_setup_link_82571 - Setup flow control and link settings
 1412  *  @hw: pointer to the HW structure
 1413  *
 1414  *  Determines which flow control settings to use, then configures flow
 1415  *  control.  Calls the appropriate media-specific link configuration
 1416  *  function.  Assuming the adapter has a valid link partner, a valid link
 1417  *  should be established.  Assumes the hardware has previously been reset
 1418  *  and the transmitter and receiver are not enabled.
 1419  **/
 1420 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
 1421 {
 1422         DEBUGFUNC("e1000_setup_link_82571");
 1423 
 1424         /* 82573 does not have a word in the NVM to determine
 1425          * the default flow control setting, so we explicitly
 1426          * set it to full.
 1427          */
 1428         switch (hw->mac.type) {
 1429         case e1000_82573:
 1430         case e1000_82574:
 1431         case e1000_82583:
 1432                 if (hw->fc.requested_mode == e1000_fc_default)
 1433                         hw->fc.requested_mode = e1000_fc_full;
 1434                 break;
 1435         default:
 1436                 break;
 1437         }
 1438 
 1439         return e1000_setup_link_generic(hw);
 1440 }
 1441 
 1442 /**
 1443  *  e1000_setup_copper_link_82571 - Configure copper link settings
 1444  *  @hw: pointer to the HW structure
 1445  *
 1446  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
 1447  *  for link, once link is established calls to configure collision distance
 1448  *  and flow control are called.
 1449  **/
 1450 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
 1451 {
 1452         u32 ctrl;
 1453         s32 ret_val;
 1454 
 1455         DEBUGFUNC("e1000_setup_copper_link_82571");
 1456 
 1457         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 1458         ctrl |= E1000_CTRL_SLU;
 1459         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 1460         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 1461 
 1462         switch (hw->phy.type) {
 1463         case e1000_phy_m88:
 1464         case e1000_phy_bm:
 1465                 ret_val = e1000_copper_link_setup_m88(hw);
 1466                 break;
 1467         case e1000_phy_igp_2:
 1468                 ret_val = e1000_copper_link_setup_igp(hw);
 1469                 break;
 1470         default:
 1471                 return -E1000_ERR_PHY;
 1472                 break;
 1473         }
 1474 
 1475         if (ret_val)
 1476                 return ret_val;
 1477 
 1478         return e1000_setup_copper_link_generic(hw);
 1479 }
 1480 
 1481 /**
 1482  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
 1483  *  @hw: pointer to the HW structure
 1484  *
 1485  *  Configures collision distance and flow control for fiber and serdes links.
 1486  *  Upon successful setup, poll for link.
 1487  **/
 1488 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
 1489 {
 1490         DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
 1491 
 1492         switch (hw->mac.type) {
 1493         case e1000_82571:
 1494         case e1000_82572:
 1495                 /* If SerDes loopback mode is entered, there is no form
 1496                  * of reset to take the adapter out of that mode.  So we
 1497                  * have to explicitly take the adapter out of loopback
 1498                  * mode.  This prevents drivers from twiddling their thumbs
 1499                  * if another tool failed to take it out of loopback mode.
 1500                  */
 1501                 E1000_WRITE_REG(hw, E1000_SCTL,
 1502                                 E1000_SCTL_DISABLE_SERDES_LOOPBACK);
 1503                 break;
 1504         default:
 1505                 break;
 1506         }
 1507 
 1508         return e1000_setup_fiber_serdes_link_generic(hw);
 1509 }
 1510 
 1511 /**
 1512  *  e1000_check_for_serdes_link_82571 - Check for link (Serdes)
 1513  *  @hw: pointer to the HW structure
 1514  *
 1515  *  Reports the link state as up or down.
 1516  *
 1517  *  If autonegotiation is supported by the link partner, the link state is
 1518  *  determined by the result of autonegotiation. This is the most likely case.
 1519  *  If autonegotiation is not supported by the link partner, and the link
 1520  *  has a valid signal, force the link up.
 1521  *
 1522  *  The link state is represented internally here by 4 states:
 1523  *
 1524  *  1) down
 1525  *  2) autoneg_progress
 1526  *  3) autoneg_complete (the link successfully autonegotiated)
 1527  *  4) forced_up (the link has been forced up, it did not autonegotiate)
 1528  *
 1529  **/
 1530 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 1531 {
 1532         struct e1000_mac_info *mac = &hw->mac;
 1533         u32 rxcw;
 1534         u32 ctrl;
 1535         u32 status;
 1536         u32 txcw;
 1537         u32 i;
 1538         s32 ret_val = E1000_SUCCESS;
 1539 
 1540         DEBUGFUNC("e1000_check_for_serdes_link_82571");
 1541 
 1542         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 1543         status = E1000_READ_REG(hw, E1000_STATUS);
 1544         E1000_READ_REG(hw, E1000_RXCW);
 1545         /* SYNCH bit and IV bit are sticky */
 1546         usec_delay(10);
 1547         rxcw = E1000_READ_REG(hw, E1000_RXCW);
 1548 
 1549         if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
 1550                 /* Receiver is synchronized with no invalid bits.  */
 1551                 switch (mac->serdes_link_state) {
 1552                 case e1000_serdes_link_autoneg_complete:
 1553                         if (!(status & E1000_STATUS_LU)) {
 1554                                 /* We have lost link, retry autoneg before
 1555                                  * reporting link failure
 1556                                  */
 1557                                 mac->serdes_link_state =
 1558                                     e1000_serdes_link_autoneg_progress;
 1559                                 mac->serdes_has_link = false;
 1560                                 DEBUGOUT("AN_UP     -> AN_PROG\n");
 1561                         } else {
 1562                                 mac->serdes_has_link = true;
 1563                         }
 1564                         break;
 1565 
 1566                 case e1000_serdes_link_forced_up:
 1567                         /* If we are receiving /C/ ordered sets, re-enable
 1568                          * auto-negotiation in the TXCW register and disable
 1569                          * forced link in the Device Control register in an
 1570                          * attempt to auto-negotiate with our link partner.
 1571                          */
 1572                         if (rxcw & E1000_RXCW_C) {
 1573                                 /* Enable autoneg, and unforce link up */
 1574                                 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
 1575                                 E1000_WRITE_REG(hw, E1000_CTRL,
 1576                                     (ctrl & ~E1000_CTRL_SLU));
 1577                                 mac->serdes_link_state =
 1578                                     e1000_serdes_link_autoneg_progress;
 1579                                 mac->serdes_has_link = false;
 1580                                 DEBUGOUT("FORCED_UP -> AN_PROG\n");
 1581                         } else {
 1582                                 mac->serdes_has_link = true;
 1583                         }
 1584                         break;
 1585 
 1586                 case e1000_serdes_link_autoneg_progress:
 1587                         if (rxcw & E1000_RXCW_C) {
 1588                                 /* We received /C/ ordered sets, meaning the
 1589                                  * link partner has autonegotiated, and we can
 1590                                  * trust the Link Up (LU) status bit.
 1591                                  */
 1592                                 if (status & E1000_STATUS_LU) {
 1593                                         mac->serdes_link_state =
 1594                                             e1000_serdes_link_autoneg_complete;
 1595                                         DEBUGOUT("AN_PROG   -> AN_UP\n");
 1596                                         mac->serdes_has_link = true;
 1597                                 } else {
 1598                                         /* Autoneg completed, but failed. */
 1599                                         mac->serdes_link_state =
 1600                                             e1000_serdes_link_down;
 1601                                         DEBUGOUT("AN_PROG   -> DOWN\n");
 1602                                 }
 1603                         } else {
 1604                                 /* The link partner did not autoneg.
 1605                                  * Force link up and full duplex, and change
 1606                                  * state to forced.
 1607                                  */
 1608                                 E1000_WRITE_REG(hw, E1000_TXCW,
 1609                                 (mac->txcw & ~E1000_TXCW_ANE));
 1610                                 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
 1611                                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 1612 
 1613                                 /* Configure Flow Control after link up. */
 1614                                 ret_val =
 1615                                     e1000_config_fc_after_link_up_generic(hw);
 1616                                 if (ret_val) {
 1617                                         DEBUGOUT("Error config flow control\n");
 1618                                         break;
 1619                                 }
 1620                                 mac->serdes_link_state =
 1621                                                 e1000_serdes_link_forced_up;
 1622                                 mac->serdes_has_link = true;
 1623                                 DEBUGOUT("AN_PROG   -> FORCED_UP\n");
 1624                         }
 1625                         break;
 1626 
 1627                 case e1000_serdes_link_down:
 1628                 default:
 1629                         /* The link was down but the receiver has now gained
 1630                          * valid sync, so lets see if we can bring the link
 1631                          * up.
 1632                          */
 1633                         E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
 1634                         E1000_WRITE_REG(hw, E1000_CTRL, (ctrl &
 1635                                         ~E1000_CTRL_SLU));
 1636                         mac->serdes_link_state =
 1637                                         e1000_serdes_link_autoneg_progress;
 1638                         mac->serdes_has_link = false;
 1639                         DEBUGOUT("DOWN      -> AN_PROG\n");
 1640                         break;
 1641                 }
 1642         } else {
 1643                 if (!(rxcw & E1000_RXCW_SYNCH)) {
 1644                         mac->serdes_has_link = false;
 1645                         mac->serdes_link_state = e1000_serdes_link_down;
 1646                         DEBUGOUT("ANYSTATE  -> DOWN\n");
 1647                 } else {
 1648                         /* Check several times, if SYNCH bit and CONFIG
 1649                          * bit both are consistently 1 then simply ignore
 1650                          * the IV bit and restart Autoneg
 1651                          */
 1652                         for (i = 0; i < AN_RETRY_COUNT; i++) {
 1653                                 usec_delay(10);
 1654                                 rxcw = E1000_READ_REG(hw, E1000_RXCW);
 1655                                 if ((rxcw & E1000_RXCW_SYNCH) &&
 1656                                     (rxcw & E1000_RXCW_C))
 1657                                         continue;
 1658 
 1659                                 if (rxcw & E1000_RXCW_IV) {
 1660                                         mac->serdes_has_link = false;
 1661                                         mac->serdes_link_state =
 1662                                                         e1000_serdes_link_down;
 1663                                         DEBUGOUT("ANYSTATE  -> DOWN\n");
 1664                                         break;
 1665                                 }
 1666                         }
 1667 
 1668                         if (i == AN_RETRY_COUNT) {
 1669                                 txcw = E1000_READ_REG(hw, E1000_TXCW);
 1670                                 txcw |= E1000_TXCW_ANE;
 1671                                 E1000_WRITE_REG(hw, E1000_TXCW, txcw);
 1672                                 mac->serdes_link_state =
 1673                                         e1000_serdes_link_autoneg_progress;
 1674                                 mac->serdes_has_link = false;
 1675                                 DEBUGOUT("ANYSTATE  -> AN_PROG\n");
 1676                         }
 1677                 }
 1678         }
 1679 
 1680         return ret_val;
 1681 }
 1682 
 1683 /**
 1684  *  e1000_valid_led_default_82571 - Verify a valid default LED config
 1685  *  @hw: pointer to the HW structure
 1686  *  @data: pointer to the NVM (EEPROM)
 1687  *
 1688  *  Read the EEPROM for the current default LED configuration.  If the
 1689  *  LED configuration is not valid, set to a valid LED configuration.
 1690  **/
 1691 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
 1692 {
 1693         s32 ret_val;
 1694 
 1695         DEBUGFUNC("e1000_valid_led_default_82571");
 1696 
 1697         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
 1698         if (ret_val) {
 1699                 DEBUGOUT("NVM Read Error\n");
 1700                 return ret_val;
 1701         }
 1702 
 1703         switch (hw->mac.type) {
 1704         case e1000_82573:
 1705         case e1000_82574:
 1706         case e1000_82583:
 1707                 if (*data == ID_LED_RESERVED_F746)
 1708                         *data = ID_LED_DEFAULT_82573;
 1709                 break;
 1710         default:
 1711                 if (*data == ID_LED_RESERVED_0000 ||
 1712                     *data == ID_LED_RESERVED_FFFF)
 1713                         *data = ID_LED_DEFAULT;
 1714                 break;
 1715         }
 1716 
 1717         return E1000_SUCCESS;
 1718 }
 1719 
 1720 /**
 1721  *  e1000_get_laa_state_82571 - Get locally administered address state
 1722  *  @hw: pointer to the HW structure
 1723  *
 1724  *  Retrieve and return the current locally administered address state.
 1725  **/
 1726 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
 1727 {
 1728         DEBUGFUNC("e1000_get_laa_state_82571");
 1729 
 1730         if (hw->mac.type != e1000_82571)
 1731                 return false;
 1732 
 1733         return hw->dev_spec._82571.laa_is_present;
 1734 }
 1735 
 1736 /**
 1737  *  e1000_set_laa_state_82571 - Set locally administered address state
 1738  *  @hw: pointer to the HW structure
 1739  *  @state: enable/disable locally administered address
 1740  *
 1741  *  Enable/Disable the current locally administered address state.
 1742  **/
 1743 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
 1744 {
 1745         DEBUGFUNC("e1000_set_laa_state_82571");
 1746 
 1747         if (hw->mac.type != e1000_82571)
 1748                 return;
 1749 
 1750         hw->dev_spec._82571.laa_is_present = state;
 1751 
 1752         /* If workaround is activated... */
 1753         if (state)
 1754                 /* Hold a copy of the LAA in RAR[14] This is done so that
 1755                  * between the time RAR[0] gets clobbered and the time it
 1756                  * gets fixed, the actual LAA is in one of the RARs and no
 1757                  * incoming packets directed to this port are dropped.
 1758                  * Eventually the LAA will be in RAR[0] and RAR[14].
 1759                  */
 1760                 hw->mac.ops.rar_set(hw, hw->mac.addr,
 1761                                     hw->mac.rar_entry_count - 1);
 1762         return;
 1763 }
 1764 
 1765 /**
 1766  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
 1767  *  @hw: pointer to the HW structure
 1768  *
 1769  *  Verifies that the EEPROM has completed the update.  After updating the
 1770  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
 1771  *  the checksum fix is not implemented, we need to set the bit and update
 1772  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
 1773  *  we need to return bad checksum.
 1774  **/
 1775 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
 1776 {
 1777         struct e1000_nvm_info *nvm = &hw->nvm;
 1778         s32 ret_val;
 1779         u16 data;
 1780 
 1781         DEBUGFUNC("e1000_fix_nvm_checksum_82571");
 1782 
 1783         if (nvm->type != e1000_nvm_flash_hw)
 1784                 return E1000_SUCCESS;
 1785 
 1786         /* Check bit 4 of word 10h.  If it is 0, firmware is done updating
 1787          * 10h-12h.  Checksum may need to be fixed.
 1788          */
 1789         ret_val = nvm->ops.read(hw, 0x10, 1, &data);
 1790         if (ret_val)
 1791                 return ret_val;
 1792 
 1793         if (!(data & 0x10)) {
 1794                 /* Read 0x23 and check bit 15.  This bit is a 1
 1795                  * when the checksum has already been fixed.  If
 1796                  * the checksum is still wrong and this bit is a
 1797                  * 1, we need to return bad checksum.  Otherwise,
 1798                  * we need to set this bit to a 1 and update the
 1799                  * checksum.
 1800                  */
 1801                 ret_val = nvm->ops.read(hw, 0x23, 1, &data);
 1802                 if (ret_val)
 1803                         return ret_val;
 1804 
 1805                 if (!(data & 0x8000)) {
 1806                         data |= 0x8000;
 1807                         ret_val = nvm->ops.write(hw, 0x23, 1, &data);
 1808                         if (ret_val)
 1809                                 return ret_val;
 1810                         ret_val = nvm->ops.update(hw);
 1811                         if (ret_val)
 1812                                 return ret_val;
 1813                 }
 1814         }
 1815 
 1816         return E1000_SUCCESS;
 1817 }
 1818 
 1819 
 1820 /**
 1821  *  e1000_read_mac_addr_82571 - Read device MAC address
 1822  *  @hw: pointer to the HW structure
 1823  **/
 1824 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
 1825 {
 1826         DEBUGFUNC("e1000_read_mac_addr_82571");
 1827 
 1828         if (hw->mac.type == e1000_82571) {
 1829                 s32 ret_val;
 1830 
 1831                 /* If there's an alternate MAC address place it in RAR0
 1832                  * so that it will override the Si installed default perm
 1833                  * address.
 1834                  */
 1835                 ret_val = e1000_check_alt_mac_addr_generic(hw);
 1836                 if (ret_val)
 1837                         return ret_val;
 1838         }
 1839 
 1840         return e1000_read_mac_addr_generic(hw);
 1841 }
 1842 
 1843 /**
 1844  * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
 1845  * @hw: pointer to the HW structure
 1846  *
 1847  * In the case of a PHY power down to save power, or to turn off link during a
 1848  * driver unload, or wake on lan is not enabled, remove the link.
 1849  **/
 1850 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
 1851 {
 1852         struct e1000_phy_info *phy = &hw->phy;
 1853         struct e1000_mac_info *mac = &hw->mac;
 1854 
 1855         if (!phy->ops.check_reset_block)
 1856                 return;
 1857 
 1858         /* If the management interface is not enabled, then power down */
 1859         if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
 1860                 e1000_power_down_phy_copper(hw);
 1861 
 1862         return;
 1863 }
 1864 
 1865 /**
 1866  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
 1867  *  @hw: pointer to the HW structure
 1868  *
 1869  *  Clears the hardware counters by reading the counter registers.
 1870  **/
 1871 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
 1872 {
 1873         DEBUGFUNC("e1000_clear_hw_cntrs_82571");
 1874 
 1875         e1000_clear_hw_cntrs_base_generic(hw);
 1876 
 1877         E1000_READ_REG(hw, E1000_PRC64);
 1878         E1000_READ_REG(hw, E1000_PRC127);
 1879         E1000_READ_REG(hw, E1000_PRC255);
 1880         E1000_READ_REG(hw, E1000_PRC511);
 1881         E1000_READ_REG(hw, E1000_PRC1023);
 1882         E1000_READ_REG(hw, E1000_PRC1522);
 1883         E1000_READ_REG(hw, E1000_PTC64);
 1884         E1000_READ_REG(hw, E1000_PTC127);
 1885         E1000_READ_REG(hw, E1000_PTC255);
 1886         E1000_READ_REG(hw, E1000_PTC511);
 1887         E1000_READ_REG(hw, E1000_PTC1023);
 1888         E1000_READ_REG(hw, E1000_PTC1522);
 1889 
 1890         E1000_READ_REG(hw, E1000_ALGNERRC);
 1891         E1000_READ_REG(hw, E1000_RXERRC);
 1892         E1000_READ_REG(hw, E1000_TNCRS);
 1893         E1000_READ_REG(hw, E1000_CEXTERR);
 1894         E1000_READ_REG(hw, E1000_TSCTC);
 1895         E1000_READ_REG(hw, E1000_TSCTFC);
 1896 
 1897         E1000_READ_REG(hw, E1000_MGTPRC);
 1898         E1000_READ_REG(hw, E1000_MGTPDC);
 1899         E1000_READ_REG(hw, E1000_MGTPTC);
 1900 
 1901         E1000_READ_REG(hw, E1000_IAC);
 1902         E1000_READ_REG(hw, E1000_ICRXOC);
 1903 
 1904         E1000_READ_REG(hw, E1000_ICRXPTC);
 1905         E1000_READ_REG(hw, E1000_ICRXATC);
 1906         E1000_READ_REG(hw, E1000_ICTXPTC);
 1907         E1000_READ_REG(hw, E1000_ICTXATC);
 1908         E1000_READ_REG(hw, E1000_ICTXQEC);
 1909         E1000_READ_REG(hw, E1000_ICTXQMTC);
 1910         E1000_READ_REG(hw, E1000_ICRXDMTC);
 1911 }

Cache object: e9a295210f48c3cb5a810fe5c4a0fa23


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