dpdk/drivers/net/e1000/base/e1000_82541.c
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2001-2020 Intel Corporation
   3 */
   4
   5/*
   6 * 82541EI Gigabit Ethernet Controller
   7 * 82541ER Gigabit Ethernet Controller
   8 * 82541GI Gigabit Ethernet Controller
   9 * 82541PI Gigabit Ethernet Controller
  10 * 82547EI Gigabit Ethernet Controller
  11 * 82547GI Gigabit Ethernet Controller
  12 */
  13
  14#include "e1000_api.h"
  15
  16STATIC s32  e1000_init_phy_params_82541(struct e1000_hw *hw);
  17STATIC s32  e1000_init_nvm_params_82541(struct e1000_hw *hw);
  18STATIC s32  e1000_init_mac_params_82541(struct e1000_hw *hw);
  19STATIC s32  e1000_reset_hw_82541(struct e1000_hw *hw);
  20STATIC s32  e1000_init_hw_82541(struct e1000_hw *hw);
  21STATIC s32  e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed,
  22                                         u16 *duplex);
  23STATIC s32  e1000_phy_hw_reset_82541(struct e1000_hw *hw);
  24STATIC s32  e1000_setup_copper_link_82541(struct e1000_hw *hw);
  25STATIC s32  e1000_check_for_link_82541(struct e1000_hw *hw);
  26STATIC s32  e1000_get_cable_length_igp_82541(struct e1000_hw *hw);
  27STATIC s32  e1000_set_d3_lplu_state_82541(struct e1000_hw *hw,
  28                                          bool active);
  29STATIC s32  e1000_setup_led_82541(struct e1000_hw *hw);
  30STATIC s32  e1000_cleanup_led_82541(struct e1000_hw *hw);
  31STATIC void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw);
  32STATIC s32  e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
  33                                                     bool link_up);
  34STATIC s32  e1000_phy_init_script_82541(struct e1000_hw *hw);
  35STATIC void e1000_power_down_phy_copper_82541(struct e1000_hw *hw);
  36
  37STATIC const u16 e1000_igp_cable_length_table[] = {
  38        5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10,
  39        10, 10, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25, 25, 30, 30, 30, 30,
  40        40, 40, 40, 40, 40, 40, 40, 40, 40, 50, 50, 50, 50, 50, 50, 50, 60, 60,
  41        60, 60, 60, 60, 60, 60, 60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80,
  42        80, 90, 90, 90, 90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100,
  43        100, 100, 100, 100, 100, 100, 100, 100, 110, 110, 110, 110, 110, 110,
  44        110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 120, 120,
  45        120, 120, 120, 120, 120, 120, 120, 120};
  46#define IGP01E1000_AGC_LENGTH_TABLE_SIZE \
  47                (sizeof(e1000_igp_cable_length_table) / \
  48                 sizeof(e1000_igp_cable_length_table[0]))
  49
  50/**
  51 *  e1000_init_phy_params_82541 - Init PHY func ptrs.
  52 *  @hw: pointer to the HW structure
  53 **/
  54STATIC s32 e1000_init_phy_params_82541(struct e1000_hw *hw)
  55{
  56        struct e1000_phy_info *phy = &hw->phy;
  57        s32 ret_val;
  58
  59        DEBUGFUNC("e1000_init_phy_params_82541");
  60
  61        phy->addr               = 1;
  62        phy->autoneg_mask       = AUTONEG_ADVERTISE_SPEED_DEFAULT;
  63        phy->reset_delay_us     = 10000;
  64        phy->type               = e1000_phy_igp;
  65
  66        /* Function Pointers */
  67        phy->ops.check_polarity = e1000_check_polarity_igp;
  68        phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
  69        phy->ops.get_cable_length = e1000_get_cable_length_igp_82541;
  70        phy->ops.get_cfg_done   = e1000_get_cfg_done_generic;
  71        phy->ops.get_info       = e1000_get_phy_info_igp;
  72        phy->ops.read_reg       = e1000_read_phy_reg_igp;
  73        phy->ops.reset          = e1000_phy_hw_reset_82541;
  74        phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82541;
  75        phy->ops.write_reg      = e1000_write_phy_reg_igp;
  76        phy->ops.power_up       = e1000_power_up_phy_copper;
  77        phy->ops.power_down     = e1000_power_down_phy_copper_82541;
  78
  79        ret_val = e1000_get_phy_id(hw);
  80        if (ret_val)
  81                goto out;
  82
  83        /* Verify phy id */
  84        if (phy->id != IGP01E1000_I_PHY_ID) {
  85                ret_val = -E1000_ERR_PHY;
  86                goto out;
  87        }
  88
  89out:
  90        return ret_val;
  91}
  92
  93/**
  94 *  e1000_init_nvm_params_82541 - Init NVM func ptrs.
  95 *  @hw: pointer to the HW structure
  96 **/
  97STATIC s32 e1000_init_nvm_params_82541(struct e1000_hw *hw)
  98{
  99        struct e1000_nvm_info *nvm = &hw->nvm;
 100        s32 ret_val = E1000_SUCCESS;
 101        u32 eecd = E1000_READ_REG(hw, E1000_EECD);
 102        u16 size;
 103
 104        DEBUGFUNC("e1000_init_nvm_params_82541");
 105
 106        switch (nvm->override) {
 107        case e1000_nvm_override_spi_large:
 108                nvm->type = e1000_nvm_eeprom_spi;
 109                eecd |= E1000_EECD_ADDR_BITS;
 110                break;
 111        case e1000_nvm_override_spi_small:
 112                nvm->type = e1000_nvm_eeprom_spi;
 113                eecd &= ~E1000_EECD_ADDR_BITS;
 114                break;
 115        case e1000_nvm_override_microwire_large:
 116                nvm->type = e1000_nvm_eeprom_microwire;
 117                eecd |= E1000_EECD_SIZE;
 118                break;
 119        case e1000_nvm_override_microwire_small:
 120                nvm->type = e1000_nvm_eeprom_microwire;
 121                eecd &= ~E1000_EECD_SIZE;
 122                break;
 123        default:
 124                nvm->type = eecd & E1000_EECD_TYPE ? e1000_nvm_eeprom_spi
 125                            : e1000_nvm_eeprom_microwire;
 126                break;
 127        }
 128
 129        if (nvm->type == e1000_nvm_eeprom_spi) {
 130                nvm->address_bits = (eecd & E1000_EECD_ADDR_BITS) ? 16 : 8;
 131                nvm->delay_usec = 1;
 132                nvm->opcode_bits = 8;
 133                nvm->page_size = (eecd & E1000_EECD_ADDR_BITS) ? 32 : 8;
 134
 135                /* Function Pointers */
 136                nvm->ops.acquire        = e1000_acquire_nvm_generic;
 137                nvm->ops.read           = e1000_read_nvm_spi;
 138                nvm->ops.release        = e1000_release_nvm_generic;
 139                nvm->ops.update         = e1000_update_nvm_checksum_generic;
 140                nvm->ops.valid_led_default = e1000_valid_led_default_generic;
 141                nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
 142                nvm->ops.write          = e1000_write_nvm_spi;
 143
 144                /*
 145                 * nvm->word_size must be discovered after the pointers
 146                 * are set so we can verify the size from the nvm image
 147                 * itself.  Temporarily set it to a dummy value so the
 148                 * read will work.
 149                 */
 150                nvm->word_size = 64;
 151                ret_val = nvm->ops.read(hw, NVM_CFG, 1, &size);
 152                if (ret_val)
 153                        goto out;
 154                size = (size & NVM_SIZE_MASK) >> NVM_SIZE_SHIFT;
 155                /*
 156                 * if size != 0, it can be added to a constant and become
 157                 * the left-shift value to set the word_size.  Otherwise,
 158                 * word_size stays at 64.
 159                 */
 160                if (size) {
 161                        size += NVM_WORD_SIZE_BASE_SHIFT_82541;
 162                        nvm->word_size = 1 << size;
 163                }
 164        } else {
 165                nvm->address_bits = (eecd & E1000_EECD_ADDR_BITS) ? 8 : 6;
 166                nvm->delay_usec = 50;
 167                nvm->opcode_bits = 3;
 168                nvm->word_size = (eecd & E1000_EECD_ADDR_BITS) ? 256 : 64;
 169
 170                /* Function Pointers */
 171                nvm->ops.acquire        = e1000_acquire_nvm_generic;
 172                nvm->ops.read           = e1000_read_nvm_microwire;
 173                nvm->ops.release        = e1000_release_nvm_generic;
 174                nvm->ops.update         = e1000_update_nvm_checksum_generic;
 175                nvm->ops.valid_led_default = e1000_valid_led_default_generic;
 176                nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
 177                nvm->ops.write          = e1000_write_nvm_microwire;
 178        }
 179
 180out:
 181        return ret_val;
 182}
 183
 184/**
 185 *  e1000_init_mac_params_82541 - Init MAC func ptrs.
 186 *  @hw: pointer to the HW structure
 187 **/
 188STATIC s32 e1000_init_mac_params_82541(struct e1000_hw *hw)
 189{
 190        struct e1000_mac_info *mac = &hw->mac;
 191
 192        DEBUGFUNC("e1000_init_mac_params_82541");
 193
 194        /* Set media type */
 195        hw->phy.media_type = e1000_media_type_copper;
 196        /* Set mta register count */
 197        mac->mta_reg_count = 128;
 198        /* Set rar entry count */
 199        mac->rar_entry_count = E1000_RAR_ENTRIES;
 200        /* Set if part includes ASF firmware */
 201        mac->asf_firmware_present = true;
 202
 203        /* Function Pointers */
 204
 205        /* bus type/speed/width */
 206        mac->ops.get_bus_info = e1000_get_bus_info_pci_generic;
 207        /* function id */
 208        mac->ops.set_lan_id = e1000_set_lan_id_single_port;
 209        /* reset */
 210        mac->ops.reset_hw = e1000_reset_hw_82541;
 211        /* hw initialization */
 212        mac->ops.init_hw = e1000_init_hw_82541;
 213        /* link setup */
 214        mac->ops.setup_link = e1000_setup_link_generic;
 215        /* physical interface link setup */
 216        mac->ops.setup_physical_interface = e1000_setup_copper_link_82541;
 217        /* check for link */
 218        mac->ops.check_for_link = e1000_check_for_link_82541;
 219        /* link info */
 220        mac->ops.get_link_up_info = e1000_get_link_up_info_82541;
 221        /* multicast address update */
 222        mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
 223        /* writing VFTA */
 224        mac->ops.write_vfta = e1000_write_vfta_generic;
 225        /* clearing VFTA */
 226        mac->ops.clear_vfta = e1000_clear_vfta_generic;
 227        /* ID LED init */
 228        mac->ops.id_led_init = e1000_id_led_init_generic;
 229        /* setup LED */
 230        mac->ops.setup_led = e1000_setup_led_82541;
 231        /* cleanup LED */
 232        mac->ops.cleanup_led = e1000_cleanup_led_82541;
 233        /* turn on/off LED */
 234        mac->ops.led_on = e1000_led_on_generic;
 235        mac->ops.led_off = e1000_led_off_generic;
 236        /* clear hardware counters */
 237        mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82541;
 238
 239        return E1000_SUCCESS;
 240}
 241
 242/**
 243 *  e1000_init_function_pointers_82541 - Init func ptrs.
 244 *  @hw: pointer to the HW structure
 245 *
 246 *  Called to initialize all function pointers and parameters.
 247 **/
 248void e1000_init_function_pointers_82541(struct e1000_hw *hw)
 249{
 250        DEBUGFUNC("e1000_init_function_pointers_82541");
 251
 252        hw->mac.ops.init_params = e1000_init_mac_params_82541;
 253        hw->nvm.ops.init_params = e1000_init_nvm_params_82541;
 254        hw->phy.ops.init_params = e1000_init_phy_params_82541;
 255}
 256
 257/**
 258 *  e1000_reset_hw_82541 - Reset hardware
 259 *  @hw: pointer to the HW structure
 260 *
 261 *  This resets the hardware into a known state.
 262 **/
 263STATIC s32 e1000_reset_hw_82541(struct e1000_hw *hw)
 264{
 265        u32 ledctl, ctrl, manc;
 266
 267        DEBUGFUNC("e1000_reset_hw_82541");
 268
 269        DEBUGOUT("Masking off all interrupts\n");
 270        E1000_WRITE_REG(hw, E1000_IMC, 0xFFFFFFFF);
 271
 272        E1000_WRITE_REG(hw, E1000_RCTL, 0);
 273        E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
 274        E1000_WRITE_FLUSH(hw);
 275
 276        /*
 277         * Delay to allow any outstanding PCI transactions to complete
 278         * before resetting the device.
 279         */
 280        msec_delay(10);
 281
 282        ctrl = E1000_READ_REG(hw, E1000_CTRL);
 283
 284        /* Must reset the Phy before resetting the MAC */
 285        if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
 286                E1000_WRITE_REG(hw, E1000_CTRL, (ctrl | E1000_CTRL_PHY_RST));
 287                E1000_WRITE_FLUSH(hw);
 288                msec_delay(5);
 289        }
 290
 291        DEBUGOUT("Issuing a global reset to 82541/82547 MAC\n");
 292        switch (hw->mac.type) {
 293        case e1000_82541:
 294        case e1000_82541_rev_2:
 295                /*
 296                 * These controllers can't ack the 64-bit write when
 297                 * issuing the reset, so we use IO-mapping as a
 298                 * workaround to issue the reset.
 299                 */
 300                E1000_WRITE_REG_IO(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
 301                break;
 302        default:
 303                E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
 304                break;
 305        }
 306
 307        /* Wait for NVM reload */
 308        msec_delay(20);
 309
 310        /* Disable HW ARPs on ASF enabled adapters */
 311        manc = E1000_READ_REG(hw, E1000_MANC);
 312        manc &= ~E1000_MANC_ARP_EN;
 313        E1000_WRITE_REG(hw, E1000_MANC, manc);
 314
 315        if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
 316                e1000_phy_init_script_82541(hw);
 317
 318                /* Configure activity LED after Phy reset */
 319                ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
 320                ledctl &= IGP_ACTIVITY_LED_MASK;
 321                ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
 322                E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
 323        }
 324
 325        /* Once again, mask the interrupts */
 326        DEBUGOUT("Masking off all interrupts\n");
 327        E1000_WRITE_REG(hw, E1000_IMC, 0xFFFFFFFF);
 328
 329        /* Clear any pending interrupt events. */
 330        E1000_READ_REG(hw, E1000_ICR);
 331
 332        return E1000_SUCCESS;
 333}
 334
 335/**
 336 *  e1000_init_hw_82541 - Initialize hardware
 337 *  @hw: pointer to the HW structure
 338 *
 339 *  This inits the hardware readying it for operation.
 340 **/
 341STATIC s32 e1000_init_hw_82541(struct e1000_hw *hw)
 342{
 343        struct e1000_mac_info *mac = &hw->mac;
 344        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
 345        u32 i, txdctl;
 346        s32 ret_val;
 347
 348        DEBUGFUNC("e1000_init_hw_82541");
 349
 350        /* Initialize identification LED */
 351        ret_val = mac->ops.id_led_init(hw);
 352        if (ret_val) {
 353                DEBUGOUT("Error initializing identification LED\n");
 354                /* This is not fatal and we should not stop init due to this */
 355        }
 356
 357        /* Storing the Speed Power Down  value for later use */
 358        ret_val = hw->phy.ops.read_reg(hw, IGP01E1000_GMII_FIFO,
 359                                       &dev_spec->spd_default);
 360        if (ret_val)
 361                goto out;
 362
 363        /* Disabling VLAN filtering */
 364        DEBUGOUT("Initializing the IEEE VLAN\n");
 365        mac->ops.clear_vfta(hw);
 366
 367        /* Setup the receive address. */
 368        e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
 369
 370        /* Zero out the Multicast HASH table */
 371        DEBUGOUT("Zeroing the MTA\n");
 372        for (i = 0; i < mac->mta_reg_count; i++) {
 373                E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
 374                /*
 375                 * Avoid back to back register writes by adding the register
 376                 * read (flush).  This is to protect against some strange
 377                 * bridge configurations that may issue Memory Write Block
 378                 * (MWB) to our register space.
 379                 */
 380                E1000_WRITE_FLUSH(hw);
 381        }
 382
 383        /* Setup link and flow control */
 384        ret_val = mac->ops.setup_link(hw);
 385
 386        txdctl = E1000_READ_REG(hw, E1000_TXDCTL(0));
 387        txdctl = (txdctl & ~E1000_TXDCTL_WTHRESH) |
 388                  E1000_TXDCTL_FULL_TX_DESC_WB;
 389        E1000_WRITE_REG(hw, E1000_TXDCTL(0), txdctl);
 390
 391        /*
 392         * Clear all of the statistics registers (clear on read).  It is
 393         * important that we do this after we have tried to establish link
 394         * because the symbol error count will increment wildly if there
 395         * is no link.
 396         */
 397        e1000_clear_hw_cntrs_82541(hw);
 398
 399out:
 400        return ret_val;
 401}
 402
 403/**
 404 * e1000_get_link_up_info_82541 - Report speed and duplex
 405 * @hw: pointer to the HW structure
 406 * @speed: pointer to speed buffer
 407 * @duplex: pointer to duplex buffer
 408 *
 409 * Retrieve the current speed and duplex configuration.
 410 **/
 411STATIC s32 e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed,
 412                                        u16 *duplex)
 413{
 414        struct e1000_phy_info *phy = &hw->phy;
 415        s32 ret_val;
 416        u16 data;
 417
 418        DEBUGFUNC("e1000_get_link_up_info_82541");
 419
 420        ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed, duplex);
 421        if (ret_val)
 422                goto out;
 423
 424        if (!phy->speed_downgraded)
 425                goto out;
 426
 427        /*
 428         * IGP01 PHY may advertise full duplex operation after speed
 429         * downgrade even if it is operating at half duplex.
 430         * Here we set the duplex settings to match the duplex in the
 431         * link partner's capabilities.
 432         */
 433        ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_EXP, &data);
 434        if (ret_val)
 435                goto out;
 436
 437        if (!(data & NWAY_ER_LP_NWAY_CAPS)) {
 438                *duplex = HALF_DUPLEX;
 439        } else {
 440                ret_val = phy->ops.read_reg(hw, PHY_LP_ABILITY, &data);
 441                if (ret_val)
 442                        goto out;
 443
 444                if (*speed == SPEED_100) {
 445                        if (!(data & NWAY_LPAR_100TX_FD_CAPS))
 446                                *duplex = HALF_DUPLEX;
 447                } else if (*speed == SPEED_10) {
 448                        if (!(data & NWAY_LPAR_10T_FD_CAPS))
 449                                *duplex = HALF_DUPLEX;
 450                }
 451        }
 452
 453out:
 454        return ret_val;
 455}
 456
 457/**
 458 *  e1000_phy_hw_reset_82541 - PHY hardware reset
 459 *  @hw: pointer to the HW structure
 460 *
 461 *  Verify the reset block is not blocking us from resetting.  Acquire
 462 *  semaphore (if necessary) and read/set/write the device control reset
 463 *  bit in the PHY.  Wait the appropriate delay time for the device to
 464 *  reset and release the semaphore (if necessary).
 465 **/
 466STATIC s32 e1000_phy_hw_reset_82541(struct e1000_hw *hw)
 467{
 468        s32 ret_val;
 469        u32 ledctl;
 470
 471        DEBUGFUNC("e1000_phy_hw_reset_82541");
 472
 473        ret_val = e1000_phy_hw_reset_generic(hw);
 474        if (ret_val)
 475                goto out;
 476
 477        e1000_phy_init_script_82541(hw);
 478
 479        if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
 480                /* Configure activity LED after PHY reset */
 481                ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
 482                ledctl &= IGP_ACTIVITY_LED_MASK;
 483                ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
 484                E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
 485        }
 486
 487out:
 488        return ret_val;
 489}
 490
 491/**
 492 *  e1000_setup_copper_link_82541 - Configure copper link settings
 493 *  @hw: pointer to the HW structure
 494 *
 495 *  Calls the appropriate function to configure the link for auto-neg or forced
 496 *  speed and duplex.  Then we check for link, once link is established calls
 497 *  to configure collision distance and flow control are called.  If link is
 498 *  not established, we return -E1000_ERR_PHY (-2).
 499 **/
 500STATIC s32 e1000_setup_copper_link_82541(struct e1000_hw *hw)
 501{
 502        struct e1000_phy_info *phy = &hw->phy;
 503        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
 504        s32  ret_val;
 505        u32 ctrl, ledctl;
 506
 507        DEBUGFUNC("e1000_setup_copper_link_82541");
 508
 509        ctrl = E1000_READ_REG(hw, E1000_CTRL);
 510        ctrl |= E1000_CTRL_SLU;
 511        ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 512        E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 513
 514
 515        /* Earlier revs of the IGP phy require us to force MDI. */
 516        if (hw->mac.type == e1000_82541 || hw->mac.type == e1000_82547) {
 517                dev_spec->dsp_config = e1000_dsp_config_disabled;
 518                phy->mdix = 1;
 519        } else {
 520                dev_spec->dsp_config = e1000_dsp_config_enabled;
 521        }
 522
 523        ret_val = e1000_copper_link_setup_igp(hw);
 524        if (ret_val)
 525                goto out;
 526
 527        if (hw->mac.autoneg) {
 528                if (dev_spec->ffe_config == e1000_ffe_config_active)
 529                        dev_spec->ffe_config = e1000_ffe_config_enabled;
 530        }
 531
 532        /* Configure activity LED after Phy reset */
 533        ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
 534        ledctl &= IGP_ACTIVITY_LED_MASK;
 535        ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
 536        E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
 537
 538        ret_val = e1000_setup_copper_link_generic(hw);
 539
 540out:
 541        return ret_val;
 542}
 543
 544/**
 545 *  e1000_check_for_link_82541 - Check/Store link connection
 546 *  @hw: pointer to the HW structure
 547 *
 548 *  This checks the link condition of the adapter and stores the
 549 *  results in the hw->mac structure.
 550 **/
 551STATIC s32 e1000_check_for_link_82541(struct e1000_hw *hw)
 552{
 553        struct e1000_mac_info *mac = &hw->mac;
 554        s32 ret_val;
 555        bool link;
 556
 557        DEBUGFUNC("e1000_check_for_link_82541");
 558
 559        /*
 560         * We only want to go out to the PHY registers to see if Auto-Neg
 561         * has completed and/or if our link status has changed.  The
 562         * get_link_status flag is set upon receiving a Link Status
 563         * Change or Rx Sequence Error interrupt.
 564         */
 565        if (!mac->get_link_status) {
 566                ret_val = E1000_SUCCESS;
 567                goto out;
 568        }
 569
 570        /*
 571         * First we want to see if the MII Status Register reports
 572         * link.  If so, then we want to get the current speed/duplex
 573         * of the PHY.
 574         */
 575        ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 576        if (ret_val)
 577                goto out;
 578
 579        if (!link) {
 580                ret_val = e1000_config_dsp_after_link_change_82541(hw, false);
 581                goto out; /* No link detected */
 582        }
 583
 584        mac->get_link_status = false;
 585
 586        /*
 587         * Check if there was DownShift, must be checked
 588         * immediately after link-up
 589         */
 590        e1000_check_downshift_generic(hw);
 591
 592        /*
 593         * If we are forcing speed/duplex, then we simply return since
 594         * we have already determined whether we have link or not.
 595         */
 596        if (!mac->autoneg) {
 597                ret_val = -E1000_ERR_CONFIG;
 598                goto out;
 599        }
 600
 601        ret_val = e1000_config_dsp_after_link_change_82541(hw, true);
 602
 603        /*
 604         * Auto-Neg is enabled.  Auto Speed Detection takes care
 605         * of MAC speed/duplex configuration.  So we only need to
 606         * configure Collision Distance in the MAC.
 607         */
 608        mac->ops.config_collision_dist(hw);
 609
 610        /*
 611         * Configure Flow Control now that Auto-Neg has completed.
 612         * First, we need to restore the desired flow control
 613         * settings because we may have had to re-autoneg with a
 614         * different link partner.
 615         */
 616        ret_val = e1000_config_fc_after_link_up_generic(hw);
 617        if (ret_val)
 618                DEBUGOUT("Error configuring flow control\n");
 619
 620out:
 621        return ret_val;
 622}
 623
 624/**
 625 *  e1000_config_dsp_after_link_change_82541 - Config DSP after link
 626 *  @hw: pointer to the HW structure
 627 *  @link_up: boolean flag for link up status
 628 *
 629 *  Return E1000_ERR_PHY when failing to read/write the PHY, else E1000_SUCCESS
 630 *  at any other case.
 631 *
 632 *  82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
 633 *  gigabit link is achieved to improve link quality.
 634 **/
 635STATIC s32 e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
 636                                                    bool link_up)
 637{
 638        struct e1000_phy_info *phy = &hw->phy;
 639        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
 640        s32 ret_val;
 641        u32 idle_errs = 0;
 642        u16 phy_data, phy_saved_data, speed, duplex, i;
 643        u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
 644        u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {
 645                                                IGP01E1000_PHY_AGC_PARAM_A,
 646                                                IGP01E1000_PHY_AGC_PARAM_B,
 647                                                IGP01E1000_PHY_AGC_PARAM_C,
 648                                                IGP01E1000_PHY_AGC_PARAM_D};
 649
 650        DEBUGFUNC("e1000_config_dsp_after_link_change_82541");
 651
 652        if (link_up) {
 653                ret_val = hw->mac.ops.get_link_up_info(hw, &speed, &duplex);
 654                if (ret_val) {
 655                        DEBUGOUT("Error getting link speed and duplex\n");
 656                        goto out;
 657                }
 658
 659                if (speed != SPEED_1000) {
 660                        ret_val = E1000_SUCCESS;
 661                        goto out;
 662                }
 663
 664                ret_val = phy->ops.get_cable_length(hw);
 665                if (ret_val)
 666                        goto out;
 667
 668                if ((dev_spec->dsp_config == e1000_dsp_config_enabled) &&
 669                    phy->min_cable_length >= 50) {
 670
 671                        for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
 672                                ret_val = phy->ops.read_reg(hw,
 673                                                            dsp_reg_array[i],
 674                                                            &phy_data);
 675                                if (ret_val)
 676                                        goto out;
 677
 678                                phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
 679
 680                                ret_val = phy->ops.write_reg(hw,
 681                                                             dsp_reg_array[i],
 682                                                             phy_data);
 683                                if (ret_val)
 684                                        goto out;
 685                        }
 686                        dev_spec->dsp_config = e1000_dsp_config_activated;
 687                }
 688
 689                if ((dev_spec->ffe_config != e1000_ffe_config_enabled) ||
 690                    (phy->min_cable_length >= 50)) {
 691                        ret_val = E1000_SUCCESS;
 692                        goto out;
 693                }
 694
 695                /* clear previous idle error counts */
 696                ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
 697                if (ret_val)
 698                        goto out;
 699
 700                for (i = 0; i < ffe_idle_err_timeout; i++) {
 701                        usec_delay(1000);
 702                        ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS,
 703                                                    &phy_data);
 704                        if (ret_val)
 705                                goto out;
 706
 707                        idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
 708                        if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
 709                                dev_spec->ffe_config = e1000_ffe_config_active;
 710
 711                                ret_val = phy->ops.write_reg(hw,
 712                                                  IGP01E1000_PHY_DSP_FFE,
 713                                                  IGP01E1000_PHY_DSP_FFE_CM_CP);
 714                                if (ret_val)
 715                                        goto out;
 716                                break;
 717                        }
 718
 719                        if (idle_errs)
 720                                ffe_idle_err_timeout =
 721                                                 FFE_IDLE_ERR_COUNT_TIMEOUT_100;
 722                }
 723        } else {
 724                if (dev_spec->dsp_config == e1000_dsp_config_activated) {
 725                        /*
 726                         * Save off the current value of register 0x2F5B
 727                         * to be restored at the end of the routines.
 728                         */
 729                        ret_val = phy->ops.read_reg(hw, 0x2F5B,
 730                                                    &phy_saved_data);
 731                        if (ret_val)
 732                                goto out;
 733
 734                        /* Disable the PHY transmitter */
 735                        ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
 736                        if (ret_val)
 737                                goto out;
 738
 739                        msec_delay_irq(20);
 740
 741                        ret_val = phy->ops.write_reg(hw, 0x0000,
 742                                                     IGP01E1000_IEEE_FORCE_GIG);
 743                        if (ret_val)
 744                                goto out;
 745                        for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
 746                                ret_val = phy->ops.read_reg(hw,
 747                                                            dsp_reg_array[i],
 748                                                            &phy_data);
 749                                if (ret_val)
 750                                        goto out;
 751
 752                                phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
 753                                phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
 754
 755                                ret_val = phy->ops.write_reg(hw,
 756                                                             dsp_reg_array[i],
 757                                                             phy_data);
 758                                if (ret_val)
 759                                        goto out;
 760                        }
 761
 762                        ret_val = phy->ops.write_reg(hw, 0x0000,
 763                                               IGP01E1000_IEEE_RESTART_AUTONEG);
 764                        if (ret_val)
 765                                goto out;
 766
 767                        msec_delay_irq(20);
 768
 769                        /* Now enable the transmitter */
 770                        ret_val = phy->ops.write_reg(hw, 0x2F5B,
 771                                                     phy_saved_data);
 772                        if (ret_val)
 773                                goto out;
 774
 775                        dev_spec->dsp_config = e1000_dsp_config_enabled;
 776                }
 777
 778                if (dev_spec->ffe_config != e1000_ffe_config_active) {
 779                        ret_val = E1000_SUCCESS;
 780                        goto out;
 781                }
 782
 783                /*
 784                 * Save off the current value of register 0x2F5B
 785                 * to be restored at the end of the routines.
 786                 */
 787                ret_val = phy->ops.read_reg(hw, 0x2F5B, &phy_saved_data);
 788                if (ret_val)
 789                        goto out;
 790
 791                /* Disable the PHY transmitter */
 792                ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
 793                if (ret_val)
 794                        goto out;
 795
 796                msec_delay_irq(20);
 797
 798                ret_val = phy->ops.write_reg(hw, 0x0000,
 799                                             IGP01E1000_IEEE_FORCE_GIG);
 800                if (ret_val)
 801                        goto out;
 802
 803                ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_DSP_FFE,
 804                                             IGP01E1000_PHY_DSP_FFE_DEFAULT);
 805                if (ret_val)
 806                        goto out;
 807
 808                ret_val = phy->ops.write_reg(hw, 0x0000,
 809                                             IGP01E1000_IEEE_RESTART_AUTONEG);
 810                if (ret_val)
 811                        goto out;
 812
 813                msec_delay_irq(20);
 814
 815                /* Now enable the transmitter */
 816                ret_val = phy->ops.write_reg(hw, 0x2F5B, phy_saved_data);
 817
 818                if (ret_val)
 819                        goto out;
 820
 821                dev_spec->ffe_config = e1000_ffe_config_enabled;
 822        }
 823
 824out:
 825        return ret_val;
 826}
 827
 828/**
 829 *  e1000_get_cable_length_igp_82541 - Determine cable length for igp PHY
 830 *  @hw: pointer to the HW structure
 831 *
 832 *  The automatic gain control (agc) normalizes the amplitude of the
 833 *  received signal, adjusting for the attenuation produced by the
 834 *  cable.  By reading the AGC registers, which represent the
 835 *  combination of coarse and fine gain value, the value can be put
 836 *  into a lookup table to obtain the approximate cable length
 837 *  for each channel.
 838 **/
 839STATIC s32 e1000_get_cable_length_igp_82541(struct e1000_hw *hw)
 840{
 841        struct e1000_phy_info *phy = &hw->phy;
 842        s32 ret_val = E1000_SUCCESS;
 843        u16 i, data;
 844        u16 cur_agc_value, agc_value = 0;
 845        u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
 846        u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {IGP01E1000_PHY_AGC_A,
 847                                                         IGP01E1000_PHY_AGC_B,
 848                                                         IGP01E1000_PHY_AGC_C,
 849                                                         IGP01E1000_PHY_AGC_D};
 850
 851        DEBUGFUNC("e1000_get_cable_length_igp_82541");
 852
 853        /* Read the AGC registers for all channels */
 854        for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
 855                ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &data);
 856                if (ret_val)
 857                        goto out;
 858
 859                cur_agc_value = data >> IGP01E1000_AGC_LENGTH_SHIFT;
 860
 861                /* Bounds checking */
 862                if ((cur_agc_value >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
 863                    (cur_agc_value == 0)) {
 864                        ret_val = -E1000_ERR_PHY;
 865                        goto out;
 866                }
 867
 868                agc_value += cur_agc_value;
 869
 870                if (min_agc_value > cur_agc_value)
 871                        min_agc_value = cur_agc_value;
 872        }
 873
 874        /* Remove the minimal AGC result for length < 50m */
 875        if (agc_value < IGP01E1000_PHY_CHANNEL_NUM * 50) {
 876                agc_value -= min_agc_value;
 877                /* Average the three remaining channels for the length. */
 878                agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
 879        } else {
 880                /* Average the channels for the length. */
 881                agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
 882        }
 883
 884        phy->min_cable_length = (e1000_igp_cable_length_table[agc_value] >
 885                                 IGP01E1000_AGC_RANGE)
 886                                ? (e1000_igp_cable_length_table[agc_value] -
 887                                   IGP01E1000_AGC_RANGE)
 888                                : 0;
 889        phy->max_cable_length = e1000_igp_cable_length_table[agc_value] +
 890                                IGP01E1000_AGC_RANGE;
 891
 892        phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
 893
 894out:
 895        return ret_val;
 896}
 897
 898/**
 899 *  e1000_set_d3_lplu_state_82541 - Sets low power link up state for D3
 900 *  @hw: pointer to the HW structure
 901 *  @active: boolean used to enable/disable lplu
 902 *
 903 *  Success returns 0, Failure returns 1
 904 *
 905 *  The low power link up (lplu) state is set to the power management level D3
 906 *  and SmartSpeed is disabled when active is true, else clear lplu for D3
 907 *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
 908 *  is used during Dx states where the power conservation is most important.
 909 *  During driver activity, SmartSpeed should be enabled so performance is
 910 *  maintained.
 911 **/
 912STATIC s32 e1000_set_d3_lplu_state_82541(struct e1000_hw *hw, bool active)
 913{
 914        struct e1000_phy_info *phy = &hw->phy;
 915        s32 ret_val;
 916        u16 data;
 917
 918        DEBUGFUNC("e1000_set_d3_lplu_state_82541");
 919
 920        switch (hw->mac.type) {
 921        case e1000_82541_rev_2:
 922        case e1000_82547_rev_2:
 923                break;
 924        default:
 925                ret_val = e1000_set_d3_lplu_state_generic(hw, active);
 926                goto out;
 927                break;
 928        }
 929
 930        ret_val = phy->ops.read_reg(hw, IGP01E1000_GMII_FIFO, &data);
 931        if (ret_val)
 932                goto out;
 933
 934        if (!active) {
 935                data &= ~IGP01E1000_GMII_FLEX_SPD;
 936                ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
 937                if (ret_val)
 938                        goto out;
 939
 940                /*
 941                 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
 942                 * during Dx states where the power conservation is most
 943                 * important.  During driver activity we should enable
 944                 * SmartSpeed, so performance is maintained.
 945                 */
 946                if (phy->smart_speed == e1000_smart_speed_on) {
 947                        ret_val = phy->ops.read_reg(hw,
 948                                                    IGP01E1000_PHY_PORT_CONFIG,
 949                                                    &data);
 950                        if (ret_val)
 951                                goto out;
 952
 953                        data |= IGP01E1000_PSCFR_SMART_SPEED;
 954                        ret_val = phy->ops.write_reg(hw,
 955                                                     IGP01E1000_PHY_PORT_CONFIG,
 956                                                     data);
 957                        if (ret_val)
 958                                goto out;
 959                } else if (phy->smart_speed == e1000_smart_speed_off) {
 960                        ret_val = phy->ops.read_reg(hw,
 961                                                    IGP01E1000_PHY_PORT_CONFIG,
 962                                                    &data);
 963                        if (ret_val)
 964                                goto out;
 965
 966                        data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 967                        ret_val = phy->ops.write_reg(hw,
 968                                                     IGP01E1000_PHY_PORT_CONFIG,
 969                                                     data);
 970                        if (ret_val)
 971                                goto out;
 972                }
 973        } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
 974                   (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
 975                   (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
 976                data |= IGP01E1000_GMII_FLEX_SPD;
 977                ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
 978                if (ret_val)
 979                        goto out;
 980
 981                /* When LPLU is enabled, we should disable SmartSpeed */
 982                ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
 983                                            &data);
 984                if (ret_val)
 985                        goto out;
 986
 987                data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 988                ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
 989                                             data);
 990        }
 991
 992out:
 993        return ret_val;
 994}
 995
 996/**
 997 *  e1000_setup_led_82541 - Configures SW controllable LED
 998 *  @hw: pointer to the HW structure
 999 *
1000 *  This prepares the SW controllable LED for use and saves the current state
1001 *  of the LED so it can be later restored.
1002 **/
1003STATIC s32 e1000_setup_led_82541(struct e1000_hw *hw)
1004{
1005        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1006        s32 ret_val;
1007
1008        DEBUGFUNC("e1000_setup_led_82541");
1009
1010        ret_val = hw->phy.ops.read_reg(hw, IGP01E1000_GMII_FIFO,
1011                                       &dev_spec->spd_default);
1012        if (ret_val)
1013                goto out;
1014
1015        ret_val = hw->phy.ops.write_reg(hw, IGP01E1000_GMII_FIFO,
1016                                        (u16)(dev_spec->spd_default &
1017                                        ~IGP01E1000_GMII_SPD));
1018        if (ret_val)
1019                goto out;
1020
1021        E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1);
1022
1023out:
1024        return ret_val;
1025}
1026
1027/**
1028 *  e1000_cleanup_led_82541 - Set LED config to default operation
1029 *  @hw: pointer to the HW structure
1030 *
1031 *  Remove the current LED configuration and set the LED configuration
1032 *  to the default value, saved from the EEPROM.
1033 **/
1034STATIC s32 e1000_cleanup_led_82541(struct e1000_hw *hw)
1035{
1036        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1037        s32 ret_val;
1038
1039        DEBUGFUNC("e1000_cleanup_led_82541");
1040
1041        ret_val = hw->phy.ops.write_reg(hw, IGP01E1000_GMII_FIFO,
1042                                        dev_spec->spd_default);
1043        if (ret_val)
1044                goto out;
1045
1046        E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default);
1047
1048out:
1049        return ret_val;
1050}
1051
1052/**
1053 *  e1000_phy_init_script_82541 - Initialize GbE PHY
1054 *  @hw: pointer to the HW structure
1055 *
1056 *  Initializes the IGP PHY.
1057 **/
1058STATIC s32 e1000_phy_init_script_82541(struct e1000_hw *hw)
1059{
1060        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1061        u32 ret_val;
1062        u16 phy_saved_data;
1063
1064        DEBUGFUNC("e1000_phy_init_script_82541");
1065
1066        if (!dev_spec->phy_init_script) {
1067                ret_val = E1000_SUCCESS;
1068                goto out;
1069        }
1070
1071        /* Delay after phy reset to enable NVM configuration to load */
1072        msec_delay(20);
1073
1074        /*
1075         * Save off the current value of register 0x2F5B to be restored at
1076         * the end of this routine.
1077         */
1078        ret_val = hw->phy.ops.read_reg(hw, 0x2F5B, &phy_saved_data);
1079
1080        /* Disabled the PHY transmitter */
1081        hw->phy.ops.write_reg(hw, 0x2F5B, 0x0003);
1082
1083        msec_delay(20);
1084
1085        hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
1086
1087        msec_delay(5);
1088
1089        switch (hw->mac.type) {
1090        case e1000_82541:
1091        case e1000_82547:
1092                hw->phy.ops.write_reg(hw, 0x1F95, 0x0001);
1093
1094                hw->phy.ops.write_reg(hw, 0x1F71, 0xBD21);
1095
1096                hw->phy.ops.write_reg(hw, 0x1F79, 0x0018);
1097
1098                hw->phy.ops.write_reg(hw, 0x1F30, 0x1600);
1099
1100                hw->phy.ops.write_reg(hw, 0x1F31, 0x0014);
1101
1102                hw->phy.ops.write_reg(hw, 0x1F32, 0x161C);
1103
1104                hw->phy.ops.write_reg(hw, 0x1F94, 0x0003);
1105
1106                hw->phy.ops.write_reg(hw, 0x1F96, 0x003F);
1107
1108                hw->phy.ops.write_reg(hw, 0x2010, 0x0008);
1109                break;
1110        case e1000_82541_rev_2:
1111        case e1000_82547_rev_2:
1112                hw->phy.ops.write_reg(hw, 0x1F73, 0x0099);
1113                break;
1114        default:
1115                break;
1116        }
1117
1118        hw->phy.ops.write_reg(hw, 0x0000, 0x3300);
1119
1120        msec_delay(20);
1121
1122        /* Now enable the transmitter */
1123        hw->phy.ops.write_reg(hw, 0x2F5B, phy_saved_data);
1124
1125        if (hw->mac.type == e1000_82547) {
1126                u16 fused, fine, coarse;
1127
1128                /* Move to analog registers page */
1129                hw->phy.ops.read_reg(hw, IGP01E1000_ANALOG_SPARE_FUSE_STATUS,
1130                                     &fused);
1131
1132                if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
1133                        hw->phy.ops.read_reg(hw, IGP01E1000_ANALOG_FUSE_STATUS,
1134                                             &fused);
1135
1136                        fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
1137                        coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
1138
1139                        if (coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
1140                                coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
1141                                fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
1142                        } else if (coarse ==
1143                                   IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
1144                                fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
1145
1146                        fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
1147                                (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
1148                                (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
1149
1150                        hw->phy.ops.write_reg(hw,
1151                                              IGP01E1000_ANALOG_FUSE_CONTROL,
1152                                              fused);
1153                        hw->phy.ops.write_reg(hw,
1154                                      IGP01E1000_ANALOG_FUSE_BYPASS,
1155                                      IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
1156                }
1157        }
1158
1159out:
1160        return ret_val;
1161}
1162
1163/**
1164 *  e1000_init_script_state_82541 - Enable/Disable PHY init script
1165 *  @hw: pointer to the HW structure
1166 *  @state: boolean value used to enable/disable PHY init script
1167 *
1168 *  Allows the driver to enable/disable the PHY init script, if the PHY is an
1169 *  IGP PHY.
1170 **/
1171void e1000_init_script_state_82541(struct e1000_hw *hw, bool state)
1172{
1173        struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1174
1175        DEBUGFUNC("e1000_init_script_state_82541");
1176
1177        if (hw->phy.type != e1000_phy_igp) {
1178                DEBUGOUT("Initialization script not necessary.\n");
1179                goto out;
1180        }
1181
1182        dev_spec->phy_init_script = state;
1183
1184out:
1185        return;
1186}
1187
1188/**
1189 * e1000_power_down_phy_copper_82541 - Remove link in case of PHY power down
1190 * @hw: pointer to the HW structure
1191 *
1192 * In the case of a PHY power down to save power, or to turn off link during a
1193 * driver unload, or wake on lan is not enabled, remove the link.
1194 **/
1195STATIC void e1000_power_down_phy_copper_82541(struct e1000_hw *hw)
1196{
1197        /* If the management interface is not enabled, then power down */
1198        if (!(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_SMBUS_EN))
1199                e1000_power_down_phy_copper(hw);
1200
1201        return;
1202}
1203
1204/**
1205 *  e1000_clear_hw_cntrs_82541 - Clear device specific hardware counters
1206 *  @hw: pointer to the HW structure
1207 *
1208 *  Clears the hardware counters by reading the counter registers.
1209 **/
1210STATIC void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw)
1211{
1212        DEBUGFUNC("e1000_clear_hw_cntrs_82541");
1213
1214        e1000_clear_hw_cntrs_base_generic(hw);
1215
1216        E1000_READ_REG(hw, E1000_PRC64);
1217        E1000_READ_REG(hw, E1000_PRC127);
1218        E1000_READ_REG(hw, E1000_PRC255);
1219        E1000_READ_REG(hw, E1000_PRC511);
1220        E1000_READ_REG(hw, E1000_PRC1023);
1221        E1000_READ_REG(hw, E1000_PRC1522);
1222        E1000_READ_REG(hw, E1000_PTC64);
1223        E1000_READ_REG(hw, E1000_PTC127);
1224        E1000_READ_REG(hw, E1000_PTC255);
1225        E1000_READ_REG(hw, E1000_PTC511);
1226        E1000_READ_REG(hw, E1000_PTC1023);
1227        E1000_READ_REG(hw, E1000_PTC1522);
1228
1229        E1000_READ_REG(hw, E1000_ALGNERRC);
1230        E1000_READ_REG(hw, E1000_RXERRC);
1231        E1000_READ_REG(hw, E1000_TNCRS);
1232        E1000_READ_REG(hw, E1000_CEXTERR);
1233        E1000_READ_REG(hw, E1000_TSCTC);
1234        E1000_READ_REG(hw, E1000_TSCTFC);
1235
1236        E1000_READ_REG(hw, E1000_MGTPRC);
1237        E1000_READ_REG(hw, E1000_MGTPDC);
1238        E1000_READ_REG(hw, E1000_MGTPTC);
1239}
1240