linux/drivers/net/ethernet/intel/ixgb/ixgb_hw.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright(c) 1999 - 2008 Intel Corporation. */
   3
   4/* ixgb_hw.c
   5 * Shared functions for accessing and configuring the adapter
   6 */
   7
   8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9
  10#include <linux/pci_ids.h>
  11#include "ixgb_hw.h"
  12#include "ixgb_ids.h"
  13
  14#include <linux/etherdevice.h>
  15
  16/*  Local function prototypes */
  17
  18static u32 ixgb_hash_mc_addr(struct ixgb_hw *hw, u8 * mc_addr);
  19
  20static void ixgb_mta_set(struct ixgb_hw *hw, u32 hash_value);
  21
  22static void ixgb_get_bus_info(struct ixgb_hw *hw);
  23
  24static bool ixgb_link_reset(struct ixgb_hw *hw);
  25
  26static void ixgb_optics_reset(struct ixgb_hw *hw);
  27
  28static void ixgb_optics_reset_bcm(struct ixgb_hw *hw);
  29
  30static ixgb_phy_type ixgb_identify_phy(struct ixgb_hw *hw);
  31
  32static void ixgb_clear_hw_cntrs(struct ixgb_hw *hw);
  33
  34static void ixgb_clear_vfta(struct ixgb_hw *hw);
  35
  36static void ixgb_init_rx_addrs(struct ixgb_hw *hw);
  37
  38static u16 ixgb_read_phy_reg(struct ixgb_hw *hw,
  39                                  u32 reg_address,
  40                                  u32 phy_address,
  41                                  u32 device_type);
  42
  43static bool ixgb_setup_fc(struct ixgb_hw *hw);
  44
  45static bool mac_addr_valid(u8 *mac_addr);
  46
  47static u32 ixgb_mac_reset(struct ixgb_hw *hw)
  48{
  49        u32 ctrl_reg;
  50
  51        ctrl_reg =  IXGB_CTRL0_RST |
  52                                IXGB_CTRL0_SDP3_DIR |   /* All pins are Output=1 */
  53                                IXGB_CTRL0_SDP2_DIR |
  54                                IXGB_CTRL0_SDP1_DIR |
  55                                IXGB_CTRL0_SDP0_DIR |
  56                                IXGB_CTRL0_SDP3  |   /* Initial value 1101   */
  57                                IXGB_CTRL0_SDP2  |
  58                                IXGB_CTRL0_SDP0;
  59
  60#ifdef HP_ZX1
  61        /* Workaround for 82597EX reset errata */
  62        IXGB_WRITE_REG_IO(hw, CTRL0, ctrl_reg);
  63#else
  64        IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
  65#endif
  66
  67        /* Delay a few ms just to allow the reset to complete */
  68        msleep(IXGB_DELAY_AFTER_RESET);
  69        ctrl_reg = IXGB_READ_REG(hw, CTRL0);
  70#ifdef DBG
  71        /* Make sure the self-clearing global reset bit did self clear */
  72        ASSERT(!(ctrl_reg & IXGB_CTRL0_RST));
  73#endif
  74
  75        if (hw->subsystem_vendor_id == PCI_VENDOR_ID_SUN) {
  76                ctrl_reg =  /* Enable interrupt from XFP and SerDes */
  77                           IXGB_CTRL1_GPI0_EN |
  78                           IXGB_CTRL1_SDP6_DIR |
  79                           IXGB_CTRL1_SDP7_DIR |
  80                           IXGB_CTRL1_SDP6 |
  81                           IXGB_CTRL1_SDP7;
  82                IXGB_WRITE_REG(hw, CTRL1, ctrl_reg);
  83                ixgb_optics_reset_bcm(hw);
  84        }
  85
  86        if (hw->phy_type == ixgb_phy_type_txn17401)
  87                ixgb_optics_reset(hw);
  88
  89        return ctrl_reg;
  90}
  91
  92/******************************************************************************
  93 * Reset the transmit and receive units; mask and clear all interrupts.
  94 *
  95 * hw - Struct containing variables accessed by shared code
  96 *****************************************************************************/
  97bool
  98ixgb_adapter_stop(struct ixgb_hw *hw)
  99{
 100        u32 ctrl_reg;
 101        u32 icr_reg;
 102
 103        ENTER();
 104
 105        /* If we are stopped or resetting exit gracefully and wait to be
 106         * started again before accessing the hardware.
 107         */
 108        if (hw->adapter_stopped) {
 109                pr_debug("Exiting because the adapter is already stopped!!!\n");
 110                return false;
 111        }
 112
 113        /* Set the Adapter Stopped flag so other driver functions stop
 114         * touching the Hardware.
 115         */
 116        hw->adapter_stopped = true;
 117
 118        /* Clear interrupt mask to stop board from generating interrupts */
 119        pr_debug("Masking off all interrupts\n");
 120        IXGB_WRITE_REG(hw, IMC, 0xFFFFFFFF);
 121
 122        /* Disable the Transmit and Receive units.  Then delay to allow
 123         * any pending transactions to complete before we hit the MAC with
 124         * the global reset.
 125         */
 126        IXGB_WRITE_REG(hw, RCTL, IXGB_READ_REG(hw, RCTL) & ~IXGB_RCTL_RXEN);
 127        IXGB_WRITE_REG(hw, TCTL, IXGB_READ_REG(hw, TCTL) & ~IXGB_TCTL_TXEN);
 128        IXGB_WRITE_FLUSH(hw);
 129        msleep(IXGB_DELAY_BEFORE_RESET);
 130
 131        /* Issue a global reset to the MAC.  This will reset the chip's
 132         * transmit, receive, DMA, and link units.  It will not effect
 133         * the current PCI configuration.  The global reset bit is self-
 134         * clearing, and should clear within a microsecond.
 135         */
 136        pr_debug("Issuing a global reset to MAC\n");
 137
 138        ctrl_reg = ixgb_mac_reset(hw);
 139
 140        /* Clear interrupt mask to stop board from generating interrupts */
 141        pr_debug("Masking off all interrupts\n");
 142        IXGB_WRITE_REG(hw, IMC, 0xffffffff);
 143
 144        /* Clear any pending interrupt events. */
 145        icr_reg = IXGB_READ_REG(hw, ICR);
 146
 147        return ctrl_reg & IXGB_CTRL0_RST;
 148}
 149
 150
 151/******************************************************************************
 152 * Identifies the vendor of the optics module on the adapter.  The SR adapters
 153 * support two different types of XPAK optics, so it is necessary to determine
 154 * which optics are present before applying any optics-specific workarounds.
 155 *
 156 * hw - Struct containing variables accessed by shared code.
 157 *
 158 * Returns: the vendor of the XPAK optics module.
 159 *****************************************************************************/
 160static ixgb_xpak_vendor
 161ixgb_identify_xpak_vendor(struct ixgb_hw *hw)
 162{
 163        u32 i;
 164        u16 vendor_name[5];
 165        ixgb_xpak_vendor xpak_vendor;
 166
 167        ENTER();
 168
 169        /* Read the first few bytes of the vendor string from the XPAK NVR
 170         * registers.  These are standard XENPAK/XPAK registers, so all XPAK
 171         * devices should implement them. */
 172        for (i = 0; i < 5; i++) {
 173                vendor_name[i] = ixgb_read_phy_reg(hw,
 174                                                   MDIO_PMA_PMD_XPAK_VENDOR_NAME
 175                                                   + i, IXGB_PHY_ADDRESS,
 176                                                   MDIO_MMD_PMAPMD);
 177        }
 178
 179        /* Determine the actual vendor */
 180        if (vendor_name[0] == 'I' &&
 181            vendor_name[1] == 'N' &&
 182            vendor_name[2] == 'T' &&
 183            vendor_name[3] == 'E' && vendor_name[4] == 'L') {
 184                xpak_vendor = ixgb_xpak_vendor_intel;
 185        } else {
 186                xpak_vendor = ixgb_xpak_vendor_infineon;
 187        }
 188
 189        return xpak_vendor;
 190}
 191
 192/******************************************************************************
 193 * Determine the physical layer module on the adapter.
 194 *
 195 * hw - Struct containing variables accessed by shared code.  The device_id
 196 *      field must be (correctly) populated before calling this routine.
 197 *
 198 * Returns: the phy type of the adapter.
 199 *****************************************************************************/
 200static ixgb_phy_type
 201ixgb_identify_phy(struct ixgb_hw *hw)
 202{
 203        ixgb_phy_type phy_type;
 204        ixgb_xpak_vendor xpak_vendor;
 205
 206        ENTER();
 207
 208        /* Infer the transceiver/phy type from the device id */
 209        switch (hw->device_id) {
 210        case IXGB_DEVICE_ID_82597EX:
 211                pr_debug("Identified TXN17401 optics\n");
 212                phy_type = ixgb_phy_type_txn17401;
 213                break;
 214
 215        case IXGB_DEVICE_ID_82597EX_SR:
 216                /* The SR adapters carry two different types of XPAK optics
 217                 * modules; read the vendor identifier to determine the exact
 218                 * type of optics. */
 219                xpak_vendor = ixgb_identify_xpak_vendor(hw);
 220                if (xpak_vendor == ixgb_xpak_vendor_intel) {
 221                        pr_debug("Identified TXN17201 optics\n");
 222                        phy_type = ixgb_phy_type_txn17201;
 223                } else {
 224                        pr_debug("Identified G6005 optics\n");
 225                        phy_type = ixgb_phy_type_g6005;
 226                }
 227                break;
 228        case IXGB_DEVICE_ID_82597EX_LR:
 229                pr_debug("Identified G6104 optics\n");
 230                phy_type = ixgb_phy_type_g6104;
 231                break;
 232        case IXGB_DEVICE_ID_82597EX_CX4:
 233                pr_debug("Identified CX4\n");
 234                xpak_vendor = ixgb_identify_xpak_vendor(hw);
 235                if (xpak_vendor == ixgb_xpak_vendor_intel) {
 236                        pr_debug("Identified TXN17201 optics\n");
 237                        phy_type = ixgb_phy_type_txn17201;
 238                } else {
 239                        pr_debug("Identified G6005 optics\n");
 240                        phy_type = ixgb_phy_type_g6005;
 241                }
 242                break;
 243        default:
 244                pr_debug("Unknown physical layer module\n");
 245                phy_type = ixgb_phy_type_unknown;
 246                break;
 247        }
 248
 249        /* update phy type for sun specific board */
 250        if (hw->subsystem_vendor_id == PCI_VENDOR_ID_SUN)
 251                phy_type = ixgb_phy_type_bcm;
 252
 253        return phy_type;
 254}
 255
 256/******************************************************************************
 257 * Performs basic configuration of the adapter.
 258 *
 259 * hw - Struct containing variables accessed by shared code
 260 *
 261 * Resets the controller.
 262 * Reads and validates the EEPROM.
 263 * Initializes the receive address registers.
 264 * Initializes the multicast table.
 265 * Clears all on-chip counters.
 266 * Calls routine to setup flow control settings.
 267 * Leaves the transmit and receive units disabled and uninitialized.
 268 *
 269 * Returns:
 270 *      true if successful,
 271 *      false if unrecoverable problems were encountered.
 272 *****************************************************************************/
 273bool
 274ixgb_init_hw(struct ixgb_hw *hw)
 275{
 276        u32 i;
 277        u32 ctrl_reg;
 278        bool status;
 279
 280        ENTER();
 281
 282        /* Issue a global reset to the MAC.  This will reset the chip's
 283         * transmit, receive, DMA, and link units.  It will not effect
 284         * the current PCI configuration.  The global reset bit is self-
 285         * clearing, and should clear within a microsecond.
 286         */
 287        pr_debug("Issuing a global reset to MAC\n");
 288
 289        ctrl_reg = ixgb_mac_reset(hw);
 290
 291        pr_debug("Issuing an EE reset to MAC\n");
 292#ifdef HP_ZX1
 293        /* Workaround for 82597EX reset errata */
 294        IXGB_WRITE_REG_IO(hw, CTRL1, IXGB_CTRL1_EE_RST);
 295#else
 296        IXGB_WRITE_REG(hw, CTRL1, IXGB_CTRL1_EE_RST);
 297#endif
 298
 299        /* Delay a few ms just to allow the reset to complete */
 300        msleep(IXGB_DELAY_AFTER_EE_RESET);
 301
 302        if (!ixgb_get_eeprom_data(hw))
 303                return false;
 304
 305        /* Use the device id to determine the type of phy/transceiver. */
 306        hw->device_id = ixgb_get_ee_device_id(hw);
 307        hw->phy_type = ixgb_identify_phy(hw);
 308
 309        /* Setup the receive addresses.
 310         * Receive Address Registers (RARs 0 - 15).
 311         */
 312        ixgb_init_rx_addrs(hw);
 313
 314        /*
 315         * Check that a valid MAC address has been set.
 316         * If it is not valid, we fail hardware init.
 317         */
 318        if (!mac_addr_valid(hw->curr_mac_addr)) {
 319                pr_debug("MAC address invalid after ixgb_init_rx_addrs\n");
 320                return(false);
 321        }
 322
 323        /* tell the routines in this file they can access hardware again */
 324        hw->adapter_stopped = false;
 325
 326        /* Fill in the bus_info structure */
 327        ixgb_get_bus_info(hw);
 328
 329        /* Zero out the Multicast HASH table */
 330        pr_debug("Zeroing the MTA\n");
 331        for (i = 0; i < IXGB_MC_TBL_SIZE; i++)
 332                IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
 333
 334        /* Zero out the VLAN Filter Table Array */
 335        ixgb_clear_vfta(hw);
 336
 337        /* Zero all of the hardware counters */
 338        ixgb_clear_hw_cntrs(hw);
 339
 340        /* Call a subroutine to setup flow control. */
 341        status = ixgb_setup_fc(hw);
 342
 343        /* 82597EX errata: Call check-for-link in case lane deskew is locked */
 344        ixgb_check_for_link(hw);
 345
 346        return status;
 347}
 348
 349/******************************************************************************
 350 * Initializes receive address filters.
 351 *
 352 * hw - Struct containing variables accessed by shared code
 353 *
 354 * Places the MAC address in receive address register 0 and clears the rest
 355 * of the receive address registers. Clears the multicast table. Assumes
 356 * the receiver is in reset when the routine is called.
 357 *****************************************************************************/
 358static void
 359ixgb_init_rx_addrs(struct ixgb_hw *hw)
 360{
 361        u32 i;
 362
 363        ENTER();
 364
 365        /*
 366         * If the current mac address is valid, assume it is a software override
 367         * to the permanent address.
 368         * Otherwise, use the permanent address from the eeprom.
 369         */
 370        if (!mac_addr_valid(hw->curr_mac_addr)) {
 371
 372                /* Get the MAC address from the eeprom for later reference */
 373                ixgb_get_ee_mac_addr(hw, hw->curr_mac_addr);
 374
 375                pr_debug("Keeping Permanent MAC Addr = %pM\n",
 376                         hw->curr_mac_addr);
 377        } else {
 378
 379                /* Setup the receive address. */
 380                pr_debug("Overriding MAC Address in RAR[0]\n");
 381                pr_debug("New MAC Addr = %pM\n", hw->curr_mac_addr);
 382
 383                ixgb_rar_set(hw, hw->curr_mac_addr, 0);
 384        }
 385
 386        /* Zero out the other 15 receive addresses. */
 387        pr_debug("Clearing RAR[1-15]\n");
 388        for (i = 1; i < IXGB_RAR_ENTRIES; i++) {
 389                /* Write high reg first to disable the AV bit first */
 390                IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
 391                IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
 392        }
 393}
 394
 395/******************************************************************************
 396 * Updates the MAC's list of multicast addresses.
 397 *
 398 * hw - Struct containing variables accessed by shared code
 399 * mc_addr_list - the list of new multicast addresses
 400 * mc_addr_count - number of addresses
 401 * pad - number of bytes between addresses in the list
 402 *
 403 * The given list replaces any existing list. Clears the last 15 receive
 404 * address registers and the multicast table. Uses receive address registers
 405 * for the first 15 multicast addresses, and hashes the rest into the
 406 * multicast table.
 407 *****************************************************************************/
 408void
 409ixgb_mc_addr_list_update(struct ixgb_hw *hw,
 410                          u8 *mc_addr_list,
 411                          u32 mc_addr_count,
 412                          u32 pad)
 413{
 414        u32 hash_value;
 415        u32 i;
 416        u32 rar_used_count = 1;         /* RAR[0] is used for our MAC address */
 417        u8 *mca;
 418
 419        ENTER();
 420
 421        /* Set the new number of MC addresses that we are being requested to use. */
 422        hw->num_mc_addrs = mc_addr_count;
 423
 424        /* Clear RAR[1-15] */
 425        pr_debug("Clearing RAR[1-15]\n");
 426        for (i = rar_used_count; i < IXGB_RAR_ENTRIES; i++) {
 427                IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
 428                IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
 429        }
 430
 431        /* Clear the MTA */
 432        pr_debug("Clearing MTA\n");
 433        for (i = 0; i < IXGB_MC_TBL_SIZE; i++)
 434                IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
 435
 436        /* Add the new addresses */
 437        mca = mc_addr_list;
 438        for (i = 0; i < mc_addr_count; i++) {
 439                pr_debug("Adding the multicast addresses:\n");
 440                pr_debug("MC Addr #%d = %pM\n", i, mca);
 441
 442                /* Place this multicast address in the RAR if there is room, *
 443                 * else put it in the MTA
 444                 */
 445                if (rar_used_count < IXGB_RAR_ENTRIES) {
 446                        ixgb_rar_set(hw, mca, rar_used_count);
 447                        pr_debug("Added a multicast address to RAR[%d]\n", i);
 448                        rar_used_count++;
 449                } else {
 450                        hash_value = ixgb_hash_mc_addr(hw, mca);
 451
 452                        pr_debug("Hash value = 0x%03X\n", hash_value);
 453
 454                        ixgb_mta_set(hw, hash_value);
 455                }
 456
 457                mca += ETH_ALEN + pad;
 458        }
 459
 460        pr_debug("MC Update Complete\n");
 461}
 462
 463/******************************************************************************
 464 * Hashes an address to determine its location in the multicast table
 465 *
 466 * hw - Struct containing variables accessed by shared code
 467 * mc_addr - the multicast address to hash
 468 *
 469 * Returns:
 470 *      The hash value
 471 *****************************************************************************/
 472static u32
 473ixgb_hash_mc_addr(struct ixgb_hw *hw,
 474                   u8 *mc_addr)
 475{
 476        u32 hash_value = 0;
 477
 478        ENTER();
 479
 480        /* The portion of the address that is used for the hash table is
 481         * determined by the mc_filter_type setting.
 482         */
 483        switch (hw->mc_filter_type) {
 484                /* [0] [1] [2] [3] [4] [5]
 485                 * 01  AA  00  12  34  56
 486                 * LSB                 MSB - According to H/W docs */
 487        case 0:
 488                /* [47:36] i.e. 0x563 for above example address */
 489                hash_value =
 490                    ((mc_addr[4] >> 4) | (((u16) mc_addr[5]) << 4));
 491                break;
 492        case 1:         /* [46:35] i.e. 0xAC6 for above example address */
 493                hash_value =
 494                    ((mc_addr[4] >> 3) | (((u16) mc_addr[5]) << 5));
 495                break;
 496        case 2:         /* [45:34] i.e. 0x5D8 for above example address */
 497                hash_value =
 498                    ((mc_addr[4] >> 2) | (((u16) mc_addr[5]) << 6));
 499                break;
 500        case 3:         /* [43:32] i.e. 0x634 for above example address */
 501                hash_value = ((mc_addr[4]) | (((u16) mc_addr[5]) << 8));
 502                break;
 503        default:
 504                /* Invalid mc_filter_type, what should we do? */
 505                pr_debug("MC filter type param set incorrectly\n");
 506                ASSERT(0);
 507                break;
 508        }
 509
 510        hash_value &= 0xFFF;
 511        return hash_value;
 512}
 513
 514/******************************************************************************
 515 * Sets the bit in the multicast table corresponding to the hash value.
 516 *
 517 * hw - Struct containing variables accessed by shared code
 518 * hash_value - Multicast address hash value
 519 *****************************************************************************/
 520static void
 521ixgb_mta_set(struct ixgb_hw *hw,
 522                  u32 hash_value)
 523{
 524        u32 hash_bit, hash_reg;
 525        u32 mta_reg;
 526
 527        /* The MTA is a register array of 128 32-bit registers.
 528         * It is treated like an array of 4096 bits.  We want to set
 529         * bit BitArray[hash_value]. So we figure out what register
 530         * the bit is in, read it, OR in the new bit, then write
 531         * back the new value.  The register is determined by the
 532         * upper 7 bits of the hash value and the bit within that
 533         * register are determined by the lower 5 bits of the value.
 534         */
 535        hash_reg = (hash_value >> 5) & 0x7F;
 536        hash_bit = hash_value & 0x1F;
 537
 538        mta_reg = IXGB_READ_REG_ARRAY(hw, MTA, hash_reg);
 539
 540        mta_reg |= (1 << hash_bit);
 541
 542        IXGB_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta_reg);
 543}
 544
 545/******************************************************************************
 546 * Puts an ethernet address into a receive address register.
 547 *
 548 * hw - Struct containing variables accessed by shared code
 549 * addr - Address to put into receive address register
 550 * index - Receive address register to write
 551 *****************************************************************************/
 552void
 553ixgb_rar_set(struct ixgb_hw *hw,
 554                  u8 *addr,
 555                  u32 index)
 556{
 557        u32 rar_low, rar_high;
 558
 559        ENTER();
 560
 561        /* HW expects these in little endian so we reverse the byte order
 562         * from network order (big endian) to little endian
 563         */
 564        rar_low = ((u32) addr[0] |
 565                   ((u32)addr[1] << 8) |
 566                   ((u32)addr[2] << 16) |
 567                   ((u32)addr[3] << 24));
 568
 569        rar_high = ((u32) addr[4] |
 570                        ((u32)addr[5] << 8) |
 571                        IXGB_RAH_AV);
 572
 573        IXGB_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
 574        IXGB_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
 575}
 576
 577/******************************************************************************
 578 * Writes a value to the specified offset in the VLAN filter table.
 579 *
 580 * hw - Struct containing variables accessed by shared code
 581 * offset - Offset in VLAN filer table to write
 582 * value - Value to write into VLAN filter table
 583 *****************************************************************************/
 584void
 585ixgb_write_vfta(struct ixgb_hw *hw,
 586                 u32 offset,
 587                 u32 value)
 588{
 589        IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, value);
 590}
 591
 592/******************************************************************************
 593 * Clears the VLAN filer table
 594 *
 595 * hw - Struct containing variables accessed by shared code
 596 *****************************************************************************/
 597static void
 598ixgb_clear_vfta(struct ixgb_hw *hw)
 599{
 600        u32 offset;
 601
 602        for (offset = 0; offset < IXGB_VLAN_FILTER_TBL_SIZE; offset++)
 603                IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, 0);
 604}
 605
 606/******************************************************************************
 607 * Configures the flow control settings based on SW configuration.
 608 *
 609 * hw - Struct containing variables accessed by shared code
 610 *****************************************************************************/
 611
 612static bool
 613ixgb_setup_fc(struct ixgb_hw *hw)
 614{
 615        u32 ctrl_reg;
 616        u32 pap_reg = 0;   /* by default, assume no pause time */
 617        bool status = true;
 618
 619        ENTER();
 620
 621        /* Get the current control reg 0 settings */
 622        ctrl_reg = IXGB_READ_REG(hw, CTRL0);
 623
 624        /* Clear the Receive Pause Enable and Transmit Pause Enable bits */
 625        ctrl_reg &= ~(IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
 626
 627        /* The possible values of the "flow_control" parameter are:
 628         *      0:  Flow control is completely disabled
 629         *      1:  Rx flow control is enabled (we can receive pause frames
 630         *          but not send pause frames).
 631         *      2:  Tx flow control is enabled (we can send pause frames
 632         *          but we do not support receiving pause frames).
 633         *      3:  Both Rx and TX flow control (symmetric) are enabled.
 634         *  other:  Invalid.
 635         */
 636        switch (hw->fc.type) {
 637        case ixgb_fc_none:      /* 0 */
 638                /* Set CMDC bit to disable Rx Flow control */
 639                ctrl_reg |= (IXGB_CTRL0_CMDC);
 640                break;
 641        case ixgb_fc_rx_pause:  /* 1 */
 642                /* RX Flow control is enabled, and TX Flow control is
 643                 * disabled.
 644                 */
 645                ctrl_reg |= (IXGB_CTRL0_RPE);
 646                break;
 647        case ixgb_fc_tx_pause:  /* 2 */
 648                /* TX Flow control is enabled, and RX Flow control is
 649                 * disabled, by a software over-ride.
 650                 */
 651                ctrl_reg |= (IXGB_CTRL0_TPE);
 652                pap_reg = hw->fc.pause_time;
 653                break;
 654        case ixgb_fc_full:      /* 3 */
 655                /* Flow control (both RX and TX) is enabled by a software
 656                 * over-ride.
 657                 */
 658                ctrl_reg |= (IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
 659                pap_reg = hw->fc.pause_time;
 660                break;
 661        default:
 662                /* We should never get here.  The value should be 0-3. */
 663                pr_debug("Flow control param set incorrectly\n");
 664                ASSERT(0);
 665                break;
 666        }
 667
 668        /* Write the new settings */
 669        IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
 670
 671        if (pap_reg != 0)
 672                IXGB_WRITE_REG(hw, PAP, pap_reg);
 673
 674        /* Set the flow control receive threshold registers.  Normally,
 675         * these registers will be set to a default threshold that may be
 676         * adjusted later by the driver's runtime code.  However, if the
 677         * ability to transmit pause frames in not enabled, then these
 678         * registers will be set to 0.
 679         */
 680        if (!(hw->fc.type & ixgb_fc_tx_pause)) {
 681                IXGB_WRITE_REG(hw, FCRTL, 0);
 682                IXGB_WRITE_REG(hw, FCRTH, 0);
 683        } else {
 684           /* We need to set up the Receive Threshold high and low water
 685            * marks as well as (optionally) enabling the transmission of XON
 686            * frames. */
 687                if (hw->fc.send_xon) {
 688                        IXGB_WRITE_REG(hw, FCRTL,
 689                                (hw->fc.low_water | IXGB_FCRTL_XONE));
 690                } else {
 691                        IXGB_WRITE_REG(hw, FCRTL, hw->fc.low_water);
 692                }
 693                IXGB_WRITE_REG(hw, FCRTH, hw->fc.high_water);
 694        }
 695        return status;
 696}
 697
 698/******************************************************************************
 699 * Reads a word from a device over the Management Data Interface (MDI) bus.
 700 * This interface is used to manage Physical layer devices.
 701 *
 702 * hw          - Struct containing variables accessed by hw code
 703 * reg_address - Offset of device register being read.
 704 * phy_address - Address of device on MDI.
 705 *
 706 * Returns:  Data word (16 bits) from MDI device.
 707 *
 708 * The 82597EX has support for several MDI access methods.  This routine
 709 * uses the new protocol MDI Single Command and Address Operation.
 710 * This requires that first an address cycle command is sent, followed by a
 711 * read command.
 712 *****************************************************************************/
 713static u16
 714ixgb_read_phy_reg(struct ixgb_hw *hw,
 715                u32 reg_address,
 716                u32 phy_address,
 717                u32 device_type)
 718{
 719        u32 i;
 720        u32 data;
 721        u32 command = 0;
 722
 723        ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
 724        ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
 725        ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
 726
 727        /* Setup and write the address cycle command */
 728        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
 729                   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 730                   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 731                   (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
 732
 733        IXGB_WRITE_REG(hw, MSCA, command);
 734
 735    /**************************************************************
 736    ** Check every 10 usec to see if the address cycle completed
 737    ** The COMMAND bit will clear when the operation is complete.
 738    ** This may take as long as 64 usecs (we'll wait 100 usecs max)
 739    ** from the CPU Write to the Ready bit assertion.
 740    **************************************************************/
 741
 742        for (i = 0; i < 10; i++)
 743        {
 744                udelay(10);
 745
 746                command = IXGB_READ_REG(hw, MSCA);
 747
 748                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 749                        break;
 750        }
 751
 752        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 753
 754        /* Address cycle complete, setup and write the read command */
 755        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
 756                   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 757                   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 758                   (IXGB_MSCA_READ | IXGB_MSCA_MDI_COMMAND));
 759
 760        IXGB_WRITE_REG(hw, MSCA, command);
 761
 762    /**************************************************************
 763    ** Check every 10 usec to see if the read command completed
 764    ** The COMMAND bit will clear when the operation is complete.
 765    ** The read may take as long as 64 usecs (we'll wait 100 usecs max)
 766    ** from the CPU Write to the Ready bit assertion.
 767    **************************************************************/
 768
 769        for (i = 0; i < 10; i++)
 770        {
 771                udelay(10);
 772
 773                command = IXGB_READ_REG(hw, MSCA);
 774
 775                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 776                        break;
 777        }
 778
 779        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 780
 781        /* Operation is complete, get the data from the MDIO Read/Write Data
 782         * register and return.
 783         */
 784        data = IXGB_READ_REG(hw, MSRWD);
 785        data >>= IXGB_MSRWD_READ_DATA_SHIFT;
 786        return((u16) data);
 787}
 788
 789/******************************************************************************
 790 * Writes a word to a device over the Management Data Interface (MDI) bus.
 791 * This interface is used to manage Physical layer devices.
 792 *
 793 * hw          - Struct containing variables accessed by hw code
 794 * reg_address - Offset of device register being read.
 795 * phy_address - Address of device on MDI.
 796 * device_type - Also known as the Device ID or DID.
 797 * data        - 16-bit value to be written
 798 *
 799 * Returns:  void.
 800 *
 801 * The 82597EX has support for several MDI access methods.  This routine
 802 * uses the new protocol MDI Single Command and Address Operation.
 803 * This requires that first an address cycle command is sent, followed by a
 804 * write command.
 805 *****************************************************************************/
 806static void
 807ixgb_write_phy_reg(struct ixgb_hw *hw,
 808                        u32 reg_address,
 809                        u32 phy_address,
 810                        u32 device_type,
 811                        u16 data)
 812{
 813        u32 i;
 814        u32 command = 0;
 815
 816        ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
 817        ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
 818        ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
 819
 820        /* Put the data in the MDIO Read/Write Data register */
 821        IXGB_WRITE_REG(hw, MSRWD, (u32)data);
 822
 823        /* Setup and write the address cycle command */
 824        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
 825                           (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 826                           (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 827                           (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
 828
 829        IXGB_WRITE_REG(hw, MSCA, command);
 830
 831        /**************************************************************
 832        ** Check every 10 usec to see if the address cycle completed
 833        ** The COMMAND bit will clear when the operation is complete.
 834        ** This may take as long as 64 usecs (we'll wait 100 usecs max)
 835        ** from the CPU Write to the Ready bit assertion.
 836        **************************************************************/
 837
 838        for (i = 0; i < 10; i++)
 839        {
 840                udelay(10);
 841
 842                command = IXGB_READ_REG(hw, MSCA);
 843
 844                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 845                        break;
 846        }
 847
 848        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 849
 850        /* Address cycle complete, setup and write the write command */
 851        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
 852                           (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 853                           (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 854                           (IXGB_MSCA_WRITE | IXGB_MSCA_MDI_COMMAND));
 855
 856        IXGB_WRITE_REG(hw, MSCA, command);
 857
 858        /**************************************************************
 859        ** Check every 10 usec to see if the read command completed
 860        ** The COMMAND bit will clear when the operation is complete.
 861        ** The write may take as long as 64 usecs (we'll wait 100 usecs max)
 862        ** from the CPU Write to the Ready bit assertion.
 863        **************************************************************/
 864
 865        for (i = 0; i < 10; i++)
 866        {
 867                udelay(10);
 868
 869                command = IXGB_READ_REG(hw, MSCA);
 870
 871                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 872                        break;
 873        }
 874
 875        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 876
 877        /* Operation is complete, return. */
 878}
 879
 880/******************************************************************************
 881 * Checks to see if the link status of the hardware has changed.
 882 *
 883 * hw - Struct containing variables accessed by hw code
 884 *
 885 * Called by any function that needs to check the link status of the adapter.
 886 *****************************************************************************/
 887void
 888ixgb_check_for_link(struct ixgb_hw *hw)
 889{
 890        u32 status_reg;
 891        u32 xpcss_reg;
 892
 893        ENTER();
 894
 895        xpcss_reg = IXGB_READ_REG(hw, XPCSS);
 896        status_reg = IXGB_READ_REG(hw, STATUS);
 897
 898        if ((xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
 899            (status_reg & IXGB_STATUS_LU)) {
 900                hw->link_up = true;
 901        } else if (!(xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
 902                   (status_reg & IXGB_STATUS_LU)) {
 903                pr_debug("XPCSS Not Aligned while Status:LU is set\n");
 904                hw->link_up = ixgb_link_reset(hw);
 905        } else {
 906                /*
 907                 * 82597EX errata.  Since the lane deskew problem may prevent
 908                 * link, reset the link before reporting link down.
 909                 */
 910                hw->link_up = ixgb_link_reset(hw);
 911        }
 912        /*  Anything else for 10 Gig?? */
 913}
 914
 915/******************************************************************************
 916 * Check for a bad link condition that may have occurred.
 917 * The indication is that the RFC / LFC registers may be incrementing
 918 * continually.  A full adapter reset is required to recover.
 919 *
 920 * hw - Struct containing variables accessed by hw code
 921 *
 922 * Called by any function that needs to check the link status of the adapter.
 923 *****************************************************************************/
 924bool ixgb_check_for_bad_link(struct ixgb_hw *hw)
 925{
 926        u32 newLFC, newRFC;
 927        bool bad_link_returncode = false;
 928
 929        if (hw->phy_type == ixgb_phy_type_txn17401) {
 930                newLFC = IXGB_READ_REG(hw, LFC);
 931                newRFC = IXGB_READ_REG(hw, RFC);
 932                if ((hw->lastLFC + 250 < newLFC)
 933                    || (hw->lastRFC + 250 < newRFC)) {
 934                        pr_debug("BAD LINK! too many LFC/RFC since last check\n");
 935                        bad_link_returncode = true;
 936                }
 937                hw->lastLFC = newLFC;
 938                hw->lastRFC = newRFC;
 939        }
 940
 941        return bad_link_returncode;
 942}
 943
 944/******************************************************************************
 945 * Clears all hardware statistics counters.
 946 *
 947 * hw - Struct containing variables accessed by shared code
 948 *****************************************************************************/
 949static void
 950ixgb_clear_hw_cntrs(struct ixgb_hw *hw)
 951{
 952        volatile u32 temp_reg;
 953
 954        ENTER();
 955
 956        /* if we are stopped or resetting exit gracefully */
 957        if (hw->adapter_stopped) {
 958                pr_debug("Exiting because the adapter is stopped!!!\n");
 959                return;
 960        }
 961
 962        temp_reg = IXGB_READ_REG(hw, TPRL);
 963        temp_reg = IXGB_READ_REG(hw, TPRH);
 964        temp_reg = IXGB_READ_REG(hw, GPRCL);
 965        temp_reg = IXGB_READ_REG(hw, GPRCH);
 966        temp_reg = IXGB_READ_REG(hw, BPRCL);
 967        temp_reg = IXGB_READ_REG(hw, BPRCH);
 968        temp_reg = IXGB_READ_REG(hw, MPRCL);
 969        temp_reg = IXGB_READ_REG(hw, MPRCH);
 970        temp_reg = IXGB_READ_REG(hw, UPRCL);
 971        temp_reg = IXGB_READ_REG(hw, UPRCH);
 972        temp_reg = IXGB_READ_REG(hw, VPRCL);
 973        temp_reg = IXGB_READ_REG(hw, VPRCH);
 974        temp_reg = IXGB_READ_REG(hw, JPRCL);
 975        temp_reg = IXGB_READ_REG(hw, JPRCH);
 976        temp_reg = IXGB_READ_REG(hw, GORCL);
 977        temp_reg = IXGB_READ_REG(hw, GORCH);
 978        temp_reg = IXGB_READ_REG(hw, TORL);
 979        temp_reg = IXGB_READ_REG(hw, TORH);
 980        temp_reg = IXGB_READ_REG(hw, RNBC);
 981        temp_reg = IXGB_READ_REG(hw, RUC);
 982        temp_reg = IXGB_READ_REG(hw, ROC);
 983        temp_reg = IXGB_READ_REG(hw, RLEC);
 984        temp_reg = IXGB_READ_REG(hw, CRCERRS);
 985        temp_reg = IXGB_READ_REG(hw, ICBC);
 986        temp_reg = IXGB_READ_REG(hw, ECBC);
 987        temp_reg = IXGB_READ_REG(hw, MPC);
 988        temp_reg = IXGB_READ_REG(hw, TPTL);
 989        temp_reg = IXGB_READ_REG(hw, TPTH);
 990        temp_reg = IXGB_READ_REG(hw, GPTCL);
 991        temp_reg = IXGB_READ_REG(hw, GPTCH);
 992        temp_reg = IXGB_READ_REG(hw, BPTCL);
 993        temp_reg = IXGB_READ_REG(hw, BPTCH);
 994        temp_reg = IXGB_READ_REG(hw, MPTCL);
 995        temp_reg = IXGB_READ_REG(hw, MPTCH);
 996        temp_reg = IXGB_READ_REG(hw, UPTCL);
 997        temp_reg = IXGB_READ_REG(hw, UPTCH);
 998        temp_reg = IXGB_READ_REG(hw, VPTCL);
 999        temp_reg = IXGB_READ_REG(hw, VPTCH);
1000        temp_reg = IXGB_READ_REG(hw, JPTCL);
1001        temp_reg = IXGB_READ_REG(hw, JPTCH);
1002        temp_reg = IXGB_READ_REG(hw, GOTCL);
1003        temp_reg = IXGB_READ_REG(hw, GOTCH);
1004        temp_reg = IXGB_READ_REG(hw, TOTL);
1005        temp_reg = IXGB_READ_REG(hw, TOTH);
1006        temp_reg = IXGB_READ_REG(hw, DC);
1007        temp_reg = IXGB_READ_REG(hw, PLT64C);
1008        temp_reg = IXGB_READ_REG(hw, TSCTC);
1009        temp_reg = IXGB_READ_REG(hw, TSCTFC);
1010        temp_reg = IXGB_READ_REG(hw, IBIC);
1011        temp_reg = IXGB_READ_REG(hw, RFC);
1012        temp_reg = IXGB_READ_REG(hw, LFC);
1013        temp_reg = IXGB_READ_REG(hw, PFRC);
1014        temp_reg = IXGB_READ_REG(hw, PFTC);
1015        temp_reg = IXGB_READ_REG(hw, MCFRC);
1016        temp_reg = IXGB_READ_REG(hw, MCFTC);
1017        temp_reg = IXGB_READ_REG(hw, XONRXC);
1018        temp_reg = IXGB_READ_REG(hw, XONTXC);
1019        temp_reg = IXGB_READ_REG(hw, XOFFRXC);
1020        temp_reg = IXGB_READ_REG(hw, XOFFTXC);
1021        temp_reg = IXGB_READ_REG(hw, RJC);
1022}
1023
1024/******************************************************************************
1025 * Turns on the software controllable LED
1026 *
1027 * hw - Struct containing variables accessed by shared code
1028 *****************************************************************************/
1029void
1030ixgb_led_on(struct ixgb_hw *hw)
1031{
1032        u32 ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1033
1034        /* To turn on the LED, clear software-definable pin 0 (SDP0). */
1035        ctrl0_reg &= ~IXGB_CTRL0_SDP0;
1036        IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1037}
1038
1039/******************************************************************************
1040 * Turns off the software controllable LED
1041 *
1042 * hw - Struct containing variables accessed by shared code
1043 *****************************************************************************/
1044void
1045ixgb_led_off(struct ixgb_hw *hw)
1046{
1047        u32 ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1048
1049        /* To turn off the LED, set software-definable pin 0 (SDP0). */
1050        ctrl0_reg |= IXGB_CTRL0_SDP0;
1051        IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1052}
1053
1054/******************************************************************************
1055 * Gets the current PCI bus type, speed, and width of the hardware
1056 *
1057 * hw - Struct containing variables accessed by shared code
1058 *****************************************************************************/
1059static void
1060ixgb_get_bus_info(struct ixgb_hw *hw)
1061{
1062        u32 status_reg;
1063
1064        status_reg = IXGB_READ_REG(hw, STATUS);
1065
1066        hw->bus.type = (status_reg & IXGB_STATUS_PCIX_MODE) ?
1067                ixgb_bus_type_pcix : ixgb_bus_type_pci;
1068
1069        if (hw->bus.type == ixgb_bus_type_pci) {
1070                hw->bus.speed = (status_reg & IXGB_STATUS_PCI_SPD) ?
1071                        ixgb_bus_speed_66 : ixgb_bus_speed_33;
1072        } else {
1073                switch (status_reg & IXGB_STATUS_PCIX_SPD_MASK) {
1074                case IXGB_STATUS_PCIX_SPD_66:
1075                        hw->bus.speed = ixgb_bus_speed_66;
1076                        break;
1077                case IXGB_STATUS_PCIX_SPD_100:
1078                        hw->bus.speed = ixgb_bus_speed_100;
1079                        break;
1080                case IXGB_STATUS_PCIX_SPD_133:
1081                        hw->bus.speed = ixgb_bus_speed_133;
1082                        break;
1083                default:
1084                        hw->bus.speed = ixgb_bus_speed_reserved;
1085                        break;
1086                }
1087        }
1088
1089        hw->bus.width = (status_reg & IXGB_STATUS_BUS64) ?
1090                ixgb_bus_width_64 : ixgb_bus_width_32;
1091}
1092
1093/******************************************************************************
1094 * Tests a MAC address to ensure it is a valid Individual Address
1095 *
1096 * mac_addr - pointer to MAC address.
1097 *
1098 *****************************************************************************/
1099static bool
1100mac_addr_valid(u8 *mac_addr)
1101{
1102        bool is_valid = true;
1103        ENTER();
1104
1105        /* Make sure it is not a multicast address */
1106        if (is_multicast_ether_addr(mac_addr)) {
1107                pr_debug("MAC address is multicast\n");
1108                is_valid = false;
1109        }
1110        /* Not a broadcast address */
1111        else if (is_broadcast_ether_addr(mac_addr)) {
1112                pr_debug("MAC address is broadcast\n");
1113                is_valid = false;
1114        }
1115        /* Reject the zero address */
1116        else if (is_zero_ether_addr(mac_addr)) {
1117                pr_debug("MAC address is all zeros\n");
1118                is_valid = false;
1119        }
1120        return is_valid;
1121}
1122
1123/******************************************************************************
1124 * Resets the 10GbE link.  Waits the settle time and returns the state of
1125 * the link.
1126 *
1127 * hw - Struct containing variables accessed by shared code
1128 *****************************************************************************/
1129static bool
1130ixgb_link_reset(struct ixgb_hw *hw)
1131{
1132        bool link_status = false;
1133        u8 wait_retries = MAX_RESET_ITERATIONS;
1134        u8 lrst_retries = MAX_RESET_ITERATIONS;
1135
1136        do {
1137                /* Reset the link */
1138                IXGB_WRITE_REG(hw, CTRL0,
1139                               IXGB_READ_REG(hw, CTRL0) | IXGB_CTRL0_LRST);
1140
1141                /* Wait for link-up and lane re-alignment */
1142                do {
1143                        udelay(IXGB_DELAY_USECS_AFTER_LINK_RESET);
1144                        link_status =
1145                            ((IXGB_READ_REG(hw, STATUS) & IXGB_STATUS_LU)
1146                             && (IXGB_READ_REG(hw, XPCSS) &
1147                                 IXGB_XPCSS_ALIGN_STATUS)) ? true : false;
1148                } while (!link_status && --wait_retries);
1149
1150        } while (!link_status && --lrst_retries);
1151
1152        return link_status;
1153}
1154
1155/******************************************************************************
1156 * Resets the 10GbE optics module.
1157 *
1158 * hw - Struct containing variables accessed by shared code
1159 *****************************************************************************/
1160static void
1161ixgb_optics_reset(struct ixgb_hw *hw)
1162{
1163        if (hw->phy_type == ixgb_phy_type_txn17401) {
1164                u16 mdio_reg;
1165
1166                ixgb_write_phy_reg(hw,
1167                                   MDIO_CTRL1,
1168                                   IXGB_PHY_ADDRESS,
1169                                   MDIO_MMD_PMAPMD,
1170                                   MDIO_CTRL1_RESET);
1171
1172                mdio_reg = ixgb_read_phy_reg(hw,
1173                                             MDIO_CTRL1,
1174                                             IXGB_PHY_ADDRESS,
1175                                             MDIO_MMD_PMAPMD);
1176        }
1177}
1178
1179/******************************************************************************
1180 * Resets the 10GbE optics module for Sun variant NIC.
1181 *
1182 * hw - Struct containing variables accessed by shared code
1183 *****************************************************************************/
1184
1185#define   IXGB_BCM8704_USER_PMD_TX_CTRL_REG         0xC803
1186#define   IXGB_BCM8704_USER_PMD_TX_CTRL_REG_VAL     0x0164
1187#define   IXGB_BCM8704_USER_CTRL_REG                0xC800
1188#define   IXGB_BCM8704_USER_CTRL_REG_VAL            0x7FBF
1189#define   IXGB_BCM8704_USER_DEV3_ADDR               0x0003
1190#define   IXGB_SUN_PHY_ADDRESS                      0x0000
1191#define   IXGB_SUN_PHY_RESET_DELAY                     305
1192
1193static void
1194ixgb_optics_reset_bcm(struct ixgb_hw *hw)
1195{
1196        u32 ctrl = IXGB_READ_REG(hw, CTRL0);
1197        ctrl &= ~IXGB_CTRL0_SDP2;
1198        ctrl |= IXGB_CTRL0_SDP3;
1199        IXGB_WRITE_REG(hw, CTRL0, ctrl);
1200        IXGB_WRITE_FLUSH(hw);
1201
1202        /* SerDes needs extra delay */
1203        msleep(IXGB_SUN_PHY_RESET_DELAY);
1204
1205        /* Broadcom 7408L configuration */
1206        /* Reference clock config */
1207        ixgb_write_phy_reg(hw,
1208                           IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1209                           IXGB_SUN_PHY_ADDRESS,
1210                           IXGB_BCM8704_USER_DEV3_ADDR,
1211                           IXGB_BCM8704_USER_PMD_TX_CTRL_REG_VAL);
1212        /*  we must read the registers twice */
1213        ixgb_read_phy_reg(hw,
1214                          IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1215                          IXGB_SUN_PHY_ADDRESS,
1216                          IXGB_BCM8704_USER_DEV3_ADDR);
1217        ixgb_read_phy_reg(hw,
1218                          IXGB_BCM8704_USER_PMD_TX_CTRL_REG,
1219                          IXGB_SUN_PHY_ADDRESS,
1220                          IXGB_BCM8704_USER_DEV3_ADDR);
1221
1222        ixgb_write_phy_reg(hw,
1223                           IXGB_BCM8704_USER_CTRL_REG,
1224                           IXGB_SUN_PHY_ADDRESS,
1225                           IXGB_BCM8704_USER_DEV3_ADDR,
1226                           IXGB_BCM8704_USER_CTRL_REG_VAL);
1227        ixgb_read_phy_reg(hw,
1228                          IXGB_BCM8704_USER_CTRL_REG,
1229                          IXGB_SUN_PHY_ADDRESS,
1230                          IXGB_BCM8704_USER_DEV3_ADDR);
1231        ixgb_read_phy_reg(hw,
1232                          IXGB_BCM8704_USER_CTRL_REG,
1233                          IXGB_SUN_PHY_ADDRESS,
1234                          IXGB_BCM8704_USER_DEV3_ADDR);
1235
1236        /* SerDes needs extra delay */
1237        msleep(IXGB_SUN_PHY_RESET_DELAY);
1238}
1239