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_phy.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 #include "e1000_api.h"
   37 
   38 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
   39 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
   40                                           u16 *data, bool read, bool page_set);
   41 static u32 e1000_get_phy_addr_for_hv_page(u32 page);
   42 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
   43                                           u16 *data, bool read);
   44 
   45 /* Cable length tables */
   46 static const u16 e1000_m88_cable_length_table[] = {
   47         0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
   48 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \
   49                 (sizeof(e1000_m88_cable_length_table) / \
   50                  sizeof(e1000_m88_cable_length_table[0]))
   51 
   52 static const u16 e1000_igp_2_cable_length_table[] = {
   53         0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21, 0, 0, 0, 3,
   54         6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 6, 10, 14, 18, 22,
   55         26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61, 21, 26, 31, 35, 40,
   56         44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82, 40, 45, 51, 56, 61,
   57         66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104, 60, 66, 72, 77, 82,
   58         87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121, 83, 89, 95,
   59         100, 105, 109, 113, 116, 119, 122, 124, 104, 109, 114, 118, 121,
   60         124};
   61 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
   62                 (sizeof(e1000_igp_2_cable_length_table) / \
   63                  sizeof(e1000_igp_2_cable_length_table[0]))
   64 
   65 /**
   66  *  e1000_init_phy_ops_generic - Initialize PHY function pointers
   67  *  @hw: pointer to the HW structure
   68  *
   69  *  Setups up the function pointers to no-op functions
   70  **/
   71 void e1000_init_phy_ops_generic(struct e1000_hw *hw)
   72 {
   73         struct e1000_phy_info *phy = &hw->phy;
   74         DEBUGFUNC("e1000_init_phy_ops_generic");
   75 
   76         /* Initialize function pointers */
   77         phy->ops.init_params = e1000_null_ops_generic;
   78         phy->ops.acquire = e1000_null_ops_generic;
   79         phy->ops.check_polarity = e1000_null_ops_generic;
   80         phy->ops.check_reset_block = e1000_null_ops_generic;
   81         phy->ops.commit = e1000_null_ops_generic;
   82         phy->ops.force_speed_duplex = e1000_null_ops_generic;
   83         phy->ops.get_cfg_done = e1000_null_ops_generic;
   84         phy->ops.get_cable_length = e1000_null_ops_generic;
   85         phy->ops.get_info = e1000_null_ops_generic;
   86         phy->ops.set_page = e1000_null_set_page;
   87         phy->ops.read_reg = e1000_null_read_reg;
   88         phy->ops.read_reg_locked = e1000_null_read_reg;
   89         phy->ops.read_reg_page = e1000_null_read_reg;
   90         phy->ops.release = e1000_null_phy_generic;
   91         phy->ops.reset = e1000_null_ops_generic;
   92         phy->ops.set_d0_lplu_state = e1000_null_lplu_state;
   93         phy->ops.set_d3_lplu_state = e1000_null_lplu_state;
   94         phy->ops.write_reg = e1000_null_write_reg;
   95         phy->ops.write_reg_locked = e1000_null_write_reg;
   96         phy->ops.write_reg_page = e1000_null_write_reg;
   97         phy->ops.power_up = e1000_null_phy_generic;
   98         phy->ops.power_down = e1000_null_phy_generic;
   99         phy->ops.read_i2c_byte = e1000_read_i2c_byte_null;
  100         phy->ops.write_i2c_byte = e1000_write_i2c_byte_null;
  101         phy->ops.cfg_on_link_up = e1000_null_ops_generic;
  102 }
  103 
  104 /**
  105  *  e1000_null_set_page - No-op function, return 0
  106  *  @hw: pointer to the HW structure
  107  *  @data: dummy variable
  108  **/
  109 s32 e1000_null_set_page(struct e1000_hw E1000_UNUSEDARG *hw,
  110                         u16 E1000_UNUSEDARG data)
  111 {
  112         DEBUGFUNC("e1000_null_set_page");
  113         return E1000_SUCCESS;
  114 }
  115 
  116 /**
  117  *  e1000_null_read_reg - No-op function, return 0
  118  *  @hw: pointer to the HW structure
  119  *  @offset: dummy variable
  120  *  @data: dummy variable
  121  **/
  122 s32 e1000_null_read_reg(struct e1000_hw E1000_UNUSEDARG *hw,
  123                         u32 E1000_UNUSEDARG offset, u16 E1000_UNUSEDARG *data)
  124 {
  125         DEBUGFUNC("e1000_null_read_reg");
  126         return E1000_SUCCESS;
  127 }
  128 
  129 /**
  130  *  e1000_null_phy_generic - No-op function, return void
  131  *  @hw: pointer to the HW structure
  132  **/
  133 void e1000_null_phy_generic(struct e1000_hw E1000_UNUSEDARG *hw)
  134 {
  135         DEBUGFUNC("e1000_null_phy_generic");
  136         return;
  137 }
  138 
  139 /**
  140  *  e1000_null_lplu_state - No-op function, return 0
  141  *  @hw: pointer to the HW structure
  142  *  @active: dummy variable
  143  **/
  144 s32 e1000_null_lplu_state(struct e1000_hw E1000_UNUSEDARG *hw,
  145                           bool E1000_UNUSEDARG active)
  146 {
  147         DEBUGFUNC("e1000_null_lplu_state");
  148         return E1000_SUCCESS;
  149 }
  150 
  151 /**
  152  *  e1000_null_write_reg - No-op function, return 0
  153  *  @hw: pointer to the HW structure
  154  *  @offset: dummy variable
  155  *  @data: dummy variable
  156  **/
  157 s32 e1000_null_write_reg(struct e1000_hw E1000_UNUSEDARG *hw,
  158                          u32 E1000_UNUSEDARG offset, u16 E1000_UNUSEDARG data)
  159 {
  160         DEBUGFUNC("e1000_null_write_reg");
  161         return E1000_SUCCESS;
  162 }
  163 
  164 /**
  165  *  e1000_read_i2c_byte_null - No-op function, return 0
  166  *  @hw: pointer to hardware structure
  167  *  @byte_offset: byte offset to write
  168  *  @dev_addr: device address
  169  *  @data: data value read
  170  *
  171  **/
  172 s32 e1000_read_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw,
  173                              u8 E1000_UNUSEDARG byte_offset,
  174                              u8 E1000_UNUSEDARG dev_addr,
  175                              u8 E1000_UNUSEDARG *data)
  176 {
  177         DEBUGFUNC("e1000_read_i2c_byte_null");
  178         return E1000_SUCCESS;
  179 }
  180 
  181 /**
  182  *  e1000_write_i2c_byte_null - No-op function, return 0
  183  *  @hw: pointer to hardware structure
  184  *  @byte_offset: byte offset to write
  185  *  @dev_addr: device address
  186  *  @data: data value to write
  187  *
  188  **/
  189 s32 e1000_write_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw,
  190                               u8 E1000_UNUSEDARG byte_offset,
  191                               u8 E1000_UNUSEDARG dev_addr,
  192                               u8 E1000_UNUSEDARG data)
  193 {
  194         DEBUGFUNC("e1000_write_i2c_byte_null");
  195         return E1000_SUCCESS;
  196 }
  197 
  198 /**
  199  *  e1000_check_reset_block_generic - Check if PHY reset is blocked
  200  *  @hw: pointer to the HW structure
  201  *
  202  *  Read the PHY management control register and check whether a PHY reset
  203  *  is blocked.  If a reset is not blocked return E1000_SUCCESS, otherwise
  204  *  return E1000_BLK_PHY_RESET (12).
  205  **/
  206 s32 e1000_check_reset_block_generic(struct e1000_hw *hw)
  207 {
  208         u32 manc;
  209 
  210         DEBUGFUNC("e1000_check_reset_block");
  211 
  212         manc = E1000_READ_REG(hw, E1000_MANC);
  213 
  214         return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
  215                E1000_BLK_PHY_RESET : E1000_SUCCESS;
  216 }
  217 
  218 /**
  219  *  e1000_get_phy_id - Retrieve the PHY ID and revision
  220  *  @hw: pointer to the HW structure
  221  *
  222  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
  223  *  revision in the hardware structure.
  224  **/
  225 s32 e1000_get_phy_id(struct e1000_hw *hw)
  226 {
  227         struct e1000_phy_info *phy = &hw->phy;
  228         s32 ret_val = E1000_SUCCESS;
  229         u16 phy_id;
  230         u16 retry_count = 0;
  231 
  232         DEBUGFUNC("e1000_get_phy_id");
  233 
  234         if (!phy->ops.read_reg)
  235                 return E1000_SUCCESS;
  236 
  237         while (retry_count < 2) {
  238                 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
  239                 if (ret_val)
  240                         return ret_val;
  241 
  242                 phy->id = (u32)(phy_id << 16);
  243                 usec_delay(20);
  244                 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
  245                 if (ret_val)
  246                         return ret_val;
  247 
  248                 phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
  249                 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
  250 
  251                 if (phy->id != 0 && phy->id != PHY_REVISION_MASK)
  252                         return E1000_SUCCESS;
  253 
  254                 retry_count++;
  255         }
  256 
  257         return E1000_SUCCESS;
  258 }
  259 
  260 /**
  261  *  e1000_phy_reset_dsp_generic - Reset PHY DSP
  262  *  @hw: pointer to the HW structure
  263  *
  264  *  Reset the digital signal processor.
  265  **/
  266 s32 e1000_phy_reset_dsp_generic(struct e1000_hw *hw)
  267 {
  268         s32 ret_val;
  269 
  270         DEBUGFUNC("e1000_phy_reset_dsp_generic");
  271 
  272         if (!hw->phy.ops.write_reg)
  273                 return E1000_SUCCESS;
  274 
  275         ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
  276         if (ret_val)
  277                 return ret_val;
  278 
  279         return hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0);
  280 }
  281 
  282 /**
  283  *  e1000_read_phy_reg_mdic - Read MDI control register
  284  *  @hw: pointer to the HW structure
  285  *  @offset: register offset to be read
  286  *  @data: pointer to the read data
  287  *
  288  *  Reads the MDI control register in the PHY at offset and stores the
  289  *  information read to data.
  290  **/
  291 s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
  292 {
  293         struct e1000_phy_info *phy = &hw->phy;
  294         u32 i, mdic = 0;
  295 
  296         DEBUGFUNC("e1000_read_phy_reg_mdic");
  297 
  298         if (offset > MAX_PHY_REG_ADDRESS) {
  299                 DEBUGOUT1("PHY Address %d is out of range\n", offset);
  300                 return -E1000_ERR_PARAM;
  301         }
  302 
  303         /* Set up Op-code, Phy Address, and register offset in the MDI
  304          * Control register.  The MAC will take care of interfacing with the
  305          * PHY to retrieve the desired data.
  306          */
  307         mdic = ((offset << E1000_MDIC_REG_SHIFT) |
  308                 (phy->addr << E1000_MDIC_PHY_SHIFT) |
  309                 (E1000_MDIC_OP_READ));
  310 
  311         E1000_WRITE_REG(hw, E1000_MDIC, mdic);
  312 
  313         /* Poll the ready bit to see if the MDI read completed
  314          * Increasing the time out as testing showed failures with
  315          * the lower time out
  316          */
  317         for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
  318                 usec_delay_irq(50);
  319                 mdic = E1000_READ_REG(hw, E1000_MDIC);
  320                 if (mdic & E1000_MDIC_READY)
  321                         break;
  322         }
  323         if (!(mdic & E1000_MDIC_READY)) {
  324                 DEBUGOUT("MDI Read did not complete\n");
  325                 return -E1000_ERR_PHY;
  326         }
  327         if (mdic & E1000_MDIC_ERROR) {
  328                 DEBUGOUT("MDI Error\n");
  329                 return -E1000_ERR_PHY;
  330         }
  331         if (((mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT) != offset) {
  332                 DEBUGOUT2("MDI Read offset error - requested %d, returned %d\n",
  333                           offset,
  334                           (mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
  335                 return -E1000_ERR_PHY;
  336         }
  337         *data = (u16) mdic;
  338 
  339         /* Allow some time after each MDIC transaction to avoid
  340          * reading duplicate data in the next MDIC transaction.
  341          */
  342         if (hw->mac.type == e1000_pch2lan)
  343                 usec_delay_irq(100);
  344 
  345         return E1000_SUCCESS;
  346 }
  347 
  348 /**
  349  *  e1000_write_phy_reg_mdic - Write MDI control register
  350  *  @hw: pointer to the HW structure
  351  *  @offset: register offset to write to
  352  *  @data: data to write to register at offset
  353  *
  354  *  Writes data to MDI control register in the PHY at offset.
  355  **/
  356 s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
  357 {
  358         struct e1000_phy_info *phy = &hw->phy;
  359         u32 i, mdic = 0;
  360 
  361         DEBUGFUNC("e1000_write_phy_reg_mdic");
  362 
  363         if (offset > MAX_PHY_REG_ADDRESS) {
  364                 DEBUGOUT1("PHY Address %d is out of range\n", offset);
  365                 return -E1000_ERR_PARAM;
  366         }
  367 
  368         /* Set up Op-code, Phy Address, and register offset in the MDI
  369          * Control register.  The MAC will take care of interfacing with the
  370          * PHY to retrieve the desired data.
  371          */
  372         mdic = (((u32)data) |
  373                 (offset << E1000_MDIC_REG_SHIFT) |
  374                 (phy->addr << E1000_MDIC_PHY_SHIFT) |
  375                 (E1000_MDIC_OP_WRITE));
  376 
  377         E1000_WRITE_REG(hw, E1000_MDIC, mdic);
  378 
  379         /* Poll the ready bit to see if the MDI read completed
  380          * Increasing the time out as testing showed failures with
  381          * the lower time out
  382          */
  383         for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
  384                 usec_delay_irq(50);
  385                 mdic = E1000_READ_REG(hw, E1000_MDIC);
  386                 if (mdic & E1000_MDIC_READY)
  387                         break;
  388         }
  389         if (!(mdic & E1000_MDIC_READY)) {
  390                 DEBUGOUT("MDI Write did not complete\n");
  391                 return -E1000_ERR_PHY;
  392         }
  393         if (mdic & E1000_MDIC_ERROR) {
  394                 DEBUGOUT("MDI Error\n");
  395                 return -E1000_ERR_PHY;
  396         }
  397         if (((mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT) != offset) {
  398                 DEBUGOUT2("MDI Write offset error - requested %d, returned %d\n",
  399                           offset,
  400                           (mdic & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
  401                 return -E1000_ERR_PHY;
  402         }
  403 
  404         /* Allow some time after each MDIC transaction to avoid
  405          * reading duplicate data in the next MDIC transaction.
  406          */
  407         if (hw->mac.type == e1000_pch2lan)
  408                 usec_delay_irq(100);
  409 
  410         return E1000_SUCCESS;
  411 }
  412 
  413 /**
  414  *  e1000_read_phy_reg_i2c - Read PHY register using i2c
  415  *  @hw: pointer to the HW structure
  416  *  @offset: register offset to be read
  417  *  @data: pointer to the read data
  418  *
  419  *  Reads the PHY register at offset using the i2c interface and stores the
  420  *  retrieved information in data.
  421  **/
  422 s32 e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
  423 {
  424         struct e1000_phy_info *phy = &hw->phy;
  425         u32 i, i2ccmd = 0;
  426 
  427         DEBUGFUNC("e1000_read_phy_reg_i2c");
  428 
  429         /* Set up Op-code, Phy Address, and register address in the I2CCMD
  430          * register.  The MAC will take care of interfacing with the
  431          * PHY to retrieve the desired data.
  432          */
  433         i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
  434                   (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
  435                   (E1000_I2CCMD_OPCODE_READ));
  436 
  437         E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
  438 
  439         /* Poll the ready bit to see if the I2C read completed */
  440         for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
  441                 usec_delay(50);
  442                 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
  443                 if (i2ccmd & E1000_I2CCMD_READY)
  444                         break;
  445         }
  446         if (!(i2ccmd & E1000_I2CCMD_READY)) {
  447                 DEBUGOUT("I2CCMD Read did not complete\n");
  448                 return -E1000_ERR_PHY;
  449         }
  450         if (i2ccmd & E1000_I2CCMD_ERROR) {
  451                 DEBUGOUT("I2CCMD Error bit set\n");
  452                 return -E1000_ERR_PHY;
  453         }
  454 
  455         /* Need to byte-swap the 16-bit value. */
  456         *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
  457 
  458         return E1000_SUCCESS;
  459 }
  460 
  461 /**
  462  *  e1000_write_phy_reg_i2c - Write PHY register using i2c
  463  *  @hw: pointer to the HW structure
  464  *  @offset: register offset to write to
  465  *  @data: data to write at register offset
  466  *
  467  *  Writes the data to PHY register at the offset using the i2c interface.
  468  **/
  469 s32 e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
  470 {
  471         struct e1000_phy_info *phy = &hw->phy;
  472         u32 i, i2ccmd = 0;
  473         u16 phy_data_swapped;
  474 
  475         DEBUGFUNC("e1000_write_phy_reg_i2c");
  476 
  477         /* Prevent overwriting SFP I2C EEPROM which is at A0 address.*/
  478         if ((hw->phy.addr == 0) || (hw->phy.addr > 7)) {
  479                 DEBUGOUT1("PHY I2C Address %d is out of range.\n",
  480                           hw->phy.addr);
  481                 return -E1000_ERR_CONFIG;
  482         }
  483 
  484         /* Swap the data bytes for the I2C interface */
  485         phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
  486 
  487         /* Set up Op-code, Phy Address, and register address in the I2CCMD
  488          * register.  The MAC will take care of interfacing with the
  489          * PHY to retrieve the desired data.
  490          */
  491         i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
  492                   (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
  493                   E1000_I2CCMD_OPCODE_WRITE |
  494                   phy_data_swapped);
  495 
  496         E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
  497 
  498         /* Poll the ready bit to see if the I2C read completed */
  499         for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
  500                 usec_delay(50);
  501                 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
  502                 if (i2ccmd & E1000_I2CCMD_READY)
  503                         break;
  504         }
  505         if (!(i2ccmd & E1000_I2CCMD_READY)) {
  506                 DEBUGOUT("I2CCMD Write did not complete\n");
  507                 return -E1000_ERR_PHY;
  508         }
  509         if (i2ccmd & E1000_I2CCMD_ERROR) {
  510                 DEBUGOUT("I2CCMD Error bit set\n");
  511                 return -E1000_ERR_PHY;
  512         }
  513 
  514         return E1000_SUCCESS;
  515 }
  516 
  517 /**
  518  *  e1000_read_sfp_data_byte - Reads SFP module data.
  519  *  @hw: pointer to the HW structure
  520  *  @offset: byte location offset to be read
  521  *  @data: read data buffer pointer
  522  *
  523  *  Reads one byte from SFP module data stored
  524  *  in SFP resided EEPROM memory or SFP diagnostic area.
  525  *  Function should be called with
  526  *  E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access
  527  *  E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters
  528  *  access
  529  **/
  530 s32 e1000_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data)
  531 {
  532         u32 i = 0;
  533         u32 i2ccmd = 0;
  534         u32 data_local = 0;
  535 
  536         DEBUGFUNC("e1000_read_sfp_data_byte");
  537 
  538         if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) {
  539                 DEBUGOUT("I2CCMD command address exceeds upper limit\n");
  540                 return -E1000_ERR_PHY;
  541         }
  542 
  543         /* Set up Op-code, EEPROM Address,in the I2CCMD
  544          * register. The MAC will take care of interfacing with the
  545          * EEPROM to retrieve the desired data.
  546          */
  547         i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
  548                   E1000_I2CCMD_OPCODE_READ);
  549 
  550         E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
  551 
  552         /* Poll the ready bit to see if the I2C read completed */
  553         for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
  554                 usec_delay(50);
  555                 data_local = E1000_READ_REG(hw, E1000_I2CCMD);
  556                 if (data_local & E1000_I2CCMD_READY)
  557                         break;
  558         }
  559         if (!(data_local & E1000_I2CCMD_READY)) {
  560                 DEBUGOUT("I2CCMD Read did not complete\n");
  561                 return -E1000_ERR_PHY;
  562         }
  563         if (data_local & E1000_I2CCMD_ERROR) {
  564                 DEBUGOUT("I2CCMD Error bit set\n");
  565                 return -E1000_ERR_PHY;
  566         }
  567         *data = (u8) data_local & 0xFF;
  568 
  569         return E1000_SUCCESS;
  570 }
  571 
  572 /**
  573  *  e1000_write_sfp_data_byte - Writes SFP module data.
  574  *  @hw: pointer to the HW structure
  575  *  @offset: byte location offset to write to
  576  *  @data: data to write
  577  *
  578  *  Writes one byte to SFP module data stored
  579  *  in SFP resided EEPROM memory or SFP diagnostic area.
  580  *  Function should be called with
  581  *  E1000_I2CCMD_SFP_DATA_ADDR(<byte offset>) for SFP module database access
  582  *  E1000_I2CCMD_SFP_DIAG_ADDR(<byte offset>) for SFP diagnostics parameters
  583  *  access
  584  **/
  585 s32 e1000_write_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 data)
  586 {
  587         u32 i = 0;
  588         u32 i2ccmd = 0;
  589         u32 data_local = 0;
  590 
  591         DEBUGFUNC("e1000_write_sfp_data_byte");
  592 
  593         if (offset > E1000_I2CCMD_SFP_DIAG_ADDR(255)) {
  594                 DEBUGOUT("I2CCMD command address exceeds upper limit\n");
  595                 return -E1000_ERR_PHY;
  596         }
  597         /* The programming interface is 16 bits wide
  598          * so we need to read the whole word first
  599          * then update appropriate byte lane and write
  600          * the updated word back.
  601          */
  602         /* Set up Op-code, EEPROM Address,in the I2CCMD
  603          * register. The MAC will take care of interfacing
  604          * with an EEPROM to write the data given.
  605          */
  606         i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
  607                   E1000_I2CCMD_OPCODE_READ);
  608         /* Set a command to read single word */
  609         E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
  610         for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
  611                 usec_delay(50);
  612                 /* Poll the ready bit to see if lastly
  613                  * launched I2C operation completed
  614                  */
  615                 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
  616                 if (i2ccmd & E1000_I2CCMD_READY) {
  617                         /* Check if this is READ or WRITE phase */
  618                         if ((i2ccmd & E1000_I2CCMD_OPCODE_READ) ==
  619                             E1000_I2CCMD_OPCODE_READ) {
  620                                 /* Write the selected byte
  621                                  * lane and update whole word
  622                                  */
  623                                 data_local = i2ccmd & 0xFF00;
  624                                 data_local |= (u32)data;
  625                                 i2ccmd = ((offset <<
  626                                         E1000_I2CCMD_REG_ADDR_SHIFT) |
  627                                         E1000_I2CCMD_OPCODE_WRITE | data_local);
  628                                 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
  629                         } else {
  630                                 break;
  631                         }
  632                 }
  633         }
  634         if (!(i2ccmd & E1000_I2CCMD_READY)) {
  635                 DEBUGOUT("I2CCMD Write did not complete\n");
  636                 return -E1000_ERR_PHY;
  637         }
  638         if (i2ccmd & E1000_I2CCMD_ERROR) {
  639                 DEBUGOUT("I2CCMD Error bit set\n");
  640                 return -E1000_ERR_PHY;
  641         }
  642         return E1000_SUCCESS;
  643 }
  644 
  645 /**
  646  *  e1000_read_phy_reg_m88 - Read m88 PHY register
  647  *  @hw: pointer to the HW structure
  648  *  @offset: register offset to be read
  649  *  @data: pointer to the read data
  650  *
  651  *  Acquires semaphore, if necessary, then reads the PHY register at offset
  652  *  and storing the retrieved information in data.  Release any acquired
  653  *  semaphores before exiting.
  654  **/
  655 s32 e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data)
  656 {
  657         s32 ret_val;
  658 
  659         DEBUGFUNC("e1000_read_phy_reg_m88");
  660 
  661         if (!hw->phy.ops.acquire)
  662                 return E1000_SUCCESS;
  663 
  664         ret_val = hw->phy.ops.acquire(hw);
  665         if (ret_val)
  666                 return ret_val;
  667 
  668         ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
  669                                           data);
  670 
  671         hw->phy.ops.release(hw);
  672 
  673         return ret_val;
  674 }
  675 
  676 /**
  677  *  e1000_write_phy_reg_m88 - Write m88 PHY register
  678  *  @hw: pointer to the HW structure
  679  *  @offset: register offset to write to
  680  *  @data: data to write at register offset
  681  *
  682  *  Acquires semaphore, if necessary, then writes the data to PHY register
  683  *  at the offset.  Release any acquired semaphores before exiting.
  684  **/
  685 s32 e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data)
  686 {
  687         s32 ret_val;
  688 
  689         DEBUGFUNC("e1000_write_phy_reg_m88");
  690 
  691         if (!hw->phy.ops.acquire)
  692                 return E1000_SUCCESS;
  693 
  694         ret_val = hw->phy.ops.acquire(hw);
  695         if (ret_val)
  696                 return ret_val;
  697 
  698         ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
  699                                            data);
  700 
  701         hw->phy.ops.release(hw);
  702 
  703         return ret_val;
  704 }
  705 
  706 /**
  707  *  e1000_set_page_igp - Set page as on IGP-like PHY(s)
  708  *  @hw: pointer to the HW structure
  709  *  @page: page to set (shifted left when necessary)
  710  *
  711  *  Sets PHY page required for PHY register access.  Assumes semaphore is
  712  *  already acquired.  Note, this function sets phy.addr to 1 so the caller
  713  *  must set it appropriately (if necessary) after this function returns.
  714  **/
  715 s32 e1000_set_page_igp(struct e1000_hw *hw, u16 page)
  716 {
  717         DEBUGFUNC("e1000_set_page_igp");
  718 
  719         DEBUGOUT1("Setting page 0x%x\n", page);
  720 
  721         hw->phy.addr = 1;
  722 
  723         return e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, page);
  724 }
  725 
  726 /**
  727  *  __e1000_read_phy_reg_igp - Read igp PHY register
  728  *  @hw: pointer to the HW structure
  729  *  @offset: register offset to be read
  730  *  @data: pointer to the read data
  731  *  @locked: semaphore has already been acquired or not
  732  *
  733  *  Acquires semaphore, if necessary, then reads the PHY register at offset
  734  *  and stores the retrieved information in data.  Release any acquired
  735  *  semaphores before exiting.
  736  **/
  737 static s32 __e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data,
  738                                     bool locked)
  739 {
  740         s32 ret_val = E1000_SUCCESS;
  741 
  742         DEBUGFUNC("__e1000_read_phy_reg_igp");
  743 
  744         if (!locked) {
  745                 if (!hw->phy.ops.acquire)
  746                         return E1000_SUCCESS;
  747 
  748                 ret_val = hw->phy.ops.acquire(hw);
  749                 if (ret_val)
  750                         return ret_val;
  751         }
  752 
  753         if (offset > MAX_PHY_MULTI_PAGE_REG)
  754                 ret_val = e1000_write_phy_reg_mdic(hw,
  755                                                    IGP01E1000_PHY_PAGE_SELECT,
  756                                                    (u16)offset);
  757         if (!ret_val)
  758                 ret_val = e1000_read_phy_reg_mdic(hw,
  759                                                   MAX_PHY_REG_ADDRESS & offset,
  760                                                   data);
  761         if (!locked)
  762                 hw->phy.ops.release(hw);
  763 
  764         return ret_val;
  765 }
  766 
  767 /**
  768  *  e1000_read_phy_reg_igp - Read igp PHY register
  769  *  @hw: pointer to the HW structure
  770  *  @offset: register offset to be read
  771  *  @data: pointer to the read data
  772  *
  773  *  Acquires semaphore then reads the PHY register at offset and stores the
  774  *  retrieved information in data.
  775  *  Release the acquired semaphore before exiting.
  776  **/
  777 s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
  778 {
  779         return __e1000_read_phy_reg_igp(hw, offset, data, false);
  780 }
  781 
  782 /**
  783  *  e1000_read_phy_reg_igp_locked - Read igp PHY register
  784  *  @hw: pointer to the HW structure
  785  *  @offset: register offset to be read
  786  *  @data: pointer to the read data
  787  *
  788  *  Reads the PHY register at offset and stores the retrieved information
  789  *  in data.  Assumes semaphore already acquired.
  790  **/
  791 s32 e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data)
  792 {
  793         return __e1000_read_phy_reg_igp(hw, offset, data, true);
  794 }
  795 
  796 /**
  797  *  e1000_write_phy_reg_igp - Write igp PHY register
  798  *  @hw: pointer to the HW structure
  799  *  @offset: register offset to write to
  800  *  @data: data to write at register offset
  801  *  @locked: semaphore has already been acquired or not
  802  *
  803  *  Acquires semaphore, if necessary, then writes the data to PHY register
  804  *  at the offset.  Release any acquired semaphores before exiting.
  805  **/
  806 static s32 __e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data,
  807                                      bool locked)
  808 {
  809         s32 ret_val = E1000_SUCCESS;
  810 
  811         DEBUGFUNC("e1000_write_phy_reg_igp");
  812 
  813         if (!locked) {
  814                 if (!hw->phy.ops.acquire)
  815                         return E1000_SUCCESS;
  816 
  817                 ret_val = hw->phy.ops.acquire(hw);
  818                 if (ret_val)
  819                         return ret_val;
  820         }
  821 
  822         if (offset > MAX_PHY_MULTI_PAGE_REG)
  823                 ret_val = e1000_write_phy_reg_mdic(hw,
  824                                                    IGP01E1000_PHY_PAGE_SELECT,
  825                                                    (u16)offset);
  826         if (!ret_val)
  827                 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS &
  828                                                        offset,
  829                                                    data);
  830         if (!locked)
  831                 hw->phy.ops.release(hw);
  832 
  833         return ret_val;
  834 }
  835 
  836 /**
  837  *  e1000_write_phy_reg_igp - Write igp PHY register
  838  *  @hw: pointer to the HW structure
  839  *  @offset: register offset to write to
  840  *  @data: data to write at register offset
  841  *
  842  *  Acquires semaphore then writes the data to PHY register
  843  *  at the offset.  Release any acquired semaphores before exiting.
  844  **/
  845 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
  846 {
  847         return __e1000_write_phy_reg_igp(hw, offset, data, false);
  848 }
  849 
  850 /**
  851  *  e1000_write_phy_reg_igp_locked - Write igp PHY register
  852  *  @hw: pointer to the HW structure
  853  *  @offset: register offset to write to
  854  *  @data: data to write at register offset
  855  *
  856  *  Writes the data to PHY register at the offset.
  857  *  Assumes semaphore already acquired.
  858  **/
  859 s32 e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data)
  860 {
  861         return __e1000_write_phy_reg_igp(hw, offset, data, true);
  862 }
  863 
  864 /**
  865  *  __e1000_read_kmrn_reg - Read kumeran register
  866  *  @hw: pointer to the HW structure
  867  *  @offset: register offset to be read
  868  *  @data: pointer to the read data
  869  *  @locked: semaphore has already been acquired or not
  870  *
  871  *  Acquires semaphore, if necessary.  Then reads the PHY register at offset
  872  *  using the kumeran interface.  The information retrieved is stored in data.
  873  *  Release any acquired semaphores before exiting.
  874  **/
  875 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data,
  876                                  bool locked)
  877 {
  878         u32 kmrnctrlsta;
  879 
  880         DEBUGFUNC("__e1000_read_kmrn_reg");
  881 
  882         if (!locked) {
  883                 s32 ret_val = E1000_SUCCESS;
  884 
  885                 if (!hw->phy.ops.acquire)
  886                         return E1000_SUCCESS;
  887 
  888                 ret_val = hw->phy.ops.acquire(hw);
  889                 if (ret_val)
  890                         return ret_val;
  891         }
  892 
  893         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
  894                        E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
  895         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
  896         E1000_WRITE_FLUSH(hw);
  897 
  898         usec_delay(2);
  899 
  900         kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
  901         *data = (u16)kmrnctrlsta;
  902 
  903         if (!locked)
  904                 hw->phy.ops.release(hw);
  905 
  906         return E1000_SUCCESS;
  907 }
  908 
  909 /**
  910  *  e1000_read_kmrn_reg_generic -  Read kumeran register
  911  *  @hw: pointer to the HW structure
  912  *  @offset: register offset to be read
  913  *  @data: pointer to the read data
  914  *
  915  *  Acquires semaphore then reads the PHY register at offset using the
  916  *  kumeran interface.  The information retrieved is stored in data.
  917  *  Release the acquired semaphore before exiting.
  918  **/
  919 s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
  920 {
  921         return __e1000_read_kmrn_reg(hw, offset, data, false);
  922 }
  923 
  924 /**
  925  *  e1000_read_kmrn_reg_locked -  Read kumeran register
  926  *  @hw: pointer to the HW structure
  927  *  @offset: register offset to be read
  928  *  @data: pointer to the read data
  929  *
  930  *  Reads the PHY register at offset using the kumeran interface.  The
  931  *  information retrieved is stored in data.
  932  *  Assumes semaphore already acquired.
  933  **/
  934 s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
  935 {
  936         return __e1000_read_kmrn_reg(hw, offset, data, true);
  937 }
  938 
  939 /**
  940  *  __e1000_write_kmrn_reg - Write kumeran register
  941  *  @hw: pointer to the HW structure
  942  *  @offset: register offset to write to
  943  *  @data: data to write at register offset
  944  *  @locked: semaphore has already been acquired or not
  945  *
  946  *  Acquires semaphore, if necessary.  Then write the data to PHY register
  947  *  at the offset using the kumeran interface.  Release any acquired semaphores
  948  *  before exiting.
  949  **/
  950 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data,
  951                                   bool locked)
  952 {
  953         u32 kmrnctrlsta;
  954 
  955         DEBUGFUNC("e1000_write_kmrn_reg_generic");
  956 
  957         if (!locked) {
  958                 s32 ret_val = E1000_SUCCESS;
  959 
  960                 if (!hw->phy.ops.acquire)
  961                         return E1000_SUCCESS;
  962 
  963                 ret_val = hw->phy.ops.acquire(hw);
  964                 if (ret_val)
  965                         return ret_val;
  966         }
  967 
  968         kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
  969                        E1000_KMRNCTRLSTA_OFFSET) | data;
  970         E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
  971         E1000_WRITE_FLUSH(hw);
  972 
  973         usec_delay(2);
  974 
  975         if (!locked)
  976                 hw->phy.ops.release(hw);
  977 
  978         return E1000_SUCCESS;
  979 }
  980 
  981 /**
  982  *  e1000_write_kmrn_reg_generic -  Write kumeran register
  983  *  @hw: pointer to the HW structure
  984  *  @offset: register offset to write to
  985  *  @data: data to write at register offset
  986  *
  987  *  Acquires semaphore then writes the data to the PHY register at the offset
  988  *  using the kumeran interface.  Release the acquired semaphore before exiting.
  989  **/
  990 s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data)
  991 {
  992         return __e1000_write_kmrn_reg(hw, offset, data, false);
  993 }
  994 
  995 /**
  996  *  e1000_write_kmrn_reg_locked -  Write kumeran register
  997  *  @hw: pointer to the HW structure
  998  *  @offset: register offset to write to
  999  *  @data: data to write at register offset
 1000  *
 1001  *  Write the data to PHY register at the offset using the kumeran interface.
 1002  *  Assumes semaphore already acquired.
 1003  **/
 1004 s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
 1005 {
 1006         return __e1000_write_kmrn_reg(hw, offset, data, true);
 1007 }
 1008 
 1009 /**
 1010  *  e1000_set_master_slave_mode - Setup PHY for Master/slave mode
 1011  *  @hw: pointer to the HW structure
 1012  *
 1013  *  Sets up Master/slave mode
 1014  **/
 1015 static s32 e1000_set_master_slave_mode(struct e1000_hw *hw)
 1016 {
 1017         s32 ret_val;
 1018         u16 phy_data;
 1019 
 1020         /* Resolve Master/Slave mode */
 1021         ret_val = hw->phy.ops.read_reg(hw, PHY_1000T_CTRL, &phy_data);
 1022         if (ret_val)
 1023                 return ret_val;
 1024 
 1025         /* load defaults for future use */
 1026         hw->phy.original_ms_type = (phy_data & CR_1000T_MS_ENABLE) ?
 1027                                    ((phy_data & CR_1000T_MS_VALUE) ?
 1028                                     e1000_ms_force_master :
 1029                                     e1000_ms_force_slave) : e1000_ms_auto;
 1030 
 1031         switch (hw->phy.ms_type) {
 1032         case e1000_ms_force_master:
 1033                 phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
 1034                 break;
 1035         case e1000_ms_force_slave:
 1036                 phy_data |= CR_1000T_MS_ENABLE;
 1037                 phy_data &= ~(CR_1000T_MS_VALUE);
 1038                 break;
 1039         case e1000_ms_auto:
 1040                 phy_data &= ~CR_1000T_MS_ENABLE;
 1041                 /* FALLTHROUGH */
 1042         default:
 1043                 break;
 1044         }
 1045 
 1046         return hw->phy.ops.write_reg(hw, PHY_1000T_CTRL, phy_data);
 1047 }
 1048 
 1049 /**
 1050  *  e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link
 1051  *  @hw: pointer to the HW structure
 1052  *
 1053  *  Sets up Carrier-sense on Transmit and downshift values.
 1054  **/
 1055 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
 1056 {
 1057         s32 ret_val;
 1058         u16 phy_data;
 1059 
 1060         DEBUGFUNC("e1000_copper_link_setup_82577");
 1061 
 1062         if (hw->phy.type == e1000_phy_82580) {
 1063                 ret_val = hw->phy.ops.reset(hw);
 1064                 if (ret_val) {
 1065                         DEBUGOUT("Error resetting the PHY.\n");
 1066                         return ret_val;
 1067                 }
 1068         }
 1069 
 1070         /* Enable CRS on Tx. This must be set for half-duplex operation. */
 1071         ret_val = hw->phy.ops.read_reg(hw, I82577_CFG_REG, &phy_data);
 1072         if (ret_val)
 1073                 return ret_val;
 1074 
 1075         phy_data |= I82577_CFG_ASSERT_CRS_ON_TX;
 1076 
 1077         /* Enable downshift */
 1078         phy_data |= I82577_CFG_ENABLE_DOWNSHIFT;
 1079 
 1080         ret_val = hw->phy.ops.write_reg(hw, I82577_CFG_REG, phy_data);
 1081         if (ret_val)
 1082                 return ret_val;
 1083 
 1084         /* Set MDI/MDIX mode */
 1085         ret_val = hw->phy.ops.read_reg(hw, I82577_PHY_CTRL_2, &phy_data);
 1086         if (ret_val)
 1087                 return ret_val;
 1088         phy_data &= ~I82577_PHY_CTRL2_MDIX_CFG_MASK;
 1089         /* Options:
 1090          *   0 - Auto (default)
 1091          *   1 - MDI mode
 1092          *   2 - MDI-X mode
 1093          */
 1094         switch (hw->phy.mdix) {
 1095         case 1:
 1096                 break;
 1097         case 2:
 1098                 phy_data |= I82577_PHY_CTRL2_MANUAL_MDIX;
 1099                 break;
 1100         case 0:
 1101                 /* FALLTHROUGH */
 1102         default:
 1103                 phy_data |= I82577_PHY_CTRL2_AUTO_MDI_MDIX;
 1104                 break;
 1105         }
 1106         ret_val = hw->phy.ops.write_reg(hw, I82577_PHY_CTRL_2, phy_data);
 1107         if (ret_val)
 1108                 return ret_val;
 1109 
 1110         return e1000_set_master_slave_mode(hw);
 1111 }
 1112 
 1113 /**
 1114  *  e1000_copper_link_setup_m88 - Setup m88 PHY's for copper link
 1115  *  @hw: pointer to the HW structure
 1116  *
 1117  *  Sets up MDI/MDI-X and polarity for m88 PHY's.  If necessary, transmit clock
 1118  *  and downshift values are set also.
 1119  **/
 1120 s32 e1000_copper_link_setup_m88(struct e1000_hw *hw)
 1121 {
 1122         struct e1000_phy_info *phy = &hw->phy;
 1123         s32 ret_val;
 1124         u16 phy_data;
 1125 
 1126         DEBUGFUNC("e1000_copper_link_setup_m88");
 1127 
 1128 
 1129         /* Enable CRS on Tx. This must be set for half-duplex operation. */
 1130         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 1131         if (ret_val)
 1132                 return ret_val;
 1133 
 1134         /* For BM PHY this bit is downshift enable */
 1135         if (phy->type != e1000_phy_bm)
 1136                 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
 1137 
 1138         /* Options:
 1139          *   MDI/MDI-X = 0 (default)
 1140          *   0 - Auto for all speeds
 1141          *   1 - MDI mode
 1142          *   2 - MDI-X mode
 1143          *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
 1144          */
 1145         phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
 1146 
 1147         switch (phy->mdix) {
 1148         case 1:
 1149                 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
 1150                 break;
 1151         case 2:
 1152                 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
 1153                 break;
 1154         case 3:
 1155                 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
 1156                 break;
 1157         case 0:
 1158                 /* FALLTHROUGH */
 1159         default:
 1160                 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
 1161                 break;
 1162         }
 1163 
 1164         /* Options:
 1165          *   disable_polarity_correction = 0 (default)
 1166          *       Automatic Correction for Reversed Cable Polarity
 1167          *   0 - Disabled
 1168          *   1 - Enabled
 1169          */
 1170         phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
 1171         if (phy->disable_polarity_correction)
 1172                 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
 1173 
 1174         /* Enable downshift on BM (disabled by default) */
 1175         if (phy->type == e1000_phy_bm) {
 1176                 /* For 82574/82583, first disable then enable downshift */
 1177                 if (phy->id == BME1000_E_PHY_ID_R2) {
 1178                         phy_data &= ~BME1000_PSCR_ENABLE_DOWNSHIFT;
 1179                         ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL,
 1180                                                      phy_data);
 1181                         if (ret_val)
 1182                                 return ret_val;
 1183                         /* Commit the changes. */
 1184                         ret_val = phy->ops.commit(hw);
 1185                         if (ret_val) {
 1186                                 DEBUGOUT("Error committing the PHY changes\n");
 1187                                 return ret_val;
 1188                         }
 1189                 }
 1190 
 1191                 phy_data |= BME1000_PSCR_ENABLE_DOWNSHIFT;
 1192         }
 1193 
 1194         ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
 1195         if (ret_val)
 1196                 return ret_val;
 1197 
 1198         if ((phy->type == e1000_phy_m88) &&
 1199             (phy->revision < E1000_REVISION_4) &&
 1200             (phy->id != BME1000_E_PHY_ID_R2)) {
 1201                 /* Force TX_CLK in the Extended PHY Specific Control Register
 1202                  * to 25MHz clock.
 1203                  */
 1204                 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
 1205                                             &phy_data);
 1206                 if (ret_val)
 1207                         return ret_val;
 1208 
 1209                 phy_data |= M88E1000_EPSCR_TX_CLK_25;
 1210 
 1211                 if ((phy->revision == E1000_REVISION_2) &&
 1212                     (phy->id == M88E1111_I_PHY_ID)) {
 1213                         /* 82573L PHY - set the downshift counter to 5x. */
 1214                         phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
 1215                         phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
 1216                 } else {
 1217                         /* Configure Master and Slave downshift values */
 1218                         phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
 1219                                      M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
 1220                         phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
 1221                                      M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
 1222                 }
 1223                 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
 1224                                              phy_data);
 1225                 if (ret_val)
 1226                         return ret_val;
 1227         }
 1228 
 1229         if ((phy->type == e1000_phy_bm) && (phy->id == BME1000_E_PHY_ID_R2)) {
 1230                 /* Set PHY page 0, register 29 to 0x0003 */
 1231                 ret_val = phy->ops.write_reg(hw, 29, 0x0003);
 1232                 if (ret_val)
 1233                         return ret_val;
 1234 
 1235                 /* Set PHY page 0, register 30 to 0x0000 */
 1236                 ret_val = phy->ops.write_reg(hw, 30, 0x0000);
 1237                 if (ret_val)
 1238                         return ret_val;
 1239         }
 1240 
 1241         /* Commit the changes. */
 1242         ret_val = phy->ops.commit(hw);
 1243         if (ret_val) {
 1244                 DEBUGOUT("Error committing the PHY changes\n");
 1245                 return ret_val;
 1246         }
 1247 
 1248         if (phy->type == e1000_phy_82578) {
 1249                 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
 1250                                             &phy_data);
 1251                 if (ret_val)
 1252                         return ret_val;
 1253 
 1254                 /* 82578 PHY - set the downshift count to 1x. */
 1255                 phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE;
 1256                 phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK;
 1257                 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
 1258                                              phy_data);
 1259                 if (ret_val)
 1260                         return ret_val;
 1261         }
 1262 
 1263         return E1000_SUCCESS;
 1264 }
 1265 
 1266 /**
 1267  *  e1000_copper_link_setup_m88_gen2 - Setup m88 PHY's for copper link
 1268  *  @hw: pointer to the HW structure
 1269  *
 1270  *  Sets up MDI/MDI-X and polarity for i347-AT4, m88e1322 and m88e1112 PHY's.
 1271  *  Also enables and sets the downshift parameters.
 1272  **/
 1273 s32 e1000_copper_link_setup_m88_gen2(struct e1000_hw *hw)
 1274 {
 1275         struct e1000_phy_info *phy = &hw->phy;
 1276         s32 ret_val;
 1277         u16 phy_data;
 1278 
 1279         DEBUGFUNC("e1000_copper_link_setup_m88_gen2");
 1280 
 1281 
 1282         /* Enable CRS on Tx. This must be set for half-duplex operation. */
 1283         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 1284         if (ret_val)
 1285                 return ret_val;
 1286 
 1287         /* Options:
 1288          *   MDI/MDI-X = 0 (default)
 1289          *   0 - Auto for all speeds
 1290          *   1 - MDI mode
 1291          *   2 - MDI-X mode
 1292          *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
 1293          */
 1294         phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
 1295 
 1296         switch (phy->mdix) {
 1297         case 1:
 1298                 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
 1299                 break;
 1300         case 2:
 1301                 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
 1302                 break;
 1303         case 3:
 1304                 /* M88E1112 does not support this mode) */
 1305                 if (phy->id != M88E1112_E_PHY_ID) {
 1306                         phy_data |= M88E1000_PSCR_AUTO_X_1000T;
 1307                         break;
 1308                 }
 1309                 /* FALLTHROUGH */
 1310         case 0:
 1311                 /* FALLTHROUGH */
 1312         default:
 1313                 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
 1314                 break;
 1315         }
 1316 
 1317         /* Options:
 1318          *   disable_polarity_correction = 0 (default)
 1319          *       Automatic Correction for Reversed Cable Polarity
 1320          *   0 - Disabled
 1321          *   1 - Enabled
 1322          */
 1323         phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
 1324         if (phy->disable_polarity_correction)
 1325                 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
 1326 
 1327         /* Enable downshift and setting it to X6 */
 1328         if (phy->id == M88E1543_E_PHY_ID) {
 1329                 phy_data &= ~I347AT4_PSCR_DOWNSHIFT_ENABLE;
 1330                 ret_val =
 1331                     phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
 1332                 if (ret_val)
 1333                         return ret_val;
 1334 
 1335                 ret_val = phy->ops.commit(hw);
 1336                 if (ret_val) {
 1337                         DEBUGOUT("Error committing the PHY changes\n");
 1338                         return ret_val;
 1339                 }
 1340         }
 1341 
 1342         phy_data &= ~I347AT4_PSCR_DOWNSHIFT_MASK;
 1343         phy_data |= I347AT4_PSCR_DOWNSHIFT_6X;
 1344         phy_data |= I347AT4_PSCR_DOWNSHIFT_ENABLE;
 1345 
 1346         ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
 1347         if (ret_val)
 1348                 return ret_val;
 1349 
 1350         /* Commit the changes. */
 1351         ret_val = phy->ops.commit(hw);
 1352         if (ret_val) {
 1353                 DEBUGOUT("Error committing the PHY changes\n");
 1354                 return ret_val;
 1355         }
 1356 
 1357         ret_val = e1000_set_master_slave_mode(hw);
 1358         if (ret_val)
 1359                 return ret_val;
 1360 
 1361         return E1000_SUCCESS;
 1362 }
 1363 
 1364 /**
 1365  *  e1000_copper_link_setup_igp - Setup igp PHY's for copper link
 1366  *  @hw: pointer to the HW structure
 1367  *
 1368  *  Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
 1369  *  igp PHY's.
 1370  **/
 1371 s32 e1000_copper_link_setup_igp(struct e1000_hw *hw)
 1372 {
 1373         struct e1000_phy_info *phy = &hw->phy;
 1374         s32 ret_val;
 1375         u16 data;
 1376 
 1377         DEBUGFUNC("e1000_copper_link_setup_igp");
 1378 
 1379 
 1380         ret_val = hw->phy.ops.reset(hw);
 1381         if (ret_val) {
 1382                 DEBUGOUT("Error resetting the PHY.\n");
 1383                 return ret_val;
 1384         }
 1385 
 1386         /* Wait 100ms for MAC to configure PHY from NVM settings, to avoid
 1387          * timeout issues when LFS is enabled.
 1388          */
 1389         msec_delay(100);
 1390 
 1391         /* The NVM settings will configure LPLU in D3 for
 1392          * non-IGP1 PHYs.
 1393          */
 1394         if (phy->type == e1000_phy_igp) {
 1395                 /* disable lplu d3 during driver init */
 1396                 ret_val = hw->phy.ops.set_d3_lplu_state(hw, false);
 1397                 if (ret_val) {
 1398                         DEBUGOUT("Error Disabling LPLU D3\n");
 1399                         return ret_val;
 1400                 }
 1401         }
 1402 
 1403         /* disable lplu d0 during driver init */
 1404         if (hw->phy.ops.set_d0_lplu_state) {
 1405                 ret_val = hw->phy.ops.set_d0_lplu_state(hw, false);
 1406                 if (ret_val) {
 1407                         DEBUGOUT("Error Disabling LPLU D0\n");
 1408                         return ret_val;
 1409                 }
 1410         }
 1411         /* Configure mdi-mdix settings */
 1412         ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data);
 1413         if (ret_val)
 1414                 return ret_val;
 1415 
 1416         data &= ~IGP01E1000_PSCR_AUTO_MDIX;
 1417 
 1418         switch (phy->mdix) {
 1419         case 1:
 1420                 data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
 1421                 break;
 1422         case 2:
 1423                 data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
 1424                 break;
 1425         case 0:
 1426                 /* FALLTHROUGH */
 1427         default:
 1428                 data |= IGP01E1000_PSCR_AUTO_MDIX;
 1429                 break;
 1430         }
 1431         ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data);
 1432         if (ret_val)
 1433                 return ret_val;
 1434 
 1435         /* set auto-master slave resolution settings */
 1436         if (hw->mac.autoneg) {
 1437                 /* when autonegotiation advertisement is only 1000Mbps then we
 1438                  * should disable SmartSpeed and enable Auto MasterSlave
 1439                  * resolution as hardware default.
 1440                  */
 1441                 if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
 1442                         /* Disable SmartSpeed */
 1443                         ret_val = phy->ops.read_reg(hw,
 1444                                                     IGP01E1000_PHY_PORT_CONFIG,
 1445                                                     &data);
 1446                         if (ret_val)
 1447                                 return ret_val;
 1448 
 1449                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 1450                         ret_val = phy->ops.write_reg(hw,
 1451                                                      IGP01E1000_PHY_PORT_CONFIG,
 1452                                                      data);
 1453                         if (ret_val)
 1454                                 return ret_val;
 1455 
 1456                         /* Set auto Master/Slave resolution process */
 1457                         ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
 1458                         if (ret_val)
 1459                                 return ret_val;
 1460 
 1461                         data &= ~CR_1000T_MS_ENABLE;
 1462                         ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
 1463                         if (ret_val)
 1464                                 return ret_val;
 1465                 }
 1466 
 1467                 ret_val = e1000_set_master_slave_mode(hw);
 1468         }
 1469 
 1470         return ret_val;
 1471 }
 1472 
 1473 /**
 1474  *  e1000_phy_setup_autoneg - Configure PHY for auto-negotiation
 1475  *  @hw: pointer to the HW structure
 1476  *
 1477  *  Reads the MII auto-neg advertisement register and/or the 1000T control
 1478  *  register and if the PHY is already setup for auto-negotiation, then
 1479  *  return successful.  Otherwise, setup advertisement and flow control to
 1480  *  the appropriate values for the wanted auto-negotiation.
 1481  **/
 1482 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
 1483 {
 1484         struct e1000_phy_info *phy = &hw->phy;
 1485         s32 ret_val;
 1486         u16 mii_autoneg_adv_reg;
 1487         u16 mii_1000t_ctrl_reg = 0;
 1488 
 1489         DEBUGFUNC("e1000_phy_setup_autoneg");
 1490 
 1491         phy->autoneg_advertised &= phy->autoneg_mask;
 1492 
 1493         /* Read the MII Auto-Neg Advertisement Register (Address 4). */
 1494         ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
 1495         if (ret_val)
 1496                 return ret_val;
 1497 
 1498         if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
 1499                 /* Read the MII 1000Base-T Control Register (Address 9). */
 1500                 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL,
 1501                                             &mii_1000t_ctrl_reg);
 1502                 if (ret_val)
 1503                         return ret_val;
 1504         }
 1505 
 1506         /* Need to parse both autoneg_advertised and fc and set up
 1507          * the appropriate PHY registers.  First we will parse for
 1508          * autoneg_advertised software override.  Since we can advertise
 1509          * a plethora of combinations, we need to check each bit
 1510          * individually.
 1511          */
 1512 
 1513         /* First we clear all the 10/100 mb speed bits in the Auto-Neg
 1514          * Advertisement Register (Address 4) and the 1000 mb speed bits in
 1515          * the  1000Base-T Control Register (Address 9).
 1516          */
 1517         mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
 1518                                  NWAY_AR_100TX_HD_CAPS |
 1519                                  NWAY_AR_10T_FD_CAPS   |
 1520                                  NWAY_AR_10T_HD_CAPS);
 1521         mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
 1522 
 1523         DEBUGOUT1("autoneg_advertised %x\n", phy->autoneg_advertised);
 1524 
 1525         /* Do we want to advertise 10 Mb Half Duplex? */
 1526         if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
 1527                 DEBUGOUT("Advertise 10mb Half duplex\n");
 1528                 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
 1529         }
 1530 
 1531         /* Do we want to advertise 10 Mb Full Duplex? */
 1532         if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
 1533                 DEBUGOUT("Advertise 10mb Full duplex\n");
 1534                 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
 1535         }
 1536 
 1537         /* Do we want to advertise 100 Mb Half Duplex? */
 1538         if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
 1539                 DEBUGOUT("Advertise 100mb Half duplex\n");
 1540                 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
 1541         }
 1542 
 1543         /* Do we want to advertise 100 Mb Full Duplex? */
 1544         if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
 1545                 DEBUGOUT("Advertise 100mb Full duplex\n");
 1546                 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
 1547         }
 1548 
 1549         /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
 1550         if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
 1551                 DEBUGOUT("Advertise 1000mb Half duplex request denied!\n");
 1552 
 1553         /* Do we want to advertise 1000 Mb Full Duplex? */
 1554         if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
 1555                 DEBUGOUT("Advertise 1000mb Full duplex\n");
 1556                 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
 1557         }
 1558 
 1559         /* Check for a software override of the flow control settings, and
 1560          * setup the PHY advertisement registers accordingly.  If
 1561          * auto-negotiation is enabled, then software will have to set the
 1562          * "PAUSE" bits to the correct value in the Auto-Negotiation
 1563          * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
 1564          * negotiation.
 1565          *
 1566          * The possible values of the "fc" parameter are:
 1567          *      0:  Flow control is completely disabled
 1568          *      1:  Rx flow control is enabled (we can receive pause frames
 1569          *          but not send pause frames).
 1570          *      2:  Tx flow control is enabled (we can send pause frames
 1571          *          but we do not support receiving pause frames).
 1572          *      3:  Both Rx and Tx flow control (symmetric) are enabled.
 1573          *  other:  No software override.  The flow control configuration
 1574          *          in the EEPROM is used.
 1575          */
 1576         switch (hw->fc.current_mode) {
 1577         case e1000_fc_none:
 1578                 /* Flow control (Rx & Tx) is completely disabled by a
 1579                  * software over-ride.
 1580                  */
 1581                 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
 1582                 break;
 1583         case e1000_fc_rx_pause:
 1584                 /* Rx Flow control is enabled, and Tx Flow control is
 1585                  * disabled, by a software over-ride.
 1586                  *
 1587                  * Since there really isn't a way to advertise that we are
 1588                  * capable of Rx Pause ONLY, we will advertise that we
 1589                  * support both symmetric and asymmetric Rx PAUSE.  Later
 1590                  * (in e1000_config_fc_after_link_up) we will disable the
 1591                  * hw's ability to send PAUSE frames.
 1592                  */
 1593                 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
 1594                 break;
 1595         case e1000_fc_tx_pause:
 1596                 /* Tx Flow control is enabled, and Rx Flow control is
 1597                  * disabled, by a software over-ride.
 1598                  */
 1599                 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
 1600                 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
 1601                 break;
 1602         case e1000_fc_full:
 1603                 /* Flow control (both Rx and Tx) is enabled by a software
 1604                  * over-ride.
 1605                  */
 1606                 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
 1607                 break;
 1608         default:
 1609                 DEBUGOUT("Flow control param set incorrectly\n");
 1610                 return -E1000_ERR_CONFIG;
 1611         }
 1612 
 1613         ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
 1614         if (ret_val)
 1615                 return ret_val;
 1616 
 1617         DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
 1618 
 1619         if (phy->autoneg_mask & ADVERTISE_1000_FULL)
 1620                 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL,
 1621                                              mii_1000t_ctrl_reg);
 1622 
 1623         return ret_val;
 1624 }
 1625 
 1626 /**
 1627  *  e1000_copper_link_autoneg - Setup/Enable autoneg for copper link
 1628  *  @hw: pointer to the HW structure
 1629  *
 1630  *  Performs initial bounds checking on autoneg advertisement parameter, then
 1631  *  configure to advertise the full capability.  Setup the PHY to autoneg
 1632  *  and restart the negotiation process between the link partner.  If
 1633  *  autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
 1634  **/
 1635 s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
 1636 {
 1637         struct e1000_phy_info *phy = &hw->phy;
 1638         s32 ret_val;
 1639         u16 phy_ctrl;
 1640 
 1641         DEBUGFUNC("e1000_copper_link_autoneg");
 1642 
 1643         /* Perform some bounds checking on the autoneg advertisement
 1644          * parameter.
 1645          */
 1646         phy->autoneg_advertised &= phy->autoneg_mask;
 1647 
 1648         /* If autoneg_advertised is zero, we assume it was not defaulted
 1649          * by the calling code so we set to advertise full capability.
 1650          */
 1651         if (!phy->autoneg_advertised)
 1652                 phy->autoneg_advertised = phy->autoneg_mask;
 1653 
 1654         DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
 1655         ret_val = e1000_phy_setup_autoneg(hw);
 1656         if (ret_val) {
 1657                 DEBUGOUT("Error Setting up Auto-Negotiation\n");
 1658                 return ret_val;
 1659         }
 1660         DEBUGOUT("Restarting Auto-Neg\n");
 1661 
 1662         /* Restart auto-negotiation by setting the Auto Neg Enable bit and
 1663          * the Auto Neg Restart bit in the PHY control register.
 1664          */
 1665         ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
 1666         if (ret_val)
 1667                 return ret_val;
 1668 
 1669         phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
 1670         ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
 1671         if (ret_val)
 1672                 return ret_val;
 1673 
 1674         /* Does the user want to wait for Auto-Neg to complete here, or
 1675          * check at a later time (for example, callback routine).
 1676          */
 1677         if (phy->autoneg_wait_to_complete) {
 1678                 ret_val = e1000_wait_autoneg(hw);
 1679                 if (ret_val) {
 1680                         DEBUGOUT("Error while waiting for autoneg to complete\n");
 1681                         return ret_val;
 1682                 }
 1683         }
 1684 
 1685         hw->mac.get_link_status = true;
 1686 
 1687         return ret_val;
 1688 }
 1689 
 1690 /**
 1691  *  e1000_setup_copper_link_generic - Configure copper link settings
 1692  *  @hw: pointer to the HW structure
 1693  *
 1694  *  Calls the appropriate function to configure the link for auto-neg or forced
 1695  *  speed and duplex.  Then we check for link, once link is established calls
 1696  *  to configure collision distance and flow control are called.  If link is
 1697  *  not established, we return -E1000_ERR_PHY (-2).
 1698  **/
 1699 s32 e1000_setup_copper_link_generic(struct e1000_hw *hw)
 1700 {
 1701         s32 ret_val;
 1702         bool link = true;
 1703 
 1704         DEBUGFUNC("e1000_setup_copper_link_generic");
 1705 
 1706         if (hw->mac.autoneg) {
 1707                 /* Setup autoneg and flow control advertisement and perform
 1708                  * autonegotiation.
 1709                  */
 1710                 ret_val = e1000_copper_link_autoneg(hw);
 1711                 if (ret_val)
 1712                         return ret_val;
 1713         } else {
 1714                 /* PHY will be set to 10H, 10F, 100H or 100F
 1715                  * depending on user settings.
 1716                  */
 1717                 DEBUGOUT("Forcing Speed and Duplex\n");
 1718                 ret_val = hw->phy.ops.force_speed_duplex(hw);
 1719                 if (ret_val) {
 1720                         DEBUGOUT("Error Forcing Speed and Duplex\n");
 1721                         return ret_val;
 1722                 }
 1723         }
 1724 
 1725         /* Check link status. Wait up to 100 microseconds for link to become
 1726          * valid.
 1727          */
 1728         ret_val = e1000_phy_has_link_generic(hw, COPPER_LINK_UP_LIMIT, 10,
 1729                                              &link);
 1730         if (ret_val)
 1731                 return ret_val;
 1732 
 1733         if (link) {
 1734                 DEBUGOUT("Valid link established!!!\n");
 1735                 hw->mac.ops.config_collision_dist(hw);
 1736                 ret_val = e1000_config_fc_after_link_up_generic(hw);
 1737         } else {
 1738                 DEBUGOUT("Unable to establish link!!!\n");
 1739         }
 1740 
 1741         return ret_val;
 1742 }
 1743 
 1744 /**
 1745  *  e1000_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
 1746  *  @hw: pointer to the HW structure
 1747  *
 1748  *  Calls the PHY setup function to force speed and duplex.  Clears the
 1749  *  auto-crossover to force MDI manually.  Waits for link and returns
 1750  *  successful if link up is successful, else -E1000_ERR_PHY (-2).
 1751  **/
 1752 s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw)
 1753 {
 1754         struct e1000_phy_info *phy = &hw->phy;
 1755         s32 ret_val;
 1756         u16 phy_data;
 1757         bool link;
 1758 
 1759         DEBUGFUNC("e1000_phy_force_speed_duplex_igp");
 1760 
 1761         ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
 1762         if (ret_val)
 1763                 return ret_val;
 1764 
 1765         e1000_phy_force_speed_duplex_setup(hw, &phy_data);
 1766 
 1767         ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
 1768         if (ret_val)
 1769                 return ret_val;
 1770 
 1771         /* Clear Auto-Crossover to force MDI manually.  IGP requires MDI
 1772          * forced whenever speed and duplex are forced.
 1773          */
 1774         ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
 1775         if (ret_val)
 1776                 return ret_val;
 1777 
 1778         phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
 1779         phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
 1780 
 1781         ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
 1782         if (ret_val)
 1783                 return ret_val;
 1784 
 1785         DEBUGOUT1("IGP PSCR: %X\n", phy_data);
 1786 
 1787         usec_delay(1);
 1788 
 1789         if (phy->autoneg_wait_to_complete) {
 1790                 DEBUGOUT("Waiting for forced speed/duplex link on IGP phy.\n");
 1791 
 1792                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 1793                                                      100000, &link);
 1794                 if (ret_val)
 1795                         return ret_val;
 1796 
 1797                 if (!link)
 1798                         DEBUGOUT("Link taking longer than expected.\n");
 1799 
 1800                 /* Try once more */
 1801                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 1802                                                      100000, &link);
 1803         }
 1804 
 1805         return ret_val;
 1806 }
 1807 
 1808 /**
 1809  *  e1000_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
 1810  *  @hw: pointer to the HW structure
 1811  *
 1812  *  Calls the PHY setup function to force speed and duplex.  Clears the
 1813  *  auto-crossover to force MDI manually.  Resets the PHY to commit the
 1814  *  changes.  If time expires while waiting for link up, we reset the DSP.
 1815  *  After reset, TX_CLK and CRS on Tx must be set.  Return successful upon
 1816  *  successful completion, else return corresponding error code.
 1817  **/
 1818 s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
 1819 {
 1820         struct e1000_phy_info *phy = &hw->phy;
 1821         s32 ret_val;
 1822         u16 phy_data;
 1823         bool link;
 1824 
 1825         DEBUGFUNC("e1000_phy_force_speed_duplex_m88");
 1826 
 1827         /* I210 and I211 devices support Auto-Crossover in forced operation. */
 1828         if (phy->type != e1000_phy_i210) {
 1829                 /* Clear Auto-Crossover to force MDI manually.  M88E1000
 1830                  * requires MDI forced whenever speed and duplex are forced.
 1831                  */
 1832                 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL,
 1833                                             &phy_data);
 1834                 if (ret_val)
 1835                         return ret_val;
 1836 
 1837                 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
 1838                 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL,
 1839                                              phy_data);
 1840                 if (ret_val)
 1841                         return ret_val;
 1842 
 1843                 DEBUGOUT1("M88E1000 PSCR: %X\n", phy_data);
 1844         }
 1845 
 1846         ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
 1847         if (ret_val)
 1848                 return ret_val;
 1849 
 1850         e1000_phy_force_speed_duplex_setup(hw, &phy_data);
 1851 
 1852         ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
 1853         if (ret_val)
 1854                 return ret_val;
 1855 
 1856         /* Reset the phy to commit changes. */
 1857         ret_val = hw->phy.ops.commit(hw);
 1858         if (ret_val)
 1859                 return ret_val;
 1860 
 1861         if (phy->autoneg_wait_to_complete) {
 1862                 DEBUGOUT("Waiting for forced speed/duplex link on M88 phy.\n");
 1863 
 1864                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 1865                                                      100000, &link);
 1866                 if (ret_val)
 1867                         return ret_val;
 1868 
 1869                 if (!link) {
 1870                         bool reset_dsp = true;
 1871 
 1872                         switch (hw->phy.id) {
 1873                         case I347AT4_E_PHY_ID:
 1874                         case M88E1340M_E_PHY_ID:
 1875                         case M88E1112_E_PHY_ID:
 1876                         case M88E1543_E_PHY_ID:
 1877                         case M88E1512_E_PHY_ID:
 1878                         case I210_I_PHY_ID:
 1879                                 reset_dsp = false;
 1880                                 break;
 1881                         default:
 1882                                 if (hw->phy.type != e1000_phy_m88)
 1883                                         reset_dsp = false;
 1884                                 break;
 1885                         }
 1886 
 1887                         if (!reset_dsp) {
 1888                                 DEBUGOUT("Link taking longer than expected.\n");
 1889                         } else {
 1890                                 /* We didn't get link.
 1891                                  * Reset the DSP and cross our fingers.
 1892                                  */
 1893                                 ret_val = phy->ops.write_reg(hw,
 1894                                                 M88E1000_PHY_PAGE_SELECT,
 1895                                                 0x001d);
 1896                                 if (ret_val)
 1897                                         return ret_val;
 1898                                 ret_val = e1000_phy_reset_dsp_generic(hw);
 1899                                 if (ret_val)
 1900                                         return ret_val;
 1901                         }
 1902                 }
 1903 
 1904                 /* Try once more */
 1905                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 1906                                                      100000, &link);
 1907                 if (ret_val)
 1908                         return ret_val;
 1909         }
 1910 
 1911         if (hw->phy.type != e1000_phy_m88)
 1912                 return E1000_SUCCESS;
 1913 
 1914         if (hw->phy.id == I347AT4_E_PHY_ID ||
 1915                 hw->phy.id == M88E1340M_E_PHY_ID ||
 1916                 hw->phy.id == M88E1112_E_PHY_ID)
 1917                 return E1000_SUCCESS;
 1918         if (hw->phy.id == I210_I_PHY_ID)
 1919                 return E1000_SUCCESS;
 1920         if ((hw->phy.id == M88E1543_E_PHY_ID) ||
 1921             (hw->phy.id == M88E1512_E_PHY_ID))
 1922                 return E1000_SUCCESS;
 1923         ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
 1924         if (ret_val)
 1925                 return ret_val;
 1926 
 1927         /* Resetting the phy means we need to re-force TX_CLK in the
 1928          * Extended PHY Specific Control Register to 25MHz clock from
 1929          * the reset value of 2.5MHz.
 1930          */
 1931         phy_data |= M88E1000_EPSCR_TX_CLK_25;
 1932         ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
 1933         if (ret_val)
 1934                 return ret_val;
 1935 
 1936         /* In addition, we must re-enable CRS on Tx for both half and full
 1937          * duplex.
 1938          */
 1939         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 1940         if (ret_val)
 1941                 return ret_val;
 1942 
 1943         phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
 1944         ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
 1945 
 1946         return ret_val;
 1947 }
 1948 
 1949 /**
 1950  *  e1000_phy_force_speed_duplex_ife - Force PHY speed & duplex
 1951  *  @hw: pointer to the HW structure
 1952  *
 1953  *  Forces the speed and duplex settings of the PHY.
 1954  *  This is a function pointer entry point only called by
 1955  *  PHY setup routines.
 1956  **/
 1957 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw)
 1958 {
 1959         struct e1000_phy_info *phy = &hw->phy;
 1960         s32 ret_val;
 1961         u16 data;
 1962         bool link;
 1963 
 1964         DEBUGFUNC("e1000_phy_force_speed_duplex_ife");
 1965 
 1966         ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &data);
 1967         if (ret_val)
 1968                 return ret_val;
 1969 
 1970         e1000_phy_force_speed_duplex_setup(hw, &data);
 1971 
 1972         ret_val = phy->ops.write_reg(hw, PHY_CONTROL, data);
 1973         if (ret_val)
 1974                 return ret_val;
 1975 
 1976         /* Disable MDI-X support for 10/100 */
 1977         ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
 1978         if (ret_val)
 1979                 return ret_val;
 1980 
 1981         data &= ~IFE_PMC_AUTO_MDIX;
 1982         data &= ~IFE_PMC_FORCE_MDIX;
 1983 
 1984         ret_val = phy->ops.write_reg(hw, IFE_PHY_MDIX_CONTROL, data);
 1985         if (ret_val)
 1986                 return ret_val;
 1987 
 1988         DEBUGOUT1("IFE PMC: %X\n", data);
 1989 
 1990         usec_delay(1);
 1991 
 1992         if (phy->autoneg_wait_to_complete) {
 1993                 DEBUGOUT("Waiting for forced speed/duplex link on IFE phy.\n");
 1994 
 1995                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 1996                                                      100000, &link);
 1997                 if (ret_val)
 1998                         return ret_val;
 1999 
 2000                 if (!link)
 2001                         DEBUGOUT("Link taking longer than expected.\n");
 2002 
 2003                 /* Try once more */
 2004                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 2005                                                      100000, &link);
 2006                 if (ret_val)
 2007                         return ret_val;
 2008         }
 2009 
 2010         return E1000_SUCCESS;
 2011 }
 2012 
 2013 /**
 2014  *  e1000_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
 2015  *  @hw: pointer to the HW structure
 2016  *  @phy_ctrl: pointer to current value of PHY_CONTROL
 2017  *
 2018  *  Forces speed and duplex on the PHY by doing the following: disable flow
 2019  *  control, force speed/duplex on the MAC, disable auto speed detection,
 2020  *  disable auto-negotiation, configure duplex, configure speed, configure
 2021  *  the collision distance, write configuration to CTRL register.  The
 2022  *  caller must write to the PHY_CONTROL register for these settings to
 2023  *  take effect.
 2024  **/
 2025 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl)
 2026 {
 2027         struct e1000_mac_info *mac = &hw->mac;
 2028         u32 ctrl;
 2029 
 2030         DEBUGFUNC("e1000_phy_force_speed_duplex_setup");
 2031 
 2032         /* Turn off flow control when forcing speed/duplex */
 2033         hw->fc.current_mode = e1000_fc_none;
 2034 
 2035         /* Force speed/duplex on the mac */
 2036         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 2037         ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 2038         ctrl &= ~E1000_CTRL_SPD_SEL;
 2039 
 2040         /* Disable Auto Speed Detection */
 2041         ctrl &= ~E1000_CTRL_ASDE;
 2042 
 2043         /* Disable autoneg on the phy */
 2044         *phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
 2045 
 2046         /* Forcing Full or Half Duplex? */
 2047         if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
 2048                 ctrl &= ~E1000_CTRL_FD;
 2049                 *phy_ctrl &= ~MII_CR_FULL_DUPLEX;
 2050                 DEBUGOUT("Half Duplex\n");
 2051         } else {
 2052                 ctrl |= E1000_CTRL_FD;
 2053                 *phy_ctrl |= MII_CR_FULL_DUPLEX;
 2054                 DEBUGOUT("Full Duplex\n");
 2055         }
 2056 
 2057         /* Forcing 10mb or 100mb? */
 2058         if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
 2059                 ctrl |= E1000_CTRL_SPD_100;
 2060                 *phy_ctrl |= MII_CR_SPEED_100;
 2061                 *phy_ctrl &= ~MII_CR_SPEED_1000;
 2062                 DEBUGOUT("Forcing 100mb\n");
 2063         } else {
 2064                 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
 2065                 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
 2066                 DEBUGOUT("Forcing 10mb\n");
 2067         }
 2068 
 2069         hw->mac.ops.config_collision_dist(hw);
 2070 
 2071         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 2072 }
 2073 
 2074 /**
 2075  *  e1000_set_d3_lplu_state_generic - Sets low power link up state for D3
 2076  *  @hw: pointer to the HW structure
 2077  *  @active: boolean used to enable/disable lplu
 2078  *
 2079  *  Success returns 0, Failure returns 1
 2080  *
 2081  *  The low power link up (lplu) state is set to the power management level D3
 2082  *  and SmartSpeed is disabled when active is true, else clear lplu for D3
 2083  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
 2084  *  is used during Dx states where the power conservation is most important.
 2085  *  During driver activity, SmartSpeed should be enabled so performance is
 2086  *  maintained.
 2087  **/
 2088 s32 e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active)
 2089 {
 2090         struct e1000_phy_info *phy = &hw->phy;
 2091         s32 ret_val;
 2092         u16 data;
 2093 
 2094         DEBUGFUNC("e1000_set_d3_lplu_state_generic");
 2095 
 2096         if (!hw->phy.ops.read_reg)
 2097                 return E1000_SUCCESS;
 2098 
 2099         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
 2100         if (ret_val)
 2101                 return ret_val;
 2102 
 2103         if (!active) {
 2104                 data &= ~IGP02E1000_PM_D3_LPLU;
 2105                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
 2106                                              data);
 2107                 if (ret_val)
 2108                         return ret_val;
 2109                 /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used
 2110                  * during Dx states where the power conservation is most
 2111                  * important.  During driver activity we should enable
 2112                  * SmartSpeed, so performance is maintained.
 2113                  */
 2114                 if (phy->smart_speed == e1000_smart_speed_on) {
 2115                         ret_val = phy->ops.read_reg(hw,
 2116                                                     IGP01E1000_PHY_PORT_CONFIG,
 2117                                                     &data);
 2118                         if (ret_val)
 2119                                 return ret_val;
 2120 
 2121                         data |= IGP01E1000_PSCFR_SMART_SPEED;
 2122                         ret_val = phy->ops.write_reg(hw,
 2123                                                      IGP01E1000_PHY_PORT_CONFIG,
 2124                                                      data);
 2125                         if (ret_val)
 2126                                 return ret_val;
 2127                 } else if (phy->smart_speed == e1000_smart_speed_off) {
 2128                         ret_val = phy->ops.read_reg(hw,
 2129                                                     IGP01E1000_PHY_PORT_CONFIG,
 2130                                                     &data);
 2131                         if (ret_val)
 2132                                 return ret_val;
 2133 
 2134                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 2135                         ret_val = phy->ops.write_reg(hw,
 2136                                                      IGP01E1000_PHY_PORT_CONFIG,
 2137                                                      data);
 2138                         if (ret_val)
 2139                                 return ret_val;
 2140                 }
 2141         } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
 2142                    (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
 2143                    (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
 2144                 data |= IGP02E1000_PM_D3_LPLU;
 2145                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
 2146                                              data);
 2147                 if (ret_val)
 2148                         return ret_val;
 2149 
 2150                 /* When LPLU is enabled, we should disable SmartSpeed */
 2151                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
 2152                                             &data);
 2153                 if (ret_val)
 2154                         return ret_val;
 2155 
 2156                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 2157                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
 2158                                              data);
 2159         }
 2160 
 2161         return ret_val;
 2162 }
 2163 
 2164 /**
 2165  *  e1000_check_downshift_generic - Checks whether a downshift in speed occurred
 2166  *  @hw: pointer to the HW structure
 2167  *
 2168  *  Success returns 0, Failure returns 1
 2169  *
 2170  *  A downshift is detected by querying the PHY link health.
 2171  **/
 2172 s32 e1000_check_downshift_generic(struct e1000_hw *hw)
 2173 {
 2174         struct e1000_phy_info *phy = &hw->phy;
 2175         s32 ret_val;
 2176         u16 phy_data, offset, mask;
 2177 
 2178         DEBUGFUNC("e1000_check_downshift_generic");
 2179 
 2180         switch (phy->type) {
 2181         case e1000_phy_i210:
 2182         case e1000_phy_m88:
 2183         case e1000_phy_gg82563:
 2184         case e1000_phy_bm:
 2185         case e1000_phy_82578:
 2186                 offset = M88E1000_PHY_SPEC_STATUS;
 2187                 mask = M88E1000_PSSR_DOWNSHIFT;
 2188                 break;
 2189         case e1000_phy_igp:
 2190         case e1000_phy_igp_2:
 2191         case e1000_phy_igp_3:
 2192                 offset = IGP01E1000_PHY_LINK_HEALTH;
 2193                 mask = IGP01E1000_PLHR_SS_DOWNGRADE;
 2194                 break;
 2195         default:
 2196                 /* speed downshift not supported */
 2197                 phy->speed_downgraded = false;
 2198                 return E1000_SUCCESS;
 2199         }
 2200 
 2201         ret_val = phy->ops.read_reg(hw, offset, &phy_data);
 2202 
 2203         if (!ret_val)
 2204                 phy->speed_downgraded = !!(phy_data & mask);
 2205 
 2206         return ret_val;
 2207 }
 2208 
 2209 /**
 2210  *  e1000_check_polarity_m88 - Checks the polarity.
 2211  *  @hw: pointer to the HW structure
 2212  *
 2213  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
 2214  *
 2215  *  Polarity is determined based on the PHY specific status register.
 2216  **/
 2217 s32 e1000_check_polarity_m88(struct e1000_hw *hw)
 2218 {
 2219         struct e1000_phy_info *phy = &hw->phy;
 2220         s32 ret_val;
 2221         u16 data;
 2222 
 2223         DEBUGFUNC("e1000_check_polarity_m88");
 2224 
 2225         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data);
 2226 
 2227         if (!ret_val)
 2228                 phy->cable_polarity = ((data & M88E1000_PSSR_REV_POLARITY)
 2229                                        ? e1000_rev_polarity_reversed
 2230                                        : e1000_rev_polarity_normal);
 2231 
 2232         return ret_val;
 2233 }
 2234 
 2235 /**
 2236  *  e1000_check_polarity_igp - Checks the polarity.
 2237  *  @hw: pointer to the HW structure
 2238  *
 2239  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
 2240  *
 2241  *  Polarity is determined based on the PHY port status register, and the
 2242  *  current speed (since there is no polarity at 100Mbps).
 2243  **/
 2244 s32 e1000_check_polarity_igp(struct e1000_hw *hw)
 2245 {
 2246         struct e1000_phy_info *phy = &hw->phy;
 2247         s32 ret_val;
 2248         u16 data, offset, mask;
 2249 
 2250         DEBUGFUNC("e1000_check_polarity_igp");
 2251 
 2252         /* Polarity is determined based on the speed of
 2253          * our connection.
 2254          */
 2255         ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
 2256         if (ret_val)
 2257                 return ret_val;
 2258 
 2259         if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
 2260             IGP01E1000_PSSR_SPEED_1000MBPS) {
 2261                 offset = IGP01E1000_PHY_PCS_INIT_REG;
 2262                 mask = IGP01E1000_PHY_POLARITY_MASK;
 2263         } else {
 2264                 /* This really only applies to 10Mbps since
 2265                  * there is no polarity for 100Mbps (always 0).
 2266                  */
 2267                 offset = IGP01E1000_PHY_PORT_STATUS;
 2268                 mask = IGP01E1000_PSSR_POLARITY_REVERSED;
 2269         }
 2270 
 2271         ret_val = phy->ops.read_reg(hw, offset, &data);
 2272 
 2273         if (!ret_val)
 2274                 phy->cable_polarity = ((data & mask)
 2275                                        ? e1000_rev_polarity_reversed
 2276                                        : e1000_rev_polarity_normal);
 2277 
 2278         return ret_val;
 2279 }
 2280 
 2281 /**
 2282  *  e1000_check_polarity_ife - Check cable polarity for IFE PHY
 2283  *  @hw: pointer to the HW structure
 2284  *
 2285  *  Polarity is determined on the polarity reversal feature being enabled.
 2286  **/
 2287 s32 e1000_check_polarity_ife(struct e1000_hw *hw)
 2288 {
 2289         struct e1000_phy_info *phy = &hw->phy;
 2290         s32 ret_val;
 2291         u16 phy_data, offset, mask;
 2292 
 2293         DEBUGFUNC("e1000_check_polarity_ife");
 2294 
 2295         /* Polarity is determined based on the reversal feature being enabled.
 2296          */
 2297         if (phy->polarity_correction) {
 2298                 offset = IFE_PHY_EXTENDED_STATUS_CONTROL;
 2299                 mask = IFE_PESC_POLARITY_REVERSED;
 2300         } else {
 2301                 offset = IFE_PHY_SPECIAL_CONTROL;
 2302                 mask = IFE_PSC_FORCE_POLARITY;
 2303         }
 2304 
 2305         ret_val = phy->ops.read_reg(hw, offset, &phy_data);
 2306 
 2307         if (!ret_val)
 2308                 phy->cable_polarity = ((phy_data & mask)
 2309                                        ? e1000_rev_polarity_reversed
 2310                                        : e1000_rev_polarity_normal);
 2311 
 2312         return ret_val;
 2313 }
 2314 
 2315 /**
 2316  *  e1000_wait_autoneg - Wait for auto-neg completion
 2317  *  @hw: pointer to the HW structure
 2318  *
 2319  *  Waits for auto-negotiation to complete or for the auto-negotiation time
 2320  *  limit to expire, which ever happens first.
 2321  **/
 2322 static s32 e1000_wait_autoneg(struct e1000_hw *hw)
 2323 {
 2324         s32 ret_val = E1000_SUCCESS;
 2325         u16 i, phy_status;
 2326 
 2327         DEBUGFUNC("e1000_wait_autoneg");
 2328 
 2329         if (!hw->phy.ops.read_reg)
 2330                 return E1000_SUCCESS;
 2331 
 2332         /* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
 2333         for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
 2334                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
 2335                 if (ret_val)
 2336                         break;
 2337                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
 2338                 if (ret_val)
 2339                         break;
 2340                 if (phy_status & MII_SR_AUTONEG_COMPLETE)
 2341                         break;
 2342                 msec_delay(100);
 2343         }
 2344 
 2345         /* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
 2346          * has completed.
 2347          */
 2348         return ret_val;
 2349 }
 2350 
 2351 /**
 2352  *  e1000_phy_has_link_generic - Polls PHY for link
 2353  *  @hw: pointer to the HW structure
 2354  *  @iterations: number of times to poll for link
 2355  *  @usec_interval: delay between polling attempts
 2356  *  @success: pointer to whether polling was successful or not
 2357  *
 2358  *  Polls the PHY status register for link, 'iterations' number of times.
 2359  **/
 2360 s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 2361                                u32 usec_interval, bool *success)
 2362 {
 2363         s32 ret_val = E1000_SUCCESS;
 2364         u16 i, phy_status;
 2365 
 2366         DEBUGFUNC("e1000_phy_has_link_generic");
 2367 
 2368         if (!hw->phy.ops.read_reg)
 2369                 return E1000_SUCCESS;
 2370 
 2371         for (i = 0; i < iterations; i++) {
 2372                 /* Some PHYs require the PHY_STATUS register to be read
 2373                  * twice due to the link bit being sticky.  No harm doing
 2374                  * it across the board.
 2375                  */
 2376                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
 2377                 if (ret_val) {
 2378                         /* If the first read fails, another entity may have
 2379                          * ownership of the resources, wait and try again to
 2380                          * see if they have relinquished the resources yet.
 2381                          */
 2382                         if (usec_interval >= 1000)
 2383                                 msec_delay(usec_interval/1000);
 2384                         else
 2385                                 usec_delay(usec_interval);
 2386                 }
 2387                 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
 2388                 if (ret_val)
 2389                         break;
 2390                 if (phy_status & MII_SR_LINK_STATUS)
 2391                         break;
 2392                 if (usec_interval >= 1000)
 2393                         msec_delay(usec_interval/1000);
 2394                 else
 2395                         usec_delay(usec_interval);
 2396         }
 2397 
 2398         *success = (i < iterations);
 2399 
 2400         return ret_val;
 2401 }
 2402 
 2403 /**
 2404  *  e1000_get_cable_length_m88 - Determine cable length for m88 PHY
 2405  *  @hw: pointer to the HW structure
 2406  *
 2407  *  Reads the PHY specific status register to retrieve the cable length
 2408  *  information.  The cable length is determined by averaging the minimum and
 2409  *  maximum values to get the "average" cable length.  The m88 PHY has four
 2410  *  possible cable length values, which are:
 2411  *      Register Value          Cable Length
 2412  *      0                       < 50 meters
 2413  *      1                       50 - 80 meters
 2414  *      2                       80 - 110 meters
 2415  *      3                       110 - 140 meters
 2416  *      4                       > 140 meters
 2417  **/
 2418 s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
 2419 {
 2420         struct e1000_phy_info *phy = &hw->phy;
 2421         s32 ret_val;
 2422         u16 phy_data, index;
 2423 
 2424         DEBUGFUNC("e1000_get_cable_length_m88");
 2425 
 2426         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
 2427         if (ret_val)
 2428                 return ret_val;
 2429 
 2430         index = ((phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
 2431                  M88E1000_PSSR_CABLE_LENGTH_SHIFT);
 2432 
 2433         if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1)
 2434                 return -E1000_ERR_PHY;
 2435 
 2436         phy->min_cable_length = e1000_m88_cable_length_table[index];
 2437         phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
 2438 
 2439         phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
 2440 
 2441         return E1000_SUCCESS;
 2442 }
 2443 
 2444 s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw)
 2445 {
 2446         struct e1000_phy_info *phy = &hw->phy;
 2447         s32 ret_val;
 2448         u16 phy_data, phy_data2, is_cm;
 2449         u16 index, default_page;
 2450 
 2451         DEBUGFUNC("e1000_get_cable_length_m88_gen2");
 2452 
 2453         switch (hw->phy.id) {
 2454         case I210_I_PHY_ID:
 2455                 /* Get cable length from PHY Cable Diagnostics Control Reg */
 2456                 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) +
 2457                                             (I347AT4_PCDL + phy->addr),
 2458                                             &phy_data);
 2459                 if (ret_val)
 2460                         return ret_val;
 2461 
 2462                 /* Check if the unit of cable length is meters or cm */
 2463                 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) +
 2464                                             I347AT4_PCDC, &phy_data2);
 2465                 if (ret_val)
 2466                         return ret_val;
 2467 
 2468                 is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT);
 2469 
 2470                 /* Populate the phy structure with cable length in meters */
 2471                 phy->min_cable_length = phy_data / (is_cm ? 100 : 1);
 2472                 phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
 2473                 phy->cable_length = phy_data / (is_cm ? 100 : 1);
 2474                 break;
 2475         case M88E1543_E_PHY_ID:
 2476         case M88E1512_E_PHY_ID:
 2477         case M88E1340M_E_PHY_ID:
 2478         case I347AT4_E_PHY_ID:
 2479                 /* Remember the original page select and set it to 7 */
 2480                 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
 2481                                             &default_page);
 2482                 if (ret_val)
 2483                         return ret_val;
 2484 
 2485                 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07);
 2486                 if (ret_val)
 2487                         return ret_val;
 2488 
 2489                 /* Get cable length from PHY Cable Diagnostics Control Reg */
 2490                 ret_val = phy->ops.read_reg(hw, (I347AT4_PCDL + phy->addr),
 2491                                             &phy_data);
 2492                 if (ret_val)
 2493                         return ret_val;
 2494 
 2495                 /* Check if the unit of cable length is meters or cm */
 2496                 ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2);
 2497                 if (ret_val)
 2498                         return ret_val;
 2499 
 2500                 is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT);
 2501 
 2502                 /* Populate the phy structure with cable length in meters */
 2503                 phy->min_cable_length = phy_data / (is_cm ? 100 : 1);
 2504                 phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
 2505                 phy->cable_length = phy_data / (is_cm ? 100 : 1);
 2506 
 2507                 /* Reset the page select to its original value */
 2508                 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
 2509                                              default_page);
 2510                 if (ret_val)
 2511                         return ret_val;
 2512                 break;
 2513 
 2514         case M88E1112_E_PHY_ID:
 2515                 /* Remember the original page select and set it to 5 */
 2516                 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
 2517                                             &default_page);
 2518                 if (ret_val)
 2519                         return ret_val;
 2520 
 2521                 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05);
 2522                 if (ret_val)
 2523                         return ret_val;
 2524 
 2525                 ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE,
 2526                                             &phy_data);
 2527                 if (ret_val)
 2528                         return ret_val;
 2529 
 2530                 index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
 2531                         M88E1000_PSSR_CABLE_LENGTH_SHIFT;
 2532 
 2533                 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1)
 2534                         return -E1000_ERR_PHY;
 2535 
 2536                 phy->min_cable_length = e1000_m88_cable_length_table[index];
 2537                 phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
 2538 
 2539                 phy->cable_length = (phy->min_cable_length +
 2540                                      phy->max_cable_length) / 2;
 2541 
 2542                 /* Reset the page select to its original value */
 2543                 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
 2544                                              default_page);
 2545                 if (ret_val)
 2546                         return ret_val;
 2547 
 2548                 break;
 2549         default:
 2550                 return -E1000_ERR_PHY;
 2551         }
 2552 
 2553         return ret_val;
 2554 }
 2555 
 2556 /**
 2557  *  e1000_get_cable_length_igp_2 - Determine cable length for igp2 PHY
 2558  *  @hw: pointer to the HW structure
 2559  *
 2560  *  The automatic gain control (agc) normalizes the amplitude of the
 2561  *  received signal, adjusting for the attenuation produced by the
 2562  *  cable.  By reading the AGC registers, which represent the
 2563  *  combination of coarse and fine gain value, the value can be put
 2564  *  into a lookup table to obtain the approximate cable length
 2565  *  for each channel.
 2566  **/
 2567 s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
 2568 {
 2569         struct e1000_phy_info *phy = &hw->phy;
 2570         s32 ret_val;
 2571         u16 phy_data, i, agc_value = 0;
 2572         u16 cur_agc_index, max_agc_index = 0;
 2573         u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
 2574         static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
 2575                 IGP02E1000_PHY_AGC_A,
 2576                 IGP02E1000_PHY_AGC_B,
 2577                 IGP02E1000_PHY_AGC_C,
 2578                 IGP02E1000_PHY_AGC_D
 2579         };
 2580 
 2581         DEBUGFUNC("e1000_get_cable_length_igp_2");
 2582 
 2583         /* Read the AGC registers for all channels */
 2584         for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
 2585                 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data);
 2586                 if (ret_val)
 2587                         return ret_val;
 2588 
 2589                 /* Getting bits 15:9, which represent the combination of
 2590                  * coarse and fine gain values.  The result is a number
 2591                  * that can be put into the lookup table to obtain the
 2592                  * approximate cable length.
 2593                  */
 2594                 cur_agc_index = ((phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
 2595                                  IGP02E1000_AGC_LENGTH_MASK);
 2596 
 2597                 /* Array index bound check. */
 2598                 if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) ||
 2599                     (cur_agc_index == 0))
 2600                         return -E1000_ERR_PHY;
 2601 
 2602                 /* Remove min & max AGC values from calculation. */
 2603                 if (e1000_igp_2_cable_length_table[min_agc_index] >
 2604                     e1000_igp_2_cable_length_table[cur_agc_index])
 2605                         min_agc_index = cur_agc_index;
 2606                 if (e1000_igp_2_cable_length_table[max_agc_index] <
 2607                     e1000_igp_2_cable_length_table[cur_agc_index])
 2608                         max_agc_index = cur_agc_index;
 2609 
 2610                 agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
 2611         }
 2612 
 2613         agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
 2614                       e1000_igp_2_cable_length_table[max_agc_index]);
 2615         agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
 2616 
 2617         /* Calculate cable length with the error range of +/- 10 meters. */
 2618         phy->min_cable_length = (((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
 2619                                  (agc_value - IGP02E1000_AGC_RANGE) : 0);
 2620         phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
 2621 
 2622         phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
 2623 
 2624         return E1000_SUCCESS;
 2625 }
 2626 
 2627 /**
 2628  *  e1000_get_phy_info_m88 - Retrieve PHY information
 2629  *  @hw: pointer to the HW structure
 2630  *
 2631  *  Valid for only copper links.  Read the PHY status register (sticky read)
 2632  *  to verify that link is up.  Read the PHY special control register to
 2633  *  determine the polarity and 10base-T extended distance.  Read the PHY
 2634  *  special status register to determine MDI/MDIx and current speed.  If
 2635  *  speed is 1000, then determine cable length, local and remote receiver.
 2636  **/
 2637 s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
 2638 {
 2639         struct e1000_phy_info *phy = &hw->phy;
 2640         s32  ret_val;
 2641         u16 phy_data;
 2642         bool link;
 2643 
 2644         DEBUGFUNC("e1000_get_phy_info_m88");
 2645 
 2646         if (phy->media_type != e1000_media_type_copper) {
 2647                 DEBUGOUT("Phy info is only valid for copper media\n");
 2648                 return -E1000_ERR_CONFIG;
 2649         }
 2650 
 2651         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 2652         if (ret_val)
 2653                 return ret_val;
 2654 
 2655         if (!link) {
 2656                 DEBUGOUT("Phy info is only valid if link is up\n");
 2657                 return -E1000_ERR_CONFIG;
 2658         }
 2659 
 2660         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 2661         if (ret_val)
 2662                 return ret_val;
 2663 
 2664         phy->polarity_correction = !!(phy_data &
 2665                                       M88E1000_PSCR_POLARITY_REVERSAL);
 2666 
 2667         ret_val = e1000_check_polarity_m88(hw);
 2668         if (ret_val)
 2669                 return ret_val;
 2670 
 2671         ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
 2672         if (ret_val)
 2673                 return ret_val;
 2674 
 2675         phy->is_mdix = !!(phy_data & M88E1000_PSSR_MDIX);
 2676 
 2677         if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
 2678                 ret_val = hw->phy.ops.get_cable_length(hw);
 2679                 if (ret_val)
 2680                         return ret_val;
 2681 
 2682                 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
 2683                 if (ret_val)
 2684                         return ret_val;
 2685 
 2686                 phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
 2687                                 ? e1000_1000t_rx_status_ok
 2688                                 : e1000_1000t_rx_status_not_ok;
 2689 
 2690                 phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
 2691                                  ? e1000_1000t_rx_status_ok
 2692                                  : e1000_1000t_rx_status_not_ok;
 2693         } else {
 2694                 /* Set values to "undefined" */
 2695                 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
 2696                 phy->local_rx = e1000_1000t_rx_status_undefined;
 2697                 phy->remote_rx = e1000_1000t_rx_status_undefined;
 2698         }
 2699 
 2700         return ret_val;
 2701 }
 2702 
 2703 /**
 2704  *  e1000_get_phy_info_igp - Retrieve igp PHY information
 2705  *  @hw: pointer to the HW structure
 2706  *
 2707  *  Read PHY status to determine if link is up.  If link is up, then
 2708  *  set/determine 10base-T extended distance and polarity correction.  Read
 2709  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
 2710  *  determine on the cable length, local and remote receiver.
 2711  **/
 2712 s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 2713 {
 2714         struct e1000_phy_info *phy = &hw->phy;
 2715         s32 ret_val;
 2716         u16 data;
 2717         bool link;
 2718 
 2719         DEBUGFUNC("e1000_get_phy_info_igp");
 2720 
 2721         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 2722         if (ret_val)
 2723                 return ret_val;
 2724 
 2725         if (!link) {
 2726                 DEBUGOUT("Phy info is only valid if link is up\n");
 2727                 return -E1000_ERR_CONFIG;
 2728         }
 2729 
 2730         phy->polarity_correction = true;
 2731 
 2732         ret_val = e1000_check_polarity_igp(hw);
 2733         if (ret_val)
 2734                 return ret_val;
 2735 
 2736         ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
 2737         if (ret_val)
 2738                 return ret_val;
 2739 
 2740         phy->is_mdix = !!(data & IGP01E1000_PSSR_MDIX);
 2741 
 2742         if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
 2743             IGP01E1000_PSSR_SPEED_1000MBPS) {
 2744                 ret_val = phy->ops.get_cable_length(hw);
 2745                 if (ret_val)
 2746                         return ret_val;
 2747 
 2748                 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
 2749                 if (ret_val)
 2750                         return ret_val;
 2751 
 2752                 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
 2753                                 ? e1000_1000t_rx_status_ok
 2754                                 : e1000_1000t_rx_status_not_ok;
 2755 
 2756                 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
 2757                                  ? e1000_1000t_rx_status_ok
 2758                                  : e1000_1000t_rx_status_not_ok;
 2759         } else {
 2760                 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
 2761                 phy->local_rx = e1000_1000t_rx_status_undefined;
 2762                 phy->remote_rx = e1000_1000t_rx_status_undefined;
 2763         }
 2764 
 2765         return ret_val;
 2766 }
 2767 
 2768 /**
 2769  *  e1000_get_phy_info_ife - Retrieves various IFE PHY states
 2770  *  @hw: pointer to the HW structure
 2771  *
 2772  *  Populates "phy" structure with various feature states.
 2773  **/
 2774 s32 e1000_get_phy_info_ife(struct e1000_hw *hw)
 2775 {
 2776         struct e1000_phy_info *phy = &hw->phy;
 2777         s32 ret_val;
 2778         u16 data;
 2779         bool link;
 2780 
 2781         DEBUGFUNC("e1000_get_phy_info_ife");
 2782 
 2783         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 2784         if (ret_val)
 2785                 return ret_val;
 2786 
 2787         if (!link) {
 2788                 DEBUGOUT("Phy info is only valid if link is up\n");
 2789                 return -E1000_ERR_CONFIG;
 2790         }
 2791 
 2792         ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data);
 2793         if (ret_val)
 2794                 return ret_val;
 2795         phy->polarity_correction = !(data & IFE_PSC_AUTO_POLARITY_DISABLE);
 2796 
 2797         if (phy->polarity_correction) {
 2798                 ret_val = e1000_check_polarity_ife(hw);
 2799                 if (ret_val)
 2800                         return ret_val;
 2801         } else {
 2802                 /* Polarity is forced */
 2803                 phy->cable_polarity = ((data & IFE_PSC_FORCE_POLARITY)
 2804                                        ? e1000_rev_polarity_reversed
 2805                                        : e1000_rev_polarity_normal);
 2806         }
 2807 
 2808         ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
 2809         if (ret_val)
 2810                 return ret_val;
 2811 
 2812         phy->is_mdix = !!(data & IFE_PMC_MDIX_STATUS);
 2813 
 2814         /* The following parameters are undefined for 10/100 operation. */
 2815         phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
 2816         phy->local_rx = e1000_1000t_rx_status_undefined;
 2817         phy->remote_rx = e1000_1000t_rx_status_undefined;
 2818 
 2819         return E1000_SUCCESS;
 2820 }
 2821 
 2822 /**
 2823  *  e1000_phy_sw_reset_generic - PHY software reset
 2824  *  @hw: pointer to the HW structure
 2825  *
 2826  *  Does a software reset of the PHY by reading the PHY control register and
 2827  *  setting/write the control register reset bit to the PHY.
 2828  **/
 2829 s32 e1000_phy_sw_reset_generic(struct e1000_hw *hw)
 2830 {
 2831         s32 ret_val;
 2832         u16 phy_ctrl;
 2833 
 2834         DEBUGFUNC("e1000_phy_sw_reset_generic");
 2835 
 2836         if (!hw->phy.ops.read_reg)
 2837                 return E1000_SUCCESS;
 2838 
 2839         ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
 2840         if (ret_val)
 2841                 return ret_val;
 2842 
 2843         phy_ctrl |= MII_CR_RESET;
 2844         ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
 2845         if (ret_val)
 2846                 return ret_val;
 2847 
 2848         usec_delay(1);
 2849 
 2850         return ret_val;
 2851 }
 2852 
 2853 /**
 2854  *  e1000_phy_hw_reset_generic - PHY hardware reset
 2855  *  @hw: pointer to the HW structure
 2856  *
 2857  *  Verify the reset block is not blocking us from resetting.  Acquire
 2858  *  semaphore (if necessary) and read/set/write the device control reset
 2859  *  bit in the PHY.  Wait the appropriate delay time for the device to
 2860  *  reset and release the semaphore (if necessary).
 2861  **/
 2862 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
 2863 {
 2864         struct e1000_phy_info *phy = &hw->phy;
 2865         s32 ret_val;
 2866         u32 ctrl;
 2867 
 2868         DEBUGFUNC("e1000_phy_hw_reset_generic");
 2869 
 2870         if (phy->ops.check_reset_block) {
 2871                 ret_val = phy->ops.check_reset_block(hw);
 2872                 if (ret_val)
 2873                         return E1000_SUCCESS;
 2874         }
 2875 
 2876         ret_val = phy->ops.acquire(hw);
 2877         if (ret_val)
 2878                 return ret_val;
 2879 
 2880         ctrl = E1000_READ_REG(hw, E1000_CTRL);
 2881         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PHY_RST);
 2882         E1000_WRITE_FLUSH(hw);
 2883 
 2884         usec_delay(phy->reset_delay_us);
 2885 
 2886         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 2887         E1000_WRITE_FLUSH(hw);
 2888 
 2889         usec_delay(150);
 2890 
 2891         phy->ops.release(hw);
 2892 
 2893         return phy->ops.get_cfg_done(hw);
 2894 }
 2895 
 2896 /**
 2897  *  e1000_get_cfg_done_generic - Generic configuration done
 2898  *  @hw: pointer to the HW structure
 2899  *
 2900  *  Generic function to wait 10 milli-seconds for configuration to complete
 2901  *  and return success.
 2902  **/
 2903 s32 e1000_get_cfg_done_generic(struct e1000_hw E1000_UNUSEDARG *hw)
 2904 {
 2905         DEBUGFUNC("e1000_get_cfg_done_generic");
 2906 
 2907         msec_delay_irq(10);
 2908 
 2909         return E1000_SUCCESS;
 2910 }
 2911 
 2912 /**
 2913  *  e1000_phy_init_script_igp3 - Inits the IGP3 PHY
 2914  *  @hw: pointer to the HW structure
 2915  *
 2916  *  Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
 2917  **/
 2918 s32 e1000_phy_init_script_igp3(struct e1000_hw *hw)
 2919 {
 2920         DEBUGOUT("Running IGP 3 PHY init script\n");
 2921 
 2922         /* PHY init IGP 3 */
 2923         /* Enable rise/fall, 10-mode work in class-A */
 2924         hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018);
 2925         /* Remove all caps from Replica path filter */
 2926         hw->phy.ops.write_reg(hw, 0x2F52, 0x0000);
 2927         /* Bias trimming for ADC, AFE and Driver (Default) */
 2928         hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24);
 2929         /* Increase Hybrid poly bias */
 2930         hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0);
 2931         /* Add 4% to Tx amplitude in Gig mode */
 2932         hw->phy.ops.write_reg(hw, 0x2010, 0x10B0);
 2933         /* Disable trimming (TTT) */
 2934         hw->phy.ops.write_reg(hw, 0x2011, 0x0000);
 2935         /* Poly DC correction to 94.6% + 2% for all channels */
 2936         hw->phy.ops.write_reg(hw, 0x20DD, 0x249A);
 2937         /* ABS DC correction to 95.9% */
 2938         hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3);
 2939         /* BG temp curve trim */
 2940         hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE);
 2941         /* Increasing ADC OPAMP stage 1 currents to max */
 2942         hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4);
 2943         /* Force 1000 ( required for enabling PHY regs configuration) */
 2944         hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
 2945         /* Set upd_freq to 6 */
 2946         hw->phy.ops.write_reg(hw, 0x1F30, 0x1606);
 2947         /* Disable NPDFE */
 2948         hw->phy.ops.write_reg(hw, 0x1F31, 0xB814);
 2949         /* Disable adaptive fixed FFE (Default) */
 2950         hw->phy.ops.write_reg(hw, 0x1F35, 0x002A);
 2951         /* Enable FFE hysteresis */
 2952         hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067);
 2953         /* Fixed FFE for short cable lengths */
 2954         hw->phy.ops.write_reg(hw, 0x1F54, 0x0065);
 2955         /* Fixed FFE for medium cable lengths */
 2956         hw->phy.ops.write_reg(hw, 0x1F55, 0x002A);
 2957         /* Fixed FFE for long cable lengths */
 2958         hw->phy.ops.write_reg(hw, 0x1F56, 0x002A);
 2959         /* Enable Adaptive Clip Threshold */
 2960         hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0);
 2961         /* AHT reset limit to 1 */
 2962         hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF);
 2963         /* Set AHT master delay to 127 msec */
 2964         hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC);
 2965         /* Set scan bits for AHT */
 2966         hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF);
 2967         /* Set AHT Preset bits */
 2968         hw->phy.ops.write_reg(hw, 0x1F79, 0x0210);
 2969         /* Change integ_factor of channel A to 3 */
 2970         hw->phy.ops.write_reg(hw, 0x1895, 0x0003);
 2971         /* Change prop_factor of channels BCD to 8 */
 2972         hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
 2973         /* Change cg_icount + enable integbp for channels BCD */
 2974         hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
 2975         /* Change cg_icount + enable integbp + change prop_factor_master
 2976          * to 8 for channel A
 2977          */
 2978         hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
 2979         /* Disable AHT in Slave mode on channel A */
 2980         hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
 2981         /* Enable LPLU and disable AN to 1000 in non-D0a states,
 2982          * Enable SPD+B2B
 2983          */
 2984         hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
 2985         /* Enable restart AN on an1000_dis change */
 2986         hw->phy.ops.write_reg(hw, 0x001B, 0x2080);
 2987         /* Enable wh_fifo read clock in 10/100 modes */
 2988         hw->phy.ops.write_reg(hw, 0x0014, 0x0045);
 2989         /* Restart AN, Speed selection is 1000 */
 2990         hw->phy.ops.write_reg(hw, 0x0000, 0x1340);
 2991 
 2992         return E1000_SUCCESS;
 2993 }
 2994 
 2995 /**
 2996  *  e1000_get_phy_type_from_id - Get PHY type from id
 2997  *  @phy_id: phy_id read from the phy
 2998  *
 2999  *  Returns the phy type from the id.
 3000  **/
 3001 enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
 3002 {
 3003         enum e1000_phy_type phy_type = e1000_phy_unknown;
 3004 
 3005         switch (phy_id) {
 3006         case M88E1000_I_PHY_ID:
 3007         case M88E1000_E_PHY_ID:
 3008         case M88E1111_I_PHY_ID:
 3009         case M88E1011_I_PHY_ID:
 3010         case M88E1543_E_PHY_ID:
 3011         case M88E1512_E_PHY_ID:
 3012         case I347AT4_E_PHY_ID:
 3013         case M88E1112_E_PHY_ID:
 3014         case M88E1340M_E_PHY_ID:
 3015                 phy_type = e1000_phy_m88;
 3016                 break;
 3017         case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */
 3018                 phy_type = e1000_phy_igp_2;
 3019                 break;
 3020         case GG82563_E_PHY_ID:
 3021                 phy_type = e1000_phy_gg82563;
 3022                 break;
 3023         case IGP03E1000_E_PHY_ID:
 3024                 phy_type = e1000_phy_igp_3;
 3025                 break;
 3026         case IFE_E_PHY_ID:
 3027         case IFE_PLUS_E_PHY_ID:
 3028         case IFE_C_E_PHY_ID:
 3029                 phy_type = e1000_phy_ife;
 3030                 break;
 3031         case BME1000_E_PHY_ID:
 3032         case BME1000_E_PHY_ID_R2:
 3033                 phy_type = e1000_phy_bm;
 3034                 break;
 3035         case I82578_E_PHY_ID:
 3036                 phy_type = e1000_phy_82578;
 3037                 break;
 3038         case I82577_E_PHY_ID:
 3039                 phy_type = e1000_phy_82577;
 3040                 break;
 3041         case I82579_E_PHY_ID:
 3042                 phy_type = e1000_phy_82579;
 3043                 break;
 3044         case I217_E_PHY_ID:
 3045                 phy_type = e1000_phy_i217;
 3046                 break;
 3047         case I82580_I_PHY_ID:
 3048                 phy_type = e1000_phy_82580;
 3049                 break;
 3050         case I210_I_PHY_ID:
 3051                 phy_type = e1000_phy_i210;
 3052                 break;
 3053         default:
 3054                 phy_type = e1000_phy_unknown;
 3055                 break;
 3056         }
 3057         return phy_type;
 3058 }
 3059 
 3060 /**
 3061  *  e1000_determine_phy_address - Determines PHY address.
 3062  *  @hw: pointer to the HW structure
 3063  *
 3064  *  This uses a trial and error method to loop through possible PHY
 3065  *  addresses. It tests each by reading the PHY ID registers and
 3066  *  checking for a match.
 3067  **/
 3068 s32 e1000_determine_phy_address(struct e1000_hw *hw)
 3069 {
 3070         u32 phy_addr = 0;
 3071         u32 i;
 3072         enum e1000_phy_type phy_type = e1000_phy_unknown;
 3073 
 3074         hw->phy.id = phy_type;
 3075 
 3076         for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) {
 3077                 hw->phy.addr = phy_addr;
 3078                 i = 0;
 3079 
 3080                 do {
 3081                         e1000_get_phy_id(hw);
 3082                         phy_type = e1000_get_phy_type_from_id(hw->phy.id);
 3083 
 3084                         /* If phy_type is valid, break - we found our
 3085                          * PHY address
 3086                          */
 3087                         if (phy_type != e1000_phy_unknown)
 3088                                 return E1000_SUCCESS;
 3089 
 3090                         msec_delay(1);
 3091                         i++;
 3092                 } while (i < 10);
 3093         }
 3094 
 3095         return -E1000_ERR_PHY_TYPE;
 3096 }
 3097 
 3098 /**
 3099  *  e1000_get_phy_addr_for_bm_page - Retrieve PHY page address
 3100  *  @page: page to access
 3101  *  @reg: register to access
 3102  *
 3103  *  Returns the phy address for the page requested.
 3104  **/
 3105 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg)
 3106 {
 3107         u32 phy_addr = 2;
 3108 
 3109         if ((page >= 768) || (page == 0 && reg == 25) || (reg == 31))
 3110                 phy_addr = 1;
 3111 
 3112         return phy_addr;
 3113 }
 3114 
 3115 /**
 3116  *  e1000_write_phy_reg_bm - Write BM PHY register
 3117  *  @hw: pointer to the HW structure
 3118  *  @offset: register offset to write to
 3119  *  @data: data to write at register offset
 3120  *
 3121  *  Acquires semaphore, if necessary, then writes the data to PHY register
 3122  *  at the offset.  Release any acquired semaphores before exiting.
 3123  **/
 3124 s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
 3125 {
 3126         s32 ret_val;
 3127         u32 page = offset >> IGP_PAGE_SHIFT;
 3128 
 3129         DEBUGFUNC("e1000_write_phy_reg_bm");
 3130 
 3131         ret_val = hw->phy.ops.acquire(hw);
 3132         if (ret_val)
 3133                 return ret_val;
 3134 
 3135         /* Page 800 works differently than the rest so it has its own func */
 3136         if (page == BM_WUC_PAGE) {
 3137                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
 3138                                                          false, false);
 3139                 goto release;
 3140         }
 3141 
 3142         hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
 3143 
 3144         if (offset > MAX_PHY_MULTI_PAGE_REG) {
 3145                 u32 page_shift, page_select;
 3146 
 3147                 /* Page select is register 31 for phy address 1 and 22 for
 3148                  * phy address 2 and 3. Page select is shifted only for
 3149                  * phy address 1.
 3150                  */
 3151                 if (hw->phy.addr == 1) {
 3152                         page_shift = IGP_PAGE_SHIFT;
 3153                         page_select = IGP01E1000_PHY_PAGE_SELECT;
 3154                 } else {
 3155                         page_shift = 0;
 3156                         page_select = BM_PHY_PAGE_SELECT;
 3157                 }
 3158 
 3159                 /* Page is shifted left, PHY expects (page x 32) */
 3160                 ret_val = e1000_write_phy_reg_mdic(hw, page_select,
 3161                                                    (page << page_shift));
 3162                 if (ret_val)
 3163                         goto release;
 3164         }
 3165 
 3166         ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 3167                                            data);
 3168 
 3169 release:
 3170         hw->phy.ops.release(hw);
 3171         return ret_val;
 3172 }
 3173 
 3174 /**
 3175  *  e1000_read_phy_reg_bm - Read BM PHY register
 3176  *  @hw: pointer to the HW structure
 3177  *  @offset: register offset to be read
 3178  *  @data: pointer to the read data
 3179  *
 3180  *  Acquires semaphore, if necessary, then reads the PHY register at offset
 3181  *  and storing the retrieved information in data.  Release any acquired
 3182  *  semaphores before exiting.
 3183  **/
 3184 s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
 3185 {
 3186         s32 ret_val;
 3187         u32 page = offset >> IGP_PAGE_SHIFT;
 3188 
 3189         DEBUGFUNC("e1000_read_phy_reg_bm");
 3190 
 3191         ret_val = hw->phy.ops.acquire(hw);
 3192         if (ret_val)
 3193                 return ret_val;
 3194 
 3195         /* Page 800 works differently than the rest so it has its own func */
 3196         if (page == BM_WUC_PAGE) {
 3197                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
 3198                                                          true, false);
 3199                 goto release;
 3200         }
 3201 
 3202         hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
 3203 
 3204         if (offset > MAX_PHY_MULTI_PAGE_REG) {
 3205                 u32 page_shift, page_select;
 3206 
 3207                 /* Page select is register 31 for phy address 1 and 22 for
 3208                  * phy address 2 and 3. Page select is shifted only for
 3209                  * phy address 1.
 3210                  */
 3211                 if (hw->phy.addr == 1) {
 3212                         page_shift = IGP_PAGE_SHIFT;
 3213                         page_select = IGP01E1000_PHY_PAGE_SELECT;
 3214                 } else {
 3215                         page_shift = 0;
 3216                         page_select = BM_PHY_PAGE_SELECT;
 3217                 }
 3218 
 3219                 /* Page is shifted left, PHY expects (page x 32) */
 3220                 ret_val = e1000_write_phy_reg_mdic(hw, page_select,
 3221                                                    (page << page_shift));
 3222                 if (ret_val)
 3223                         goto release;
 3224         }
 3225 
 3226         ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 3227                                           data);
 3228 release:
 3229         hw->phy.ops.release(hw);
 3230         return ret_val;
 3231 }
 3232 
 3233 /**
 3234  *  e1000_read_phy_reg_bm2 - Read BM PHY register
 3235  *  @hw: pointer to the HW structure
 3236  *  @offset: register offset to be read
 3237  *  @data: pointer to the read data
 3238  *
 3239  *  Acquires semaphore, if necessary, then reads the PHY register at offset
 3240  *  and storing the retrieved information in data.  Release any acquired
 3241  *  semaphores before exiting.
 3242  **/
 3243 s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
 3244 {
 3245         s32 ret_val;
 3246         u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
 3247 
 3248         DEBUGFUNC("e1000_read_phy_reg_bm2");
 3249 
 3250         ret_val = hw->phy.ops.acquire(hw);
 3251         if (ret_val)
 3252                 return ret_val;
 3253 
 3254         /* Page 800 works differently than the rest so it has its own func */
 3255         if (page == BM_WUC_PAGE) {
 3256                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
 3257                                                          true, false);
 3258                 goto release;
 3259         }
 3260 
 3261         hw->phy.addr = 1;
 3262 
 3263         if (offset > MAX_PHY_MULTI_PAGE_REG) {
 3264                 /* Page is shifted left, PHY expects (page x 32) */
 3265                 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
 3266                                                    page);
 3267 
 3268                 if (ret_val)
 3269                         goto release;
 3270         }
 3271 
 3272         ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 3273                                           data);
 3274 release:
 3275         hw->phy.ops.release(hw);
 3276         return ret_val;
 3277 }
 3278 
 3279 /**
 3280  *  e1000_write_phy_reg_bm2 - Write BM PHY register
 3281  *  @hw: pointer to the HW structure
 3282  *  @offset: register offset to write to
 3283  *  @data: data to write at register offset
 3284  *
 3285  *  Acquires semaphore, if necessary, then writes the data to PHY register
 3286  *  at the offset.  Release any acquired semaphores before exiting.
 3287  **/
 3288 s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
 3289 {
 3290         s32 ret_val;
 3291         u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
 3292 
 3293         DEBUGFUNC("e1000_write_phy_reg_bm2");
 3294 
 3295         ret_val = hw->phy.ops.acquire(hw);
 3296         if (ret_val)
 3297                 return ret_val;
 3298 
 3299         /* Page 800 works differently than the rest so it has its own func */
 3300         if (page == BM_WUC_PAGE) {
 3301                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
 3302                                                          false, false);
 3303                 goto release;
 3304         }
 3305 
 3306         hw->phy.addr = 1;
 3307 
 3308         if (offset > MAX_PHY_MULTI_PAGE_REG) {
 3309                 /* Page is shifted left, PHY expects (page x 32) */
 3310                 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
 3311                                                    page);
 3312 
 3313                 if (ret_val)
 3314                         goto release;
 3315         }
 3316 
 3317         ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 3318                                            data);
 3319 
 3320 release:
 3321         hw->phy.ops.release(hw);
 3322         return ret_val;
 3323 }
 3324 
 3325 /**
 3326  *  e1000_enable_phy_wakeup_reg_access_bm - enable access to BM wakeup registers
 3327  *  @hw: pointer to the HW structure
 3328  *  @phy_reg: pointer to store original contents of BM_WUC_ENABLE_REG
 3329  *
 3330  *  Assumes semaphore already acquired and phy_reg points to a valid memory
 3331  *  address to store contents of the BM_WUC_ENABLE_REG register.
 3332  **/
 3333 s32 e1000_enable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg)
 3334 {
 3335         s32 ret_val;
 3336         u16 temp;
 3337 
 3338         DEBUGFUNC("e1000_enable_phy_wakeup_reg_access_bm");
 3339 
 3340         if (!phy_reg)
 3341                 return -E1000_ERR_PARAM;
 3342 
 3343         /* All page select, port ctrl and wakeup registers use phy address 1 */
 3344         hw->phy.addr = 1;
 3345 
 3346         /* Select Port Control Registers page */
 3347         ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT));
 3348         if (ret_val) {
 3349                 DEBUGOUT("Could not set Port Control page\n");
 3350                 return ret_val;
 3351         }
 3352 
 3353         ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
 3354         if (ret_val) {
 3355                 DEBUGOUT2("Could not read PHY register %d.%d\n",
 3356                           BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG);
 3357                 return ret_val;
 3358         }
 3359 
 3360         /* Enable both PHY wakeup mode and Wakeup register page writes.
 3361          * Prevent a power state change by disabling ME and Host PHY wakeup.
 3362          */
 3363         temp = *phy_reg;
 3364         temp |= BM_WUC_ENABLE_BIT;
 3365         temp &= ~(BM_WUC_ME_WU_BIT | BM_WUC_HOST_WU_BIT);
 3366 
 3367         ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, temp);
 3368         if (ret_val) {
 3369                 DEBUGOUT2("Could not write PHY register %d.%d\n",
 3370                           BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG);
 3371                 return ret_val;
 3372         }
 3373 
 3374         /* Select Host Wakeup Registers page - caller now able to write
 3375          * registers on the Wakeup registers page
 3376          */
 3377         return e1000_set_page_igp(hw, (BM_WUC_PAGE << IGP_PAGE_SHIFT));
 3378 }
 3379 
 3380 /**
 3381  *  e1000_disable_phy_wakeup_reg_access_bm - disable access to BM wakeup regs
 3382  *  @hw: pointer to the HW structure
 3383  *  @phy_reg: pointer to original contents of BM_WUC_ENABLE_REG
 3384  *
 3385  *  Restore BM_WUC_ENABLE_REG to its original value.
 3386  *
 3387  *  Assumes semaphore already acquired and *phy_reg is the contents of the
 3388  *  BM_WUC_ENABLE_REG before register(s) on BM_WUC_PAGE were accessed by
 3389  *  caller.
 3390  **/
 3391 s32 e1000_disable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg)
 3392 {
 3393         s32 ret_val;
 3394 
 3395         DEBUGFUNC("e1000_disable_phy_wakeup_reg_access_bm");
 3396 
 3397         if (!phy_reg)
 3398                 return -E1000_ERR_PARAM;
 3399 
 3400         /* Select Port Control Registers page */
 3401         ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT));
 3402         if (ret_val) {
 3403                 DEBUGOUT("Could not set Port Control page\n");
 3404                 return ret_val;
 3405         }
 3406 
 3407         /* Restore 769.17 to its original value */
 3408         ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, *phy_reg);
 3409         if (ret_val)
 3410                 DEBUGOUT2("Could not restore PHY register %d.%d\n",
 3411                           BM_PORT_CTRL_PAGE, BM_WUC_ENABLE_REG);
 3412 
 3413         return ret_val;
 3414 }
 3415 
 3416 /**
 3417  *  e1000_access_phy_wakeup_reg_bm - Read/write BM PHY wakeup register
 3418  *  @hw: pointer to the HW structure
 3419  *  @offset: register offset to be read or written
 3420  *  @data: pointer to the data to read or write
 3421  *  @read: determines if operation is read or write
 3422  *  @page_set: BM_WUC_PAGE already set and access enabled
 3423  *
 3424  *  Read the PHY register at offset and store the retrieved information in
 3425  *  data, or write data to PHY register at offset.  Note the procedure to
 3426  *  access the PHY wakeup registers is different than reading the other PHY
 3427  *  registers. It works as such:
 3428  *  1) Set 769.17.2 (page 769, register 17, bit 2) = 1
 3429  *  2) Set page to 800 for host (801 if we were manageability)
 3430  *  3) Write the address using the address opcode (0x11)
 3431  *  4) Read or write the data using the data opcode (0x12)
 3432  *  5) Restore 769.17.2 to its original value
 3433  *
 3434  *  Steps 1 and 2 are done by e1000_enable_phy_wakeup_reg_access_bm() and
 3435  *  step 5 is done by e1000_disable_phy_wakeup_reg_access_bm().
 3436  *
 3437  *  Assumes semaphore is already acquired.  When page_set==true, assumes
 3438  *  the PHY page is set to BM_WUC_PAGE (i.e. a function in the call stack
 3439  *  is responsible for calls to e1000_[enable|disable]_phy_wakeup_reg_bm()).
 3440  **/
 3441 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
 3442                                           u16 *data, bool read, bool page_set)
 3443 {
 3444         s32 ret_val;
 3445         u16 reg = BM_PHY_REG_NUM(offset);
 3446         u16 page = BM_PHY_REG_PAGE(offset);
 3447         u16 phy_reg = 0;
 3448 
 3449         DEBUGFUNC("e1000_access_phy_wakeup_reg_bm");
 3450 
 3451         /* Gig must be disabled for MDIO accesses to Host Wakeup reg page */
 3452         if ((hw->mac.type == e1000_pchlan) &&
 3453            (!(E1000_READ_REG(hw, E1000_PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE)))
 3454                 DEBUGOUT1("Attempting to access page %d while gig enabled.\n",
 3455                           page);
 3456 
 3457         if (!page_set) {
 3458                 /* Enable access to PHY wakeup registers */
 3459                 ret_val = e1000_enable_phy_wakeup_reg_access_bm(hw, &phy_reg);
 3460                 if (ret_val) {
 3461                         DEBUGOUT("Could not enable PHY wakeup reg access\n");
 3462                         return ret_val;
 3463                 }
 3464         }
 3465 
 3466         DEBUGOUT2("Accessing PHY page %d reg 0x%x\n", page, reg);
 3467 
 3468         /* Write the Wakeup register page offset value using opcode 0x11 */
 3469         ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg);
 3470         if (ret_val) {
 3471                 DEBUGOUT1("Could not write address opcode to page %d\n", page);
 3472                 return ret_val;
 3473         }
 3474 
 3475         if (read) {
 3476                 /* Read the Wakeup register page value using opcode 0x12 */
 3477                 ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
 3478                                                   data);
 3479         } else {
 3480                 /* Write the Wakeup register page value using opcode 0x12 */
 3481                 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
 3482                                                    *data);
 3483         }
 3484 
 3485         if (ret_val) {
 3486                 DEBUGOUT2("Could not access PHY reg %d.%d\n", page, reg);
 3487                 return ret_val;
 3488         }
 3489 
 3490         if (!page_set)
 3491                 ret_val = e1000_disable_phy_wakeup_reg_access_bm(hw, &phy_reg);
 3492 
 3493         return ret_val;
 3494 }
 3495 
 3496 /**
 3497  * e1000_power_up_phy_copper - Restore copper link in case of PHY power down
 3498  * @hw: pointer to the HW structure
 3499  *
 3500  * In the case of a PHY power down to save power, or to turn off link during a
 3501  * driver unload, or wake on lan is not enabled, restore the link to previous
 3502  * settings.
 3503  **/
 3504 void e1000_power_up_phy_copper(struct e1000_hw *hw)
 3505 {
 3506         u16 mii_reg = 0;
 3507 
 3508         /* The PHY will retain its settings across a power down/up cycle */
 3509         hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
 3510         mii_reg &= ~MII_CR_POWER_DOWN;
 3511         hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
 3512 }
 3513 
 3514 /**
 3515  * e1000_power_down_phy_copper - Restore copper link in case of PHY power down
 3516  * @hw: pointer to the HW structure
 3517  *
 3518  * In the case of a PHY power down to save power, or to turn off link during a
 3519  * driver unload, or wake on lan is not enabled, restore the link to previous
 3520  * settings.
 3521  **/
 3522 void e1000_power_down_phy_copper(struct e1000_hw *hw)
 3523 {
 3524         u16 mii_reg = 0;
 3525 
 3526         /* The PHY will retain its settings across a power down/up cycle */
 3527         hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
 3528         mii_reg |= MII_CR_POWER_DOWN;
 3529         hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
 3530         msec_delay(1);
 3531 }
 3532 
 3533 /**
 3534  *  __e1000_read_phy_reg_hv -  Read HV PHY register
 3535  *  @hw: pointer to the HW structure
 3536  *  @offset: register offset to be read
 3537  *  @data: pointer to the read data
 3538  *  @locked: semaphore has already been acquired or not
 3539  *  @page_set: BM_WUC_PAGE already set and access enabled
 3540  *
 3541  *  Acquires semaphore, if necessary, then reads the PHY register at offset
 3542  *  and stores the retrieved information in data.  Release any acquired
 3543  *  semaphore before exiting.
 3544  **/
 3545 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data,
 3546                                    bool locked, bool page_set)
 3547 {
 3548         s32 ret_val;
 3549         u16 page = BM_PHY_REG_PAGE(offset);
 3550         u16 reg = BM_PHY_REG_NUM(offset);
 3551         u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
 3552 
 3553         DEBUGFUNC("__e1000_read_phy_reg_hv");
 3554 
 3555         if (!locked) {
 3556                 ret_val = hw->phy.ops.acquire(hw);
 3557                 if (ret_val)
 3558                         return ret_val;
 3559         }
 3560         /* Page 800 works differently than the rest so it has its own func */
 3561         if (page == BM_WUC_PAGE) {
 3562                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
 3563                                                          true, page_set);
 3564                 goto out;
 3565         }
 3566 
 3567         if (page > 0 && page < HV_INTC_FC_PAGE_START) {
 3568                 ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
 3569                                                          data, true);
 3570                 goto out;
 3571         }
 3572 
 3573         if (!page_set) {
 3574                 if (page == HV_INTC_FC_PAGE_START)
 3575                         page = 0;
 3576 
 3577                 if (reg > MAX_PHY_MULTI_PAGE_REG) {
 3578                         /* Page is shifted left, PHY expects (page x 32) */
 3579                         ret_val = e1000_set_page_igp(hw,
 3580                                                      (page << IGP_PAGE_SHIFT));
 3581 
 3582                         hw->phy.addr = phy_addr;
 3583 
 3584                         if (ret_val)
 3585                                 goto out;
 3586                 }
 3587         }
 3588 
 3589         DEBUGOUT3("reading PHY page %d (or 0x%x shifted) reg 0x%x\n", page,
 3590                   page << IGP_PAGE_SHIFT, reg);
 3591 
 3592         ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
 3593                                           data);
 3594 out:
 3595         if (!locked)
 3596                 hw->phy.ops.release(hw);
 3597 
 3598         return ret_val;
 3599 }
 3600 
 3601 /**
 3602  *  e1000_read_phy_reg_hv -  Read HV PHY register
 3603  *  @hw: pointer to the HW structure
 3604  *  @offset: register offset to be read
 3605  *  @data: pointer to the read data
 3606  *
 3607  *  Acquires semaphore then reads the PHY register at offset and stores
 3608  *  the retrieved information in data.  Release the acquired semaphore
 3609  *  before exiting.
 3610  **/
 3611 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data)
 3612 {
 3613         return __e1000_read_phy_reg_hv(hw, offset, data, false, false);
 3614 }
 3615 
 3616 /**
 3617  *  e1000_read_phy_reg_hv_locked -  Read HV PHY register
 3618  *  @hw: pointer to the HW structure
 3619  *  @offset: register offset to be read
 3620  *  @data: pointer to the read data
 3621  *
 3622  *  Reads the PHY register at offset and stores the retrieved information
 3623  *  in data.  Assumes semaphore already acquired.
 3624  **/
 3625 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data)
 3626 {
 3627         return __e1000_read_phy_reg_hv(hw, offset, data, true, false);
 3628 }
 3629 
 3630 /**
 3631  *  e1000_read_phy_reg_page_hv - Read HV PHY register
 3632  *  @hw: pointer to the HW structure
 3633  *  @offset: register offset to write to
 3634  *  @data: data to write at register offset
 3635  *
 3636  *  Reads the PHY register at offset and stores the retrieved information
 3637  *  in data.  Assumes semaphore already acquired and page already set.
 3638  **/
 3639 s32 e1000_read_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 *data)
 3640 {
 3641         return __e1000_read_phy_reg_hv(hw, offset, data, true, true);
 3642 }
 3643 
 3644 /**
 3645  *  __e1000_write_phy_reg_hv - Write HV PHY register
 3646  *  @hw: pointer to the HW structure
 3647  *  @offset: register offset to write to
 3648  *  @data: data to write at register offset
 3649  *  @locked: semaphore has already been acquired or not
 3650  *  @page_set: BM_WUC_PAGE already set and access enabled
 3651  *
 3652  *  Acquires semaphore, if necessary, then writes the data to PHY register
 3653  *  at the offset.  Release any acquired semaphores before exiting.
 3654  **/
 3655 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data,
 3656                                     bool locked, bool page_set)
 3657 {
 3658         s32 ret_val;
 3659         u16 page = BM_PHY_REG_PAGE(offset);
 3660         u16 reg = BM_PHY_REG_NUM(offset);
 3661         u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
 3662 
 3663         DEBUGFUNC("__e1000_write_phy_reg_hv");
 3664 
 3665         if (!locked) {
 3666                 ret_val = hw->phy.ops.acquire(hw);
 3667                 if (ret_val)
 3668                         return ret_val;
 3669         }
 3670         /* Page 800 works differently than the rest so it has its own func */
 3671         if (page == BM_WUC_PAGE) {
 3672                 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
 3673                                                          false, page_set);
 3674                 goto out;
 3675         }
 3676 
 3677         if (page > 0 && page < HV_INTC_FC_PAGE_START) {
 3678                 ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
 3679                                                          &data, false);
 3680                 goto out;
 3681         }
 3682 
 3683         if (!page_set) {
 3684                 if (page == HV_INTC_FC_PAGE_START)
 3685                         page = 0;
 3686 
 3687                 /* Workaround MDIO accesses being disabled after entering IEEE
 3688                  * Power Down (when bit 11 of the PHY Control register is set)
 3689                  */
 3690                 if ((hw->phy.type == e1000_phy_82578) &&
 3691                     (hw->phy.revision >= 1) &&
 3692                     (hw->phy.addr == 2) &&
 3693                     !(MAX_PHY_REG_ADDRESS & reg) &&
 3694                     (data & (1 << 11))) {
 3695                         u16 data2 = 0x7EFF;
 3696                         ret_val = e1000_access_phy_debug_regs_hv(hw,
 3697                                                                  (1 << 6) | 0x3,
 3698                                                                  &data2, false);
 3699                         if (ret_val)
 3700                                 goto out;
 3701                 }
 3702 
 3703                 if (reg > MAX_PHY_MULTI_PAGE_REG) {
 3704                         /* Page is shifted left, PHY expects (page x 32) */
 3705                         ret_val = e1000_set_page_igp(hw,
 3706                                                      (page << IGP_PAGE_SHIFT));
 3707 
 3708                         hw->phy.addr = phy_addr;
 3709 
 3710                         if (ret_val)
 3711                                 goto out;
 3712                 }
 3713         }
 3714 
 3715         DEBUGOUT3("writing PHY page %d (or 0x%x shifted) reg 0x%x\n", page,
 3716                   page << IGP_PAGE_SHIFT, reg);
 3717 
 3718         ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
 3719                                            data);
 3720 
 3721 out:
 3722         if (!locked)
 3723                 hw->phy.ops.release(hw);
 3724 
 3725         return ret_val;
 3726 }
 3727 
 3728 /**
 3729  *  e1000_write_phy_reg_hv - Write HV PHY register
 3730  *  @hw: pointer to the HW structure
 3731  *  @offset: register offset to write to
 3732  *  @data: data to write at register offset
 3733  *
 3734  *  Acquires semaphore then writes the data to PHY register at the offset.
 3735  *  Release the acquired semaphores before exiting.
 3736  **/
 3737 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
 3738 {
 3739         return __e1000_write_phy_reg_hv(hw, offset, data, false, false);
 3740 }
 3741 
 3742 /**
 3743  *  e1000_write_phy_reg_hv_locked - Write HV PHY register
 3744  *  @hw: pointer to the HW structure
 3745  *  @offset: register offset to write to
 3746  *  @data: data to write at register offset
 3747  *
 3748  *  Writes the data to PHY register at the offset.  Assumes semaphore
 3749  *  already acquired.
 3750  **/
 3751 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data)
 3752 {
 3753         return __e1000_write_phy_reg_hv(hw, offset, data, true, false);
 3754 }
 3755 
 3756 /**
 3757  *  e1000_write_phy_reg_page_hv - Write HV PHY register
 3758  *  @hw: pointer to the HW structure
 3759  *  @offset: register offset to write to
 3760  *  @data: data to write at register offset
 3761  *
 3762  *  Writes the data to PHY register at the offset.  Assumes semaphore
 3763  *  already acquired and page already set.
 3764  **/
 3765 s32 e1000_write_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 data)
 3766 {
 3767         return __e1000_write_phy_reg_hv(hw, offset, data, true, true);
 3768 }
 3769 
 3770 /**
 3771  *  e1000_get_phy_addr_for_hv_page - Get PHY adrress based on page
 3772  *  @page: page to be accessed
 3773  **/
 3774 static u32 e1000_get_phy_addr_for_hv_page(u32 page)
 3775 {
 3776         u32 phy_addr = 2;
 3777 
 3778         if (page >= HV_INTC_FC_PAGE_START)
 3779                 phy_addr = 1;
 3780 
 3781         return phy_addr;
 3782 }
 3783 
 3784 /**
 3785  *  e1000_access_phy_debug_regs_hv - Read HV PHY vendor specific high registers
 3786  *  @hw: pointer to the HW structure
 3787  *  @offset: register offset to be read or written
 3788  *  @data: pointer to the data to be read or written
 3789  *  @read: determines if operation is read or write
 3790  *
 3791  *  Reads the PHY register at offset and stores the retreived information
 3792  *  in data.  Assumes semaphore already acquired.  Note that the procedure
 3793  *  to access these regs uses the address port and data port to read/write.
 3794  *  These accesses done with PHY address 2 and without using pages.
 3795  **/
 3796 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
 3797                                           u16 *data, bool read)
 3798 {
 3799         s32 ret_val;
 3800         u32 addr_reg;
 3801         u32 data_reg;
 3802 
 3803         DEBUGFUNC("e1000_access_phy_debug_regs_hv");
 3804 
 3805         /* This takes care of the difference with desktop vs mobile phy */
 3806         addr_reg = ((hw->phy.type == e1000_phy_82578) ?
 3807                     I82578_ADDR_REG : I82577_ADDR_REG);
 3808         data_reg = addr_reg + 1;
 3809 
 3810         /* All operations in this function are phy address 2 */
 3811         hw->phy.addr = 2;
 3812 
 3813         /* masking with 0x3F to remove the page from offset */
 3814         ret_val = e1000_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F);
 3815         if (ret_val) {
 3816                 DEBUGOUT("Could not write the Address Offset port register\n");
 3817                 return ret_val;
 3818         }
 3819 
 3820         /* Read or write the data value next */
 3821         if (read)
 3822                 ret_val = e1000_read_phy_reg_mdic(hw, data_reg, data);
 3823         else
 3824                 ret_val = e1000_write_phy_reg_mdic(hw, data_reg, *data);
 3825 
 3826         if (ret_val)
 3827                 DEBUGOUT("Could not access the Data port register\n");
 3828 
 3829         return ret_val;
 3830 }
 3831 
 3832 /**
 3833  *  e1000_link_stall_workaround_hv - Si workaround
 3834  *  @hw: pointer to the HW structure
 3835  *
 3836  *  This function works around a Si bug where the link partner can get
 3837  *  a link up indication before the PHY does.  If small packets are sent
 3838  *  by the link partner they can be placed in the packet buffer without
 3839  *  being properly accounted for by the PHY and will stall preventing
 3840  *  further packets from being received.  The workaround is to clear the
 3841  *  packet buffer after the PHY detects link up.
 3842  **/
 3843 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw)
 3844 {
 3845         s32 ret_val = E1000_SUCCESS;
 3846         u16 data;
 3847 
 3848         DEBUGFUNC("e1000_link_stall_workaround_hv");
 3849 
 3850         if (hw->phy.type != e1000_phy_82578)
 3851                 return E1000_SUCCESS;
 3852 
 3853         /* Do not apply workaround if in PHY loopback bit 14 set */
 3854         hw->phy.ops.read_reg(hw, PHY_CONTROL, &data);
 3855         if (data & PHY_CONTROL_LB)
 3856                 return E1000_SUCCESS;
 3857 
 3858         /* check if link is up and at 1Gbps */
 3859         ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data);
 3860         if (ret_val)
 3861                 return ret_val;
 3862 
 3863         data &= (BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED |
 3864                  BM_CS_STATUS_SPEED_MASK);
 3865 
 3866         if (data != (BM_CS_STATUS_LINK_UP | BM_CS_STATUS_RESOLVED |
 3867                      BM_CS_STATUS_SPEED_1000))
 3868                 return E1000_SUCCESS;
 3869 
 3870         msec_delay(200);
 3871 
 3872         /* flush the packets in the fifo buffer */
 3873         ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL,
 3874                                         (HV_MUX_DATA_CTRL_GEN_TO_MAC |
 3875                                          HV_MUX_DATA_CTRL_FORCE_SPEED));
 3876         if (ret_val)
 3877                 return ret_val;
 3878 
 3879         return hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL,
 3880                                      HV_MUX_DATA_CTRL_GEN_TO_MAC);
 3881 }
 3882 
 3883 /**
 3884  *  e1000_check_polarity_82577 - Checks the polarity.
 3885  *  @hw: pointer to the HW structure
 3886  *
 3887  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
 3888  *
 3889  *  Polarity is determined based on the PHY specific status register.
 3890  **/
 3891 s32 e1000_check_polarity_82577(struct e1000_hw *hw)
 3892 {
 3893         struct e1000_phy_info *phy = &hw->phy;
 3894         s32 ret_val;
 3895         u16 data;
 3896 
 3897         DEBUGFUNC("e1000_check_polarity_82577");
 3898 
 3899         ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data);
 3900 
 3901         if (!ret_val)
 3902                 phy->cable_polarity = ((data & I82577_PHY_STATUS2_REV_POLARITY)
 3903                                        ? e1000_rev_polarity_reversed
 3904                                        : e1000_rev_polarity_normal);
 3905 
 3906         return ret_val;
 3907 }
 3908 
 3909 /**
 3910  *  e1000_phy_force_speed_duplex_82577 - Force speed/duplex for I82577 PHY
 3911  *  @hw: pointer to the HW structure
 3912  *
 3913  *  Calls the PHY setup function to force speed and duplex.
 3914  **/
 3915 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw)
 3916 {
 3917         struct e1000_phy_info *phy = &hw->phy;
 3918         s32 ret_val;
 3919         u16 phy_data;
 3920         bool link;
 3921 
 3922         DEBUGFUNC("e1000_phy_force_speed_duplex_82577");
 3923 
 3924         ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
 3925         if (ret_val)
 3926                 return ret_val;
 3927 
 3928         e1000_phy_force_speed_duplex_setup(hw, &phy_data);
 3929 
 3930         ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
 3931         if (ret_val)
 3932                 return ret_val;
 3933 
 3934         usec_delay(1);
 3935 
 3936         if (phy->autoneg_wait_to_complete) {
 3937                 DEBUGOUT("Waiting for forced speed/duplex link on 82577 phy\n");
 3938 
 3939                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 3940                                                      100000, &link);
 3941                 if (ret_val)
 3942                         return ret_val;
 3943 
 3944                 if (!link)
 3945                         DEBUGOUT("Link taking longer than expected.\n");
 3946 
 3947                 /* Try once more */
 3948                 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
 3949                                                      100000, &link);
 3950         }
 3951 
 3952         return ret_val;
 3953 }
 3954 
 3955 /**
 3956  *  e1000_get_phy_info_82577 - Retrieve I82577 PHY information
 3957  *  @hw: pointer to the HW structure
 3958  *
 3959  *  Read PHY status to determine if link is up.  If link is up, then
 3960  *  set/determine 10base-T extended distance and polarity correction.  Read
 3961  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
 3962  *  determine on the cable length, local and remote receiver.
 3963  **/
 3964 s32 e1000_get_phy_info_82577(struct e1000_hw *hw)
 3965 {
 3966         struct e1000_phy_info *phy = &hw->phy;
 3967         s32 ret_val;
 3968         u16 data;
 3969         bool link;
 3970 
 3971         DEBUGFUNC("e1000_get_phy_info_82577");
 3972 
 3973         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 3974         if (ret_val)
 3975                 return ret_val;
 3976 
 3977         if (!link) {
 3978                 DEBUGOUT("Phy info is only valid if link is up\n");
 3979                 return -E1000_ERR_CONFIG;
 3980         }
 3981 
 3982         phy->polarity_correction = true;
 3983 
 3984         ret_val = e1000_check_polarity_82577(hw);
 3985         if (ret_val)
 3986                 return ret_val;
 3987 
 3988         ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data);
 3989         if (ret_val)
 3990                 return ret_val;
 3991 
 3992         phy->is_mdix = !!(data & I82577_PHY_STATUS2_MDIX);
 3993 
 3994         if ((data & I82577_PHY_STATUS2_SPEED_MASK) ==
 3995             I82577_PHY_STATUS2_SPEED_1000MBPS) {
 3996                 ret_val = hw->phy.ops.get_cable_length(hw);
 3997                 if (ret_val)
 3998                         return ret_val;
 3999 
 4000                 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
 4001                 if (ret_val)
 4002                         return ret_val;
 4003 
 4004                 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
 4005                                 ? e1000_1000t_rx_status_ok
 4006                                 : e1000_1000t_rx_status_not_ok;
 4007 
 4008                 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
 4009                                  ? e1000_1000t_rx_status_ok
 4010                                  : e1000_1000t_rx_status_not_ok;
 4011         } else {
 4012                 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
 4013                 phy->local_rx = e1000_1000t_rx_status_undefined;
 4014                 phy->remote_rx = e1000_1000t_rx_status_undefined;
 4015         }
 4016 
 4017         return E1000_SUCCESS;
 4018 }
 4019 
 4020 /**
 4021  *  e1000_get_cable_length_82577 - Determine cable length for 82577 PHY
 4022  *  @hw: pointer to the HW structure
 4023  *
 4024  * Reads the diagnostic status register and verifies result is valid before
 4025  * placing it in the phy_cable_length field.
 4026  **/
 4027 s32 e1000_get_cable_length_82577(struct e1000_hw *hw)
 4028 {
 4029         struct e1000_phy_info *phy = &hw->phy;
 4030         s32 ret_val;
 4031         u16 phy_data, length;
 4032 
 4033         DEBUGFUNC("e1000_get_cable_length_82577");
 4034 
 4035         ret_val = phy->ops.read_reg(hw, I82577_PHY_DIAG_STATUS, &phy_data);
 4036         if (ret_val)
 4037                 return ret_val;
 4038 
 4039         length = ((phy_data & I82577_DSTATUS_CABLE_LENGTH) >>
 4040                   I82577_DSTATUS_CABLE_LENGTH_SHIFT);
 4041 
 4042         if (length == E1000_CABLE_LENGTH_UNDEFINED)
 4043                 return -E1000_ERR_PHY;
 4044 
 4045         phy->cable_length = length;
 4046 
 4047         return E1000_SUCCESS;
 4048 }
 4049 
 4050 /**
 4051  *  e1000_write_phy_reg_gs40g - Write GS40G  PHY register
 4052  *  @hw: pointer to the HW structure
 4053  *  @offset: register offset to write to
 4054  *  @data: data to write at register offset
 4055  *
 4056  *  Acquires semaphore, if necessary, then writes the data to PHY register
 4057  *  at the offset.  Release any acquired semaphores before exiting.
 4058  **/
 4059 s32 e1000_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data)
 4060 {
 4061         s32 ret_val;
 4062         u16 page = offset >> GS40G_PAGE_SHIFT;
 4063 
 4064         DEBUGFUNC("e1000_write_phy_reg_gs40g");
 4065 
 4066         offset = offset & GS40G_OFFSET_MASK;
 4067         ret_val = hw->phy.ops.acquire(hw);
 4068         if (ret_val)
 4069                 return ret_val;
 4070 
 4071         ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page);
 4072         if (ret_val)
 4073                 goto release;
 4074         ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
 4075 
 4076 release:
 4077         hw->phy.ops.release(hw);
 4078         return ret_val;
 4079 }
 4080 
 4081 /**
 4082  *  e1000_read_phy_reg_gs40g - Read GS40G  PHY register
 4083  *  @hw: pointer to the HW structure
 4084  *  @offset: lower half is register offset to read to
 4085  *     upper half is page to use.
 4086  *  @data: data to read at register offset
 4087  *
 4088  *  Acquires semaphore, if necessary, then reads the data in the PHY register
 4089  *  at the offset.  Release any acquired semaphores before exiting.
 4090  **/
 4091 s32 e1000_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data)
 4092 {
 4093         s32 ret_val;
 4094         u16 page = offset >> GS40G_PAGE_SHIFT;
 4095 
 4096         DEBUGFUNC("e1000_read_phy_reg_gs40g");
 4097 
 4098         offset = offset & GS40G_OFFSET_MASK;
 4099         ret_val = hw->phy.ops.acquire(hw);
 4100         if (ret_val)
 4101                 return ret_val;
 4102 
 4103         ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page);
 4104         if (ret_val)
 4105                 goto release;
 4106         ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
 4107 
 4108 release:
 4109         hw->phy.ops.release(hw);
 4110         return ret_val;
 4111 }
 4112 
 4113 /**
 4114  *  e1000_read_phy_reg_mphy - Read mPHY control register
 4115  *  @hw: pointer to the HW structure
 4116  *  @address: address to be read
 4117  *  @data: pointer to the read data
 4118  *
 4119  *  Reads the mPHY control register in the PHY at offset and stores the
 4120  *  information read to data.
 4121  **/
 4122 s32 e1000_read_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 *data)
 4123 {
 4124         u32 mphy_ctrl = 0;
 4125         bool locked = false;
 4126         bool ready;
 4127 
 4128         DEBUGFUNC("e1000_read_phy_reg_mphy");
 4129 
 4130         /* Check if mPHY is ready to read/write operations */
 4131         ready = e1000_is_mphy_ready(hw);
 4132         if (!ready)
 4133                 return -E1000_ERR_PHY;
 4134 
 4135         /* Check if mPHY access is disabled and enable it if so */
 4136         mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL);
 4137         if (mphy_ctrl & E1000_MPHY_DIS_ACCESS) {
 4138                 locked = true;
 4139                 ready = e1000_is_mphy_ready(hw);
 4140                 if (!ready)
 4141                         return -E1000_ERR_PHY;
 4142                 mphy_ctrl |= E1000_MPHY_ENA_ACCESS;
 4143                 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl);
 4144         }
 4145 
 4146         /* Set the address that we want to read */
 4147         ready = e1000_is_mphy_ready(hw);
 4148         if (!ready)
 4149                 return -E1000_ERR_PHY;
 4150 
 4151         /* We mask address, because we want to use only current lane */
 4152         mphy_ctrl = (mphy_ctrl & ~E1000_MPHY_ADDRESS_MASK &
 4153                 ~E1000_MPHY_ADDRESS_FNC_OVERRIDE) |
 4154                 (address & E1000_MPHY_ADDRESS_MASK);
 4155         E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl);
 4156 
 4157         /* Read data from the address */
 4158         ready = e1000_is_mphy_ready(hw);
 4159         if (!ready)
 4160                 return -E1000_ERR_PHY;
 4161         *data = E1000_READ_REG(hw, E1000_MPHY_DATA);
 4162 
 4163         /* Disable access to mPHY if it was originally disabled */
 4164         if (locked)
 4165                 ready = e1000_is_mphy_ready(hw);
 4166         if (!ready)
 4167                 return -E1000_ERR_PHY;
 4168         E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL,
 4169                         E1000_MPHY_DIS_ACCESS);
 4170 
 4171         return E1000_SUCCESS;
 4172 }
 4173 
 4174 /**
 4175  *  e1000_write_phy_reg_mphy - Write mPHY control register
 4176  *  @hw: pointer to the HW structure
 4177  *  @address: address to write to
 4178  *  @data: data to write to register at offset
 4179  *  @line_override: used when we want to use different line than default one
 4180  *
 4181  *  Writes data to mPHY control register.
 4182  **/
 4183 s32 e1000_write_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 data,
 4184                              bool line_override)
 4185 {
 4186         u32 mphy_ctrl = 0;
 4187         bool locked = false;
 4188         bool ready;
 4189 
 4190         DEBUGFUNC("e1000_write_phy_reg_mphy");
 4191 
 4192         /* Check if mPHY is ready to read/write operations */
 4193         ready = e1000_is_mphy_ready(hw);
 4194         if (!ready)
 4195                 return -E1000_ERR_PHY;
 4196 
 4197         /* Check if mPHY access is disabled and enable it if so */
 4198         mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL);
 4199         if (mphy_ctrl & E1000_MPHY_DIS_ACCESS) {
 4200                 locked = true;
 4201                 ready = e1000_is_mphy_ready(hw);
 4202                 if (!ready)
 4203                         return -E1000_ERR_PHY;
 4204                 mphy_ctrl |= E1000_MPHY_ENA_ACCESS;
 4205                 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl);
 4206         }
 4207 
 4208         /* Set the address that we want to read */
 4209         ready = e1000_is_mphy_ready(hw);
 4210         if (!ready)
 4211                 return -E1000_ERR_PHY;
 4212 
 4213         /* We mask address, because we want to use only current lane */
 4214         if (line_override)
 4215                 mphy_ctrl |= E1000_MPHY_ADDRESS_FNC_OVERRIDE;
 4216         else
 4217                 mphy_ctrl &= ~E1000_MPHY_ADDRESS_FNC_OVERRIDE;
 4218         mphy_ctrl = (mphy_ctrl & ~E1000_MPHY_ADDRESS_MASK) |
 4219                 (address & E1000_MPHY_ADDRESS_MASK);
 4220         E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl);
 4221 
 4222         /* Read data from the address */
 4223         ready = e1000_is_mphy_ready(hw);
 4224         if (!ready)
 4225                 return -E1000_ERR_PHY;
 4226         E1000_WRITE_REG(hw, E1000_MPHY_DATA, data);
 4227 
 4228         /* Disable access to mPHY if it was originally disabled */
 4229         if (locked)
 4230                 ready = e1000_is_mphy_ready(hw);
 4231         if (!ready)
 4232                 return -E1000_ERR_PHY;
 4233         E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL,
 4234                         E1000_MPHY_DIS_ACCESS);
 4235 
 4236         return E1000_SUCCESS;
 4237 }
 4238 
 4239 /**
 4240  *  e1000_is_mphy_ready - Check if mPHY control register is not busy
 4241  *  @hw: pointer to the HW structure
 4242  *
 4243  *  Returns mPHY control register status.
 4244  **/
 4245 bool e1000_is_mphy_ready(struct e1000_hw *hw)
 4246 {
 4247         u16 retry_count = 0;
 4248         u32 mphy_ctrl = 0;
 4249         bool ready = false;
 4250 
 4251         while (retry_count < 2) {
 4252                 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL);
 4253                 if (mphy_ctrl & E1000_MPHY_BUSY) {
 4254                         usec_delay(20);
 4255                         retry_count++;
 4256                         continue;
 4257                 }
 4258                 ready = true;
 4259                 break;
 4260         }
 4261 
 4262         if (!ready)
 4263                 DEBUGOUT("ERROR READING mPHY control register, phy is busy.\n");
 4264 
 4265         return ready;
 4266 }
 4267 
 4268 /**
 4269  *  __e1000_access_xmdio_reg - Read/write XMDIO register
 4270  *  @hw: pointer to the HW structure
 4271  *  @address: XMDIO address to program
 4272  *  @dev_addr: device address to program
 4273  *  @data: pointer to value to read/write from/to the XMDIO address
 4274  *  @read: boolean flag to indicate read or write
 4275  **/
 4276 static s32 __e1000_access_xmdio_reg(struct e1000_hw *hw, u16 address,
 4277                                     u8 dev_addr, u16 *data, bool read)
 4278 {
 4279         s32 ret_val;
 4280 
 4281         DEBUGFUNC("__e1000_access_xmdio_reg");
 4282 
 4283         ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, dev_addr);
 4284         if (ret_val)
 4285                 return ret_val;
 4286 
 4287         ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, address);
 4288         if (ret_val)
 4289                 return ret_val;
 4290 
 4291         ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, E1000_MMDAC_FUNC_DATA |
 4292                                         dev_addr);
 4293         if (ret_val)
 4294                 return ret_val;
 4295 
 4296         if (read)
 4297                 ret_val = hw->phy.ops.read_reg(hw, E1000_MMDAAD, data);
 4298         else
 4299                 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, *data);
 4300         if (ret_val)
 4301                 return ret_val;
 4302 
 4303         /* Recalibrate the device back to 0 */
 4304         ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, 0);
 4305         if (ret_val)
 4306                 return ret_val;
 4307 
 4308         return ret_val;
 4309 }
 4310 
 4311 /**
 4312  *  e1000_read_xmdio_reg - Read XMDIO register
 4313  *  @hw: pointer to the HW structure
 4314  *  @addr: XMDIO address to program
 4315  *  @dev_addr: device address to program
 4316  *  @data: value to be read from the EMI address
 4317  **/
 4318 s32 e1000_read_xmdio_reg(struct e1000_hw *hw, u16 addr, u8 dev_addr, u16 *data)
 4319 {
 4320         DEBUGFUNC("e1000_read_xmdio_reg");
 4321 
 4322                 return __e1000_access_xmdio_reg(hw, addr, dev_addr, data, true);
 4323 }
 4324 
 4325 /**
 4326  *  e1000_write_xmdio_reg - Write XMDIO register
 4327  *  @hw: pointer to the HW structure
 4328  *  @addr: XMDIO address to program
 4329  *  @dev_addr: device address to program
 4330  *  @data: value to be written to the XMDIO address
 4331  **/
 4332 s32 e1000_write_xmdio_reg(struct e1000_hw *hw, u16 addr, u8 dev_addr, u16 data)
 4333 {
 4334         DEBUGFUNC("e1000_write_xmdio_reg");
 4335 
 4336                 return __e1000_access_xmdio_reg(hw, addr, dev_addr, &data,
 4337                                                 false);
 4338 }

Cache object: ebebe562b1220c0149999c2f68e855b4


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