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_80003es2lan.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 /* 80003ES2LAN Gigabit Ethernet Controller (Copper)
   37  * 80003ES2LAN Gigabit Ethernet Controller (Serdes)
   38  */
   39 
   40 #include "e1000_api.h"
   41 
   42 static s32  e1000_acquire_phy_80003es2lan(struct e1000_hw *hw);
   43 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw);
   44 static s32  e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw);
   45 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw);
   46 static s32  e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
   47                                                    u32 offset,
   48                                                    u16 *data);
   49 static s32  e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
   50                                                     u32 offset,
   51                                                     u16 data);
   52 static s32  e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
   53                                         u16 words, u16 *data);
   54 static s32  e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw);
   55 static s32  e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw);
   56 static s32  e1000_get_cable_length_80003es2lan(struct e1000_hw *hw);
   57 static s32  e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
   58                                                u16 *duplex);
   59 static s32  e1000_reset_hw_80003es2lan(struct e1000_hw *hw);
   60 static s32  e1000_init_hw_80003es2lan(struct e1000_hw *hw);
   61 static s32  e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw);
   62 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw);
   63 static s32  e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex);
   64 static s32  e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw);
   65 static s32  e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw);
   66 static s32  e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
   67                                             u16 *data);
   68 static s32  e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
   69                                              u16 data);
   70 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw);
   71 static s32  e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw);
   72 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw);
   73 
   74 /* A table for the GG82563 cable length where the range is defined
   75  * with a lower bound at "index" and the upper bound at
   76  * "index + 5".
   77  */
   78 static const u16 e1000_gg82563_cable_length_table[] = {
   79         0, 60, 115, 150, 150, 60, 115, 150, 180, 180, 0xFF };
   80 #define GG82563_CABLE_LENGTH_TABLE_SIZE \
   81                 (sizeof(e1000_gg82563_cable_length_table) / \
   82                  sizeof(e1000_gg82563_cable_length_table[0]))
   83 
   84 /**
   85  *  e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
   86  *  @hw: pointer to the HW structure
   87  **/
   88 static s32 e1000_init_phy_params_80003es2lan(struct e1000_hw *hw)
   89 {
   90         struct e1000_phy_info *phy = &hw->phy;
   91         s32 ret_val;
   92 
   93         DEBUGFUNC("e1000_init_phy_params_80003es2lan");
   94 
   95         if (hw->phy.media_type != e1000_media_type_copper) {
   96                 phy->type = e1000_phy_none;
   97                 return E1000_SUCCESS;
   98         } else {
   99                 phy->ops.power_up = e1000_power_up_phy_copper;
  100                 phy->ops.power_down = e1000_power_down_phy_copper_80003es2lan;
  101         }
  102 
  103         phy->addr               = 1;
  104         phy->autoneg_mask       = AUTONEG_ADVERTISE_SPEED_DEFAULT;
  105         phy->reset_delay_us     = 100;
  106         phy->type               = e1000_phy_gg82563;
  107 
  108         phy->ops.acquire        = e1000_acquire_phy_80003es2lan;
  109         phy->ops.check_polarity = e1000_check_polarity_m88;
  110         phy->ops.check_reset_block = e1000_check_reset_block_generic;
  111         phy->ops.commit         = e1000_phy_sw_reset_generic;
  112         phy->ops.get_cfg_done   = e1000_get_cfg_done_80003es2lan;
  113         phy->ops.get_info       = e1000_get_phy_info_m88;
  114         phy->ops.release        = e1000_release_phy_80003es2lan;
  115         phy->ops.reset          = e1000_phy_hw_reset_generic;
  116         phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic;
  117 
  118         phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_80003es2lan;
  119         phy->ops.get_cable_length = e1000_get_cable_length_80003es2lan;
  120         phy->ops.read_reg       = e1000_read_phy_reg_gg82563_80003es2lan;
  121         phy->ops.write_reg      = e1000_write_phy_reg_gg82563_80003es2lan;
  122 
  123         phy->ops.cfg_on_link_up = e1000_cfg_on_link_up_80003es2lan;
  124 
  125         /* This can only be done after all function pointers are setup. */
  126         ret_val = e1000_get_phy_id(hw);
  127 
  128         /* Verify phy id */
  129         if (phy->id != GG82563_E_PHY_ID)
  130                 return -E1000_ERR_PHY;
  131 
  132         return ret_val;
  133 }
  134 
  135 /**
  136  *  e1000_init_nvm_params_80003es2lan - Init ESB2 NVM func ptrs.
  137  *  @hw: pointer to the HW structure
  138  **/
  139 static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
  140 {
  141         struct e1000_nvm_info *nvm = &hw->nvm;
  142         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
  143         u16 size;
  144 
  145         DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
  146 
  147         nvm->opcode_bits = 8;
  148         nvm->delay_usec = 1;
  149         switch (nvm->override) {
  150         case e1000_nvm_override_spi_large:
  151                 nvm->page_size = 32;
  152                 nvm->address_bits = 16;
  153                 break;
  154         case e1000_nvm_override_spi_small:
  155                 nvm->page_size = 8;
  156                 nvm->address_bits = 8;
  157                 break;
  158         default:
  159                 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
  160                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
  161                 break;
  162         }
  163 
  164         nvm->type = e1000_nvm_eeprom_spi;
  165 
  166         size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
  167                      E1000_EECD_SIZE_EX_SHIFT);
  168 
  169         /* Added to a constant, "size" becomes the left-shift value
  170          * for setting word_size.
  171          */
  172         size += NVM_WORD_SIZE_BASE_SHIFT;
  173 
  174         /* EEPROM access above 16k is unsupported */
  175         if (size > 14)
  176                 size = 14;
  177         nvm->word_size = 1 << size;
  178 
  179         /* Function Pointers */
  180         nvm->ops.acquire        = e1000_acquire_nvm_80003es2lan;
  181         nvm->ops.read           = e1000_read_nvm_eerd;
  182         nvm->ops.release        = e1000_release_nvm_80003es2lan;
  183         nvm->ops.update         = e1000_update_nvm_checksum_generic;
  184         nvm->ops.valid_led_default = e1000_valid_led_default_generic;
  185         nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
  186         nvm->ops.write          = e1000_write_nvm_80003es2lan;
  187 
  188         return E1000_SUCCESS;
  189 }
  190 
  191 /**
  192  *  e1000_init_mac_params_80003es2lan - Init ESB2 MAC func ptrs.
  193  *  @hw: pointer to the HW structure
  194  **/
  195 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
  196 {
  197         struct e1000_mac_info *mac = &hw->mac;
  198 
  199         DEBUGFUNC("e1000_init_mac_params_80003es2lan");
  200 
  201         /* Set media type and media-dependent function pointers */
  202         switch (hw->device_id) {
  203         case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
  204                 hw->phy.media_type = e1000_media_type_internal_serdes;
  205                 mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
  206                 mac->ops.setup_physical_interface =
  207                                         e1000_setup_fiber_serdes_link_generic;
  208                 break;
  209         default:
  210                 hw->phy.media_type = e1000_media_type_copper;
  211                 mac->ops.check_for_link = e1000_check_for_copper_link_generic;
  212                 mac->ops.setup_physical_interface =
  213                                         e1000_setup_copper_link_80003es2lan;
  214                 break;
  215         }
  216 
  217         /* Set mta register count */
  218         mac->mta_reg_count = 128;
  219         /* Set rar entry count */
  220         mac->rar_entry_count = E1000_RAR_ENTRIES;
  221         /* Set if part includes ASF firmware */
  222         mac->asf_firmware_present = true;
  223         /* FWSM register */
  224         mac->has_fwsm = true;
  225         /* ARC supported; valid only if manageability features are enabled. */
  226         mac->arc_subsystem_valid = !!(E1000_READ_REG(hw, E1000_FWSM) &
  227                                       E1000_FWSM_MODE_MASK);
  228         /* Adaptive IFS not supported */
  229         mac->adaptive_ifs = false;
  230 
  231         /* Function pointers */
  232 
  233         /* bus type/speed/width */
  234         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
  235         /* reset */
  236         mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
  237         /* hw initialization */
  238         mac->ops.init_hw = e1000_init_hw_80003es2lan;
  239         /* link setup */
  240         mac->ops.setup_link = e1000_setup_link_generic;
  241         /* check management mode */
  242         mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
  243         /* multicast address update */
  244         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
  245         /* writing VFTA */
  246         mac->ops.write_vfta = e1000_write_vfta_generic;
  247         /* clearing VFTA */
  248         mac->ops.clear_vfta = e1000_clear_vfta_generic;
  249         /* read mac address */
  250         mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
  251         /* ID LED init */
  252         mac->ops.id_led_init = e1000_id_led_init_generic;
  253         /* blink LED */
  254         mac->ops.blink_led = e1000_blink_led_generic;
  255         /* setup LED */
  256         mac->ops.setup_led = e1000_setup_led_generic;
  257         /* cleanup LED */
  258         mac->ops.cleanup_led = e1000_cleanup_led_generic;
  259         /* turn on/off LED */
  260         mac->ops.led_on = e1000_led_on_generic;
  261         mac->ops.led_off = e1000_led_off_generic;
  262         /* clear hardware counters */
  263         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_80003es2lan;
  264         /* link info */
  265         mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
  266 
  267         /* set lan id for port to determine which phy lock to use */
  268         hw->mac.ops.set_lan_id(hw);
  269 
  270         return E1000_SUCCESS;
  271 }
  272 
  273 /**
  274  *  e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
  275  *  @hw: pointer to the HW structure
  276  *
  277  *  Called to initialize all function pointers and parameters.
  278  **/
  279 void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
  280 {
  281         DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
  282 
  283         hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
  284         hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
  285         hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
  286 }
  287 
  288 /**
  289  *  e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
  290  *  @hw: pointer to the HW structure
  291  *
  292  *  A wrapper to acquire access rights to the correct PHY.
  293  **/
  294 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw)
  295 {
  296         u16 mask;
  297 
  298         DEBUGFUNC("e1000_acquire_phy_80003es2lan");
  299 
  300         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
  301         return e1000_acquire_swfw_sync(hw, mask);
  302 }
  303 
  304 /**
  305  *  e1000_release_phy_80003es2lan - Release rights to access PHY
  306  *  @hw: pointer to the HW structure
  307  *
  308  *  A wrapper to release access rights to the correct PHY.
  309  **/
  310 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
  311 {
  312         u16 mask;
  313 
  314         DEBUGFUNC("e1000_release_phy_80003es2lan");
  315 
  316         mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
  317         e1000_release_swfw_sync(hw, mask);
  318 }
  319 
  320 /**
  321  *  e1000_acquire_mac_csr_80003es2lan - Acquire right to access Kumeran register
  322  *  @hw: pointer to the HW structure
  323  *
  324  *  Acquire the semaphore to access the Kumeran interface.
  325  *
  326  **/
  327 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw)
  328 {
  329         u16 mask;
  330 
  331         DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
  332 
  333         mask = E1000_SWFW_CSR_SM;
  334 
  335         return e1000_acquire_swfw_sync(hw, mask);
  336 }
  337 
  338 /**
  339  *  e1000_release_mac_csr_80003es2lan - Release right to access Kumeran Register
  340  *  @hw: pointer to the HW structure
  341  *
  342  *  Release the semaphore used to access the Kumeran interface
  343  **/
  344 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw)
  345 {
  346         u16 mask;
  347 
  348         DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
  349 
  350         mask = E1000_SWFW_CSR_SM;
  351 
  352         e1000_release_swfw_sync(hw, mask);
  353 }
  354 
  355 /**
  356  *  e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
  357  *  @hw: pointer to the HW structure
  358  *
  359  *  Acquire the semaphore to access the EEPROM.
  360  **/
  361 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw)
  362 {
  363         s32 ret_val;
  364 
  365         DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
  366 
  367         ret_val = e1000_acquire_swfw_sync(hw, E1000_SWFW_EEP_SM);
  368         if (ret_val)
  369                 return ret_val;
  370 
  371         ret_val = e1000_acquire_nvm_generic(hw);
  372 
  373         if (ret_val)
  374                 e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
  375 
  376         return ret_val;
  377 }
  378 
  379 /**
  380  *  e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
  381  *  @hw: pointer to the HW structure
  382  *
  383  *  Release the semaphore used to access the EEPROM.
  384  **/
  385 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw)
  386 {
  387         DEBUGFUNC("e1000_release_nvm_80003es2lan");
  388 
  389         e1000_release_nvm_generic(hw);
  390         e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
  391 }
  392 
  393 /**
  394  *  e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
  395  *  @hw: pointer to the HW structure
  396  *  @offset: offset of the register to read
  397  *  @data: pointer to the data returned from the operation
  398  *
  399  *  Read the GG82563 PHY register.
  400  **/
  401 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
  402                                                   u32 offset, u16 *data)
  403 {
  404         s32 ret_val;
  405         u32 page_select;
  406         u16 temp;
  407 
  408         DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
  409 
  410         ret_val = e1000_acquire_phy_80003es2lan(hw);
  411         if (ret_val)
  412                 return ret_val;
  413 
  414         /* Select Configuration Page */
  415         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
  416                 page_select = GG82563_PHY_PAGE_SELECT;
  417         } else {
  418                 /* Use Alternative Page Select register to access
  419                  * registers 30 and 31
  420                  */
  421                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
  422         }
  423 
  424         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
  425         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
  426         if (ret_val) {
  427                 e1000_release_phy_80003es2lan(hw);
  428                 return ret_val;
  429         }
  430 
  431         if (hw->dev_spec._80003es2lan.mdic_wa_enable) {
  432                 /* The "ready" bit in the MDIC register may be incorrectly set
  433                  * before the device has completed the "Page Select" MDI
  434                  * transaction.  So we wait 200us after each MDI command...
  435                  */
  436                 usec_delay(200);
  437 
  438                 /* ...and verify the command was successful. */
  439                 ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
  440 
  441                 if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
  442                         e1000_release_phy_80003es2lan(hw);
  443                         return -E1000_ERR_PHY;
  444                 }
  445 
  446                 usec_delay(200);
  447 
  448                 ret_val = e1000_read_phy_reg_mdic(hw,
  449                                                   MAX_PHY_REG_ADDRESS & offset,
  450                                                   data);
  451 
  452                 usec_delay(200);
  453         } else {
  454                 ret_val = e1000_read_phy_reg_mdic(hw,
  455                                                   MAX_PHY_REG_ADDRESS & offset,
  456                                                   data);
  457         }
  458 
  459         e1000_release_phy_80003es2lan(hw);
  460 
  461         return ret_val;
  462 }
  463 
  464 /**
  465  *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
  466  *  @hw: pointer to the HW structure
  467  *  @offset: offset of the register to read
  468  *  @data: value to write to the register
  469  *
  470  *  Write to the GG82563 PHY register.
  471  **/
  472 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
  473                                                    u32 offset, u16 data)
  474 {
  475         s32 ret_val;
  476         u32 page_select;
  477         u16 temp;
  478 
  479         DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
  480 
  481         ret_val = e1000_acquire_phy_80003es2lan(hw);
  482         if (ret_val)
  483                 return ret_val;
  484 
  485         /* Select Configuration Page */
  486         if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
  487                 page_select = GG82563_PHY_PAGE_SELECT;
  488         } else {
  489                 /* Use Alternative Page Select register to access
  490                  * registers 30 and 31
  491                  */
  492                 page_select = GG82563_PHY_PAGE_SELECT_ALT;
  493         }
  494 
  495         temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
  496         ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
  497         if (ret_val) {
  498                 e1000_release_phy_80003es2lan(hw);
  499                 return ret_val;
  500         }
  501 
  502         if (hw->dev_spec._80003es2lan.mdic_wa_enable) {
  503                 /* The "ready" bit in the MDIC register may be incorrectly set
  504                  * before the device has completed the "Page Select" MDI
  505                  * transaction.  So we wait 200us after each MDI command...
  506                  */
  507                 usec_delay(200);
  508 
  509                 /* ...and verify the command was successful. */
  510                 ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
  511 
  512                 if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
  513                         e1000_release_phy_80003es2lan(hw);
  514                         return -E1000_ERR_PHY;
  515                 }
  516 
  517                 usec_delay(200);
  518 
  519                 ret_val = e1000_write_phy_reg_mdic(hw,
  520                                                   MAX_PHY_REG_ADDRESS & offset,
  521                                                   data);
  522 
  523                 usec_delay(200);
  524         } else {
  525                 ret_val = e1000_write_phy_reg_mdic(hw,
  526                                                   MAX_PHY_REG_ADDRESS & offset,
  527                                                   data);
  528         }
  529 
  530         e1000_release_phy_80003es2lan(hw);
  531 
  532         return ret_val;
  533 }
  534 
  535 /**
  536  *  e1000_write_nvm_80003es2lan - Write to ESB2 NVM
  537  *  @hw: pointer to the HW structure
  538  *  @offset: offset of the register to read
  539  *  @words: number of words to write
  540  *  @data: buffer of data to write to the NVM
  541  *
  542  *  Write "words" of data to the ESB2 NVM.
  543  **/
  544 static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
  545                                        u16 words, u16 *data)
  546 {
  547         DEBUGFUNC("e1000_write_nvm_80003es2lan");
  548 
  549         return e1000_write_nvm_spi(hw, offset, words, data);
  550 }
  551 
  552 /**
  553  *  e1000_get_cfg_done_80003es2lan - Wait for configuration to complete
  554  *  @hw: pointer to the HW structure
  555  *
  556  *  Wait a specific amount of time for manageability processes to complete.
  557  *  This is a function pointer entry point called by the phy module.
  558  **/
  559 static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw)
  560 {
  561         s32 timeout = PHY_CFG_TIMEOUT;
  562         u32 mask = E1000_NVM_CFG_DONE_PORT_0;
  563 
  564         DEBUGFUNC("e1000_get_cfg_done_80003es2lan");
  565 
  566         if (hw->bus.func == 1)
  567                 mask = E1000_NVM_CFG_DONE_PORT_1;
  568 
  569         while (timeout) {
  570                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
  571                         break;
  572                 msec_delay(1);
  573                 timeout--;
  574         }
  575         if (!timeout) {
  576                 DEBUGOUT("MNG configuration cycle has not completed.\n");
  577                 return -E1000_ERR_RESET;
  578         }
  579 
  580         return E1000_SUCCESS;
  581 }
  582 
  583 /**
  584  *  e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex
  585  *  @hw: pointer to the HW structure
  586  *
  587  *  Force the speed and duplex settings onto the PHY.  This is a
  588  *  function pointer entry point called by the phy module.
  589  **/
  590 static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw)
  591 {
  592         s32 ret_val;
  593         u16 phy_data;
  594         bool link;
  595 
  596         DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
  597 
  598         if (!(hw->phy.ops.read_reg))
  599                 return E1000_SUCCESS;
  600 
  601         /* Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
  602          * forced whenever speed and duplex are forced.
  603          */
  604         ret_val = hw->phy.ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
  605         if (ret_val)
  606                 return ret_val;
  607 
  608         phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;
  609         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
  610         if (ret_val)
  611                 return ret_val;
  612 
  613         DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);
  614 
  615         ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);
  616         if (ret_val)
  617                 return ret_val;
  618 
  619         e1000_phy_force_speed_duplex_setup(hw, &phy_data);
  620 
  621         /* Reset the phy to commit changes. */
  622         phy_data |= MII_CR_RESET;
  623 
  624         ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_data);
  625         if (ret_val)
  626                 return ret_val;
  627 
  628         usec_delay(1);
  629 
  630         if (hw->phy.autoneg_wait_to_complete) {
  631                 DEBUGOUT("Waiting for forced speed/duplex link on GG82563 phy.\n");
  632 
  633                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
  634                                                      100000, &link);
  635                 if (ret_val)
  636                         return ret_val;
  637 
  638                 if (!link) {
  639                         /* We didn't get link.
  640                          * Reset the DSP and cross our fingers.
  641                          */
  642                         ret_val = e1000_phy_reset_dsp_generic(hw);
  643                         if (ret_val)
  644                                 return ret_val;
  645                 }
  646 
  647                 /* Try once more */
  648                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
  649                                                      100000, &link);
  650                 if (ret_val)
  651                         return ret_val;
  652         }
  653 
  654         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
  655                                        &phy_data);
  656         if (ret_val)
  657                 return ret_val;
  658 
  659         /* Resetting the phy means we need to verify the TX_CLK corresponds
  660          * to the link speed.  10Mbps -> 2.5MHz, else 25MHz.
  661          */
  662         phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
  663         if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED)
  664                 phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5;
  665         else
  666                 phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;
  667 
  668         /* In addition, we must re-enable CRS on Tx for both half and full
  669          * duplex.
  670          */
  671         phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
  672         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
  673                                         phy_data);
  674 
  675         return ret_val;
  676 }
  677 
  678 /**
  679  *  e1000_get_cable_length_80003es2lan - Set approximate cable length
  680  *  @hw: pointer to the HW structure
  681  *
  682  *  Find the approximate cable length as measured by the GG82563 PHY.
  683  *  This is a function pointer entry point called by the phy module.
  684  **/
  685 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
  686 {
  687         struct e1000_phy_info *phy = &hw->phy;
  688         s32 ret_val;
  689         u16 phy_data, index;
  690 
  691         DEBUGFUNC("e1000_get_cable_length_80003es2lan");
  692 
  693         if (!(hw->phy.ops.read_reg))
  694                 return E1000_SUCCESS;
  695 
  696         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
  697         if (ret_val)
  698                 return ret_val;
  699 
  700         index = phy_data & GG82563_DSPD_CABLE_LENGTH;
  701 
  702         if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5)
  703                 return -E1000_ERR_PHY;
  704 
  705         phy->min_cable_length = e1000_gg82563_cable_length_table[index];
  706         phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
  707 
  708         phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
  709 
  710         return E1000_SUCCESS;
  711 }
  712 
  713 /**
  714  *  e1000_get_link_up_info_80003es2lan - Report speed and duplex
  715  *  @hw: pointer to the HW structure
  716  *  @speed: pointer to speed buffer
  717  *  @duplex: pointer to duplex buffer
  718  *
  719  *  Retrieve the current speed and duplex configuration.
  720  **/
  721 static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
  722                                               u16 *duplex)
  723 {
  724         s32 ret_val;
  725 
  726         DEBUGFUNC("e1000_get_link_up_info_80003es2lan");
  727 
  728         if (hw->phy.media_type == e1000_media_type_copper) {
  729                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
  730                                                                     duplex);
  731                 hw->phy.ops.cfg_on_link_up(hw);
  732         } else {
  733                 ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,
  734                                                                   speed,
  735                                                                   duplex);
  736         }
  737 
  738         return ret_val;
  739 }
  740 
  741 /**
  742  *  e1000_reset_hw_80003es2lan - Reset the ESB2 controller
  743  *  @hw: pointer to the HW structure
  744  *
  745  *  Perform a global reset to the ESB2 controller.
  746  **/
  747 static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
  748 {
  749         u32 ctrl;
  750         s32 ret_val;
  751         u16 kum_reg_data;
  752 
  753         DEBUGFUNC("e1000_reset_hw_80003es2lan");
  754 
  755         /* Prevent the PCI-E bus from sticking if there is no TLP connection
  756          * on the last TLP read/write transaction when MAC is reset.
  757          */
  758         ret_val = e1000_disable_pcie_master_generic(hw);
  759         if (ret_val)
  760                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
  761 
  762         DEBUGOUT("Masking off all interrupts\n");
  763         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
  764 
  765         E1000_WRITE_REG(hw, E1000_RCTL, 0);
  766         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
  767         E1000_WRITE_FLUSH(hw);
  768 
  769         msec_delay(10);
  770 
  771         ctrl = E1000_READ_REG(hw, E1000_CTRL);
  772 
  773         ret_val = e1000_acquire_phy_80003es2lan(hw);
  774         if (ret_val)
  775                 return ret_val;
  776 
  777         DEBUGOUT("Issuing a global reset to MAC\n");
  778         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
  779         e1000_release_phy_80003es2lan(hw);
  780 
  781         /* Disable IBIST slave mode (far-end loopback) */
  782         ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
  783                                 E1000_KMRNCTRLSTA_INBAND_PARAM, &kum_reg_data);
  784         if (!ret_val) {
  785                 kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE;
  786                 ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
  787                                                  E1000_KMRNCTRLSTA_INBAND_PARAM,
  788                                                  kum_reg_data);
  789                 if (ret_val)
  790                         DEBUGOUT("Error disabling far-end loopback\n");
  791         } else
  792                 DEBUGOUT("Error disabling far-end loopback\n");
  793 
  794         ret_val = e1000_get_auto_rd_done_generic(hw);
  795         if (ret_val)
  796                 /* We don't want to continue accessing MAC registers. */
  797                 return ret_val;
  798 
  799         /* Clear any pending interrupt events. */
  800         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
  801         E1000_READ_REG(hw, E1000_ICR);
  802 
  803         return e1000_check_alt_mac_addr_generic(hw);
  804 }
  805 
  806 /**
  807  *  e1000_init_hw_80003es2lan - Initialize the ESB2 controller
  808  *  @hw: pointer to the HW structure
  809  *
  810  *  Initialize the hw bits, LED, VFTA, MTA, link and hw counters.
  811  **/
  812 static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
  813 {
  814         struct e1000_mac_info *mac = &hw->mac;
  815         u32 reg_data;
  816         s32 ret_val;
  817         u16 kum_reg_data;
  818         u16 i;
  819 
  820         DEBUGFUNC("e1000_init_hw_80003es2lan");
  821 
  822         e1000_initialize_hw_bits_80003es2lan(hw);
  823 
  824         /* Initialize identification LED */
  825         ret_val = mac->ops.id_led_init(hw);
  826         /* An error is not fatal and we should not stop init due to this */
  827         if (ret_val)
  828                 DEBUGOUT("Error initializing identification LED\n");
  829 
  830         /* Disabling VLAN filtering */
  831         DEBUGOUT("Initializing the IEEE VLAN\n");
  832         mac->ops.clear_vfta(hw);
  833 
  834         /* Setup the receive address. */
  835         e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
  836 
  837         /* Zero out the Multicast HASH table */
  838         DEBUGOUT("Zeroing the MTA\n");
  839         for (i = 0; i < mac->mta_reg_count; i++)
  840                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
  841 
  842         /* Setup link and flow control */
  843         ret_val = mac->ops.setup_link(hw);
  844         if (ret_val)
  845                 return ret_val;
  846 
  847         /* Disable IBIST slave mode (far-end loopback) */
  848         ret_val =
  849             e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM,
  850                                             &kum_reg_data);
  851         if (!ret_val) {
  852                 kum_reg_data |= E1000_KMRNCTRLSTA_IBIST_DISABLE;
  853                 ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
  854                                                  E1000_KMRNCTRLSTA_INBAND_PARAM,
  855                                                  kum_reg_data);
  856                 if (ret_val)
  857                         DEBUGOUT("Error disabling far-end loopback\n");
  858         } else
  859                 DEBUGOUT("Error disabling far-end loopback\n");
  860 
  861         /* Set the transmit descriptor write-back policy */
  862         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
  863         reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
  864                     E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC);
  865         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
  866 
  867         /* ...for both queues. */
  868         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
  869         reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
  870                     E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC);
  871         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
  872 
  873         /* Enable retransmit on late collisions */
  874         reg_data = E1000_READ_REG(hw, E1000_TCTL);
  875         reg_data |= E1000_TCTL_RTLC;
  876         E1000_WRITE_REG(hw, E1000_TCTL, reg_data);
  877 
  878         /* Configure Gigabit Carry Extend Padding */
  879         reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);
  880         reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
  881         reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;
  882         E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);
  883 
  884         /* Configure Transmit Inter-Packet Gap */
  885         reg_data = E1000_READ_REG(hw, E1000_TIPG);
  886         reg_data &= ~E1000_TIPG_IPGT_MASK;
  887         reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
  888         E1000_WRITE_REG(hw, E1000_TIPG, reg_data);
  889 
  890         reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);
  891         reg_data &= ~0x00100000;
  892         E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
  893 
  894         /* default to true to enable the MDIC W/A */
  895         hw->dev_spec._80003es2lan.mdic_wa_enable = true;
  896 
  897         ret_val =
  898             e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_OFFSET >>
  899                                             E1000_KMRNCTRLSTA_OFFSET_SHIFT, &i);
  900         if (!ret_val) {
  901                 if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
  902                      E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
  903                         hw->dev_spec._80003es2lan.mdic_wa_enable = false;
  904         }
  905 
  906         /* Clear all of the statistics registers (clear on read).  It is
  907          * important that we do this after we have tried to establish link
  908          * because the symbol error count will increment wildly if there
  909          * is no link.
  910          */
  911         e1000_clear_hw_cntrs_80003es2lan(hw);
  912 
  913         return ret_val;
  914 }
  915 
  916 /**
  917  *  e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
  918  *  @hw: pointer to the HW structure
  919  *
  920  *  Initializes required hardware-dependent bits needed for normal operation.
  921  **/
  922 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw)
  923 {
  924         u32 reg;
  925 
  926         DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
  927 
  928         /* Transmit Descriptor Control 0 */
  929         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
  930         reg |= (1 << 22);
  931         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
  932 
  933         /* Transmit Descriptor Control 1 */
  934         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
  935         reg |= (1 << 22);
  936         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
  937 
  938         /* Transmit Arbitration Control 0 */
  939         reg = E1000_READ_REG(hw, E1000_TARC(0));
  940         reg &= ~(0xF << 27); /* 30:27 */
  941         if (hw->phy.media_type != e1000_media_type_copper)
  942                 reg &= ~(1 << 20);
  943         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
  944 
  945         /* Transmit Arbitration Control 1 */
  946         reg = E1000_READ_REG(hw, E1000_TARC(1));
  947         if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
  948                 reg &= ~(1 << 28);
  949         else
  950                 reg |= (1 << 28);
  951         E1000_WRITE_REG(hw, E1000_TARC(1), reg);
  952 
  953         /* Disable IPv6 extension header parsing because some malformed
  954          * IPv6 headers can hang the Rx.
  955          */
  956         reg = E1000_READ_REG(hw, E1000_RFCTL);
  957         reg |= (E1000_RFCTL_IPV6_EX_DIS | E1000_RFCTL_NEW_IPV6_EXT_DIS);
  958         E1000_WRITE_REG(hw, E1000_RFCTL, reg);
  959 
  960         return;
  961 }
  962 
  963 /**
  964  *  e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
  965  *  @hw: pointer to the HW structure
  966  *
  967  *  Setup some GG82563 PHY registers for obtaining link
  968  **/
  969 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw)
  970 {
  971         struct e1000_phy_info *phy = &hw->phy;
  972         s32 ret_val;
  973         u32 reg;
  974         u16 data;
  975 
  976         DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
  977 
  978         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &data);
  979         if (ret_val)
  980                 return ret_val;
  981 
  982         data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
  983         /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
  984         data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
  985 
  986         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, data);
  987         if (ret_val)
  988                 return ret_val;
  989 
  990         /* Options:
  991          *   MDI/MDI-X = 0 (default)
  992          *   0 - Auto for all speeds
  993          *   1 - MDI mode
  994          *   2 - MDI-X mode
  995          *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
  996          */
  997         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
  998         if (ret_val)
  999                 return ret_val;
 1000 
 1001         data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
 1002 
 1003         switch (phy->mdix) {
 1004         case 1:
 1005                 data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
 1006                 break;
 1007         case 2:
 1008                 data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
 1009                 break;
 1010         case 0:
 1011         default:
 1012                 data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
 1013                 break;
 1014         }
 1015 
 1016         /* Options:
 1017          *   disable_polarity_correction = 0 (default)
 1018          *       Automatic Correction for Reversed Cable Polarity
 1019          *   0 - Disabled
 1020          *   1 - Enabled
 1021          */
 1022         data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
 1023         if (phy->disable_polarity_correction)
 1024                 data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
 1025 
 1026         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
 1027         if (ret_val)
 1028                 return ret_val;
 1029 
 1030         /* SW Reset the PHY so all changes take effect */
 1031         ret_val = hw->phy.ops.commit(hw);
 1032         if (ret_val) {
 1033                 DEBUGOUT("Error Resetting the PHY\n");
 1034                 return ret_val;
 1035         }
 1036 
 1037         /* Bypass Rx and Tx FIFO's */
 1038         reg = E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL;
 1039         data = (E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
 1040                 E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
 1041         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, reg, data);
 1042         if (ret_val)
 1043                 return ret_val;
 1044 
 1045         reg = E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE;
 1046         ret_val = e1000_read_kmrn_reg_80003es2lan(hw, reg, &data);
 1047         if (ret_val)
 1048                 return ret_val;
 1049         data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
 1050         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, reg, data);
 1051         if (ret_val)
 1052                 return ret_val;
 1053 
 1054         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
 1055         if (ret_val)
 1056                 return ret_val;
 1057 
 1058         data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
 1059         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
 1060         if (ret_val)
 1061                 return ret_val;
 1062 
 1063         reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 1064         reg &= ~E1000_CTRL_EXT_LINK_MODE_MASK;
 1065         E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 1066 
 1067         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
 1068         if (ret_val)
 1069                 return ret_val;
 1070 
 1071         /* Do not init these registers when the HW is in IAMT mode, since the
 1072          * firmware will have already initialized them.  We only initialize
 1073          * them if the HW is not in IAMT mode.
 1074          */
 1075         if (!hw->mac.ops.check_mng_mode(hw)) {
 1076                 /* Enable Electrical Idle on the PHY */
 1077                 data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
 1078                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
 1079                                                 data);
 1080                 if (ret_val)
 1081                         return ret_val;
 1082 
 1083                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1084                                                &data);
 1085                 if (ret_val)
 1086                         return ret_val;
 1087 
 1088                 data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
 1089                 ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1090                                                 data);
 1091                 if (ret_val)
 1092                         return ret_val;
 1093         }
 1094 
 1095         /* Workaround: Disable padding in Kumeran interface in the MAC
 1096          * and in the PHY to avoid CRC errors.
 1097          */
 1098         ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
 1099         if (ret_val)
 1100                 return ret_val;
 1101 
 1102         data |= GG82563_ICR_DIS_PADDING;
 1103         ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
 1104         if (ret_val)
 1105                 return ret_val;
 1106 
 1107         return E1000_SUCCESS;
 1108 }
 1109 
 1110 /**
 1111  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
 1112  *  @hw: pointer to the HW structure
 1113  *
 1114  *  Essentially a wrapper for setting up all things "copper" related.
 1115  *  This is a function pointer entry point called by the mac module.
 1116  **/
 1117 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
 1118 {
 1119         u32 ctrl;
 1120         s32 ret_val;
 1121         u16 reg_data;
 1122 
 1123         DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
 1124 
 1125         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 1126         ctrl |= E1000_CTRL_SLU;
 1127         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 1128         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 1129 
 1130         /* Set the mac to wait the maximum time between each
 1131          * iteration and increase the max iterations when
 1132          * polling the phy; this fixes erroneous timeouts at 10Mbps.
 1133          */
 1134         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
 1135                                                    0xFFFF);
 1136         if (ret_val)
 1137                 return ret_val;
 1138         ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
 1139                                                   &reg_data);
 1140         if (ret_val)
 1141                 return ret_val;
 1142         reg_data |= 0x3F;
 1143         ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
 1144                                                    reg_data);
 1145         if (ret_val)
 1146                 return ret_val;
 1147         ret_val =
 1148             e1000_read_kmrn_reg_80003es2lan(hw,
 1149                                             E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
 1150                                             &reg_data);
 1151         if (ret_val)
 1152                 return ret_val;
 1153         reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
 1154         ret_val =
 1155             e1000_write_kmrn_reg_80003es2lan(hw,
 1156                                              E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
 1157                                              reg_data);
 1158         if (ret_val)
 1159                 return ret_val;
 1160 
 1161         ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
 1162         if (ret_val)
 1163                 return ret_val;
 1164 
 1165         return e1000_setup_copper_link_generic(hw);
 1166 }
 1167 
 1168 /**
 1169  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
 1170  *  @hw: pointer to the HW structure
 1171  *
 1172  *  Configure the KMRN interface by applying last minute quirks for
 1173  *  10/100 operation.
 1174  **/
 1175 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
 1176 {
 1177         s32 ret_val = E1000_SUCCESS;
 1178         u16 speed;
 1179         u16 duplex;
 1180 
 1181         DEBUGFUNC("e1000_configure_on_link_up");
 1182 
 1183         if (hw->phy.media_type == e1000_media_type_copper) {
 1184                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, &speed,
 1185                                                                     &duplex);
 1186                 if (ret_val)
 1187                         return ret_val;
 1188 
 1189                 if (speed == SPEED_1000)
 1190                         ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
 1191                 else
 1192                         ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
 1193         }
 1194 
 1195         return ret_val;
 1196 }
 1197 
 1198 /**
 1199  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
 1200  *  @hw: pointer to the HW structure
 1201  *  @duplex: current duplex setting
 1202  *
 1203  *  Configure the KMRN interface by applying last minute quirks for
 1204  *  10/100 operation.
 1205  **/
 1206 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
 1207 {
 1208         s32 ret_val;
 1209         u32 tipg;
 1210         u32 i = 0;
 1211         u16 reg_data, reg_data2;
 1212 
 1213         DEBUGFUNC("e1000_configure_kmrn_for_10_100");
 1214 
 1215         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
 1216         ret_val =
 1217             e1000_write_kmrn_reg_80003es2lan(hw,
 1218                                              E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
 1219                                              reg_data);
 1220         if (ret_val)
 1221                 return ret_val;
 1222 
 1223         /* Configure Transmit Inter-Packet Gap */
 1224         tipg = E1000_READ_REG(hw, E1000_TIPG);
 1225         tipg &= ~E1000_TIPG_IPGT_MASK;
 1226         tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
 1227         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 1228 
 1229         do {
 1230                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1231                                                &reg_data);
 1232                 if (ret_val)
 1233                         return ret_val;
 1234 
 1235                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1236                                                &reg_data2);
 1237                 if (ret_val)
 1238                         return ret_val;
 1239                 i++;
 1240         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
 1241 
 1242         if (duplex == HALF_DUPLEX)
 1243                 reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
 1244         else
 1245                 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
 1246 
 1247         return hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
 1248 }
 1249 
 1250 /**
 1251  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
 1252  *  @hw: pointer to the HW structure
 1253  *
 1254  *  Configure the KMRN interface by applying last minute quirks for
 1255  *  gigabit operation.
 1256  **/
 1257 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
 1258 {
 1259         s32 ret_val;
 1260         u16 reg_data, reg_data2;
 1261         u32 tipg;
 1262         u32 i = 0;
 1263 
 1264         DEBUGFUNC("e1000_configure_kmrn_for_1000");
 1265 
 1266         reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
 1267         ret_val =
 1268             e1000_write_kmrn_reg_80003es2lan(hw,
 1269                                              E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
 1270                                              reg_data);
 1271         if (ret_val)
 1272                 return ret_val;
 1273 
 1274         /* Configure Transmit Inter-Packet Gap */
 1275         tipg = E1000_READ_REG(hw, E1000_TIPG);
 1276         tipg &= ~E1000_TIPG_IPGT_MASK;
 1277         tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
 1278         E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 1279 
 1280         do {
 1281                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1282                                                &reg_data);
 1283                 if (ret_val)
 1284                         return ret_val;
 1285 
 1286                 ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 1287                                                &reg_data2);
 1288                 if (ret_val)
 1289                         return ret_val;
 1290                 i++;
 1291         } while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
 1292 
 1293         reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
 1294 
 1295         return hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
 1296 }
 1297 
 1298 /**
 1299  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
 1300  *  @hw: pointer to the HW structure
 1301  *  @offset: register offset to be read
 1302  *  @data: pointer to the read data
 1303  *
 1304  *  Acquire semaphore, then read the PHY register at offset
 1305  *  using the kumeran interface.  The information retrieved is stored in data.
 1306  *  Release the semaphore before exiting.
 1307  **/
 1308 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
 1309                                            u16 *data)
 1310 {
 1311         u32 kmrnctrlsta;
 1312         s32 ret_val;
 1313 
 1314         DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
 1315 
 1316         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
 1317         if (ret_val)
 1318                 return ret_val;
 1319 
 1320         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
 1321                        E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
 1322         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
 1323         E1000_WRITE_FLUSH(hw);
 1324 
 1325         usec_delay(2);
 1326 
 1327         kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
 1328         *data = (u16)kmrnctrlsta;
 1329 
 1330         e1000_release_mac_csr_80003es2lan(hw);
 1331 
 1332         return ret_val;
 1333 }
 1334 
 1335 /**
 1336  *  e1000_write_kmrn_reg_80003es2lan - Write kumeran register
 1337  *  @hw: pointer to the HW structure
 1338  *  @offset: register offset to write to
 1339  *  @data: data to write at register offset
 1340  *
 1341  *  Acquire semaphore, then write the data to PHY register
 1342  *  at the offset using the kumeran interface.  Release semaphore
 1343  *  before exiting.
 1344  **/
 1345 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
 1346                                             u16 data)
 1347 {
 1348         u32 kmrnctrlsta;
 1349         s32 ret_val;
 1350 
 1351         DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
 1352 
 1353         ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
 1354         if (ret_val)
 1355                 return ret_val;
 1356 
 1357         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
 1358                        E1000_KMRNCTRLSTA_OFFSET) | data;
 1359         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
 1360         E1000_WRITE_FLUSH(hw);
 1361 
 1362         usec_delay(2);
 1363 
 1364         e1000_release_mac_csr_80003es2lan(hw);
 1365 
 1366         return ret_val;
 1367 }
 1368 
 1369 /**
 1370  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
 1371  *  @hw: pointer to the HW structure
 1372  **/
 1373 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
 1374 {
 1375         s32 ret_val;
 1376 
 1377         DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
 1378 
 1379         /* If there's an alternate MAC address place it in RAR0
 1380          * so that it will override the Si installed default perm
 1381          * address.
 1382          */
 1383         ret_val = e1000_check_alt_mac_addr_generic(hw);
 1384         if (ret_val)
 1385                 return ret_val;
 1386 
 1387         return e1000_read_mac_addr_generic(hw);
 1388 }
 1389 
 1390 /**
 1391  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
 1392  * @hw: pointer to the HW structure
 1393  *
 1394  * In the case of a PHY power down to save power, or to turn off link during a
 1395  * driver unload, or wake on lan is not enabled, remove the link.
 1396  **/
 1397 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
 1398 {
 1399         /* If the management interface is not enabled, then power down */
 1400         if (!(hw->mac.ops.check_mng_mode(hw) ||
 1401               hw->phy.ops.check_reset_block(hw)))
 1402                 e1000_power_down_phy_copper(hw);
 1403 
 1404         return;
 1405 }
 1406 
 1407 /**
 1408  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
 1409  *  @hw: pointer to the HW structure
 1410  *
 1411  *  Clears the hardware counters by reading the counter registers.
 1412  **/
 1413 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
 1414 {
 1415         DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
 1416 
 1417         e1000_clear_hw_cntrs_base_generic(hw);
 1418 
 1419         E1000_READ_REG(hw, E1000_PRC64);
 1420         E1000_READ_REG(hw, E1000_PRC127);
 1421         E1000_READ_REG(hw, E1000_PRC255);
 1422         E1000_READ_REG(hw, E1000_PRC511);
 1423         E1000_READ_REG(hw, E1000_PRC1023);
 1424         E1000_READ_REG(hw, E1000_PRC1522);
 1425         E1000_READ_REG(hw, E1000_PTC64);
 1426         E1000_READ_REG(hw, E1000_PTC127);
 1427         E1000_READ_REG(hw, E1000_PTC255);
 1428         E1000_READ_REG(hw, E1000_PTC511);
 1429         E1000_READ_REG(hw, E1000_PTC1023);
 1430         E1000_READ_REG(hw, E1000_PTC1522);
 1431 
 1432         E1000_READ_REG(hw, E1000_ALGNERRC);
 1433         E1000_READ_REG(hw, E1000_RXERRC);
 1434         E1000_READ_REG(hw, E1000_TNCRS);
 1435         E1000_READ_REG(hw, E1000_CEXTERR);
 1436         E1000_READ_REG(hw, E1000_TSCTC);
 1437         E1000_READ_REG(hw, E1000_TSCTFC);
 1438 
 1439         E1000_READ_REG(hw, E1000_MGTPRC);
 1440         E1000_READ_REG(hw, E1000_MGTPDC);
 1441         E1000_READ_REG(hw, E1000_MGTPTC);
 1442 
 1443         E1000_READ_REG(hw, E1000_IAC);
 1444         E1000_READ_REG(hw, E1000_ICRXOC);
 1445 
 1446         E1000_READ_REG(hw, E1000_ICRXPTC);
 1447         E1000_READ_REG(hw, E1000_ICRXATC);
 1448         E1000_READ_REG(hw, E1000_ICTXPTC);
 1449         E1000_READ_REG(hw, E1000_ICTXATC);
 1450         E1000_READ_REG(hw, E1000_ICTXQEC);
 1451         E1000_READ_REG(hw, E1000_ICTXQMTC);
 1452         E1000_READ_REG(hw, E1000_ICRXDMTC);
 1453 }

Cache object: d3f5360a0009645a038e43c0515ad289


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