cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

e1000_hw.c (158680B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright(c) 1999 - 2006 Intel Corporation. */
      3
      4/* e1000_hw.c
      5 * Shared functions for accessing and configuring the MAC
      6 */
      7
      8#include "e1000.h"
      9
     10static s32 e1000_check_downshift(struct e1000_hw *hw);
     11static s32 e1000_check_polarity(struct e1000_hw *hw,
     12				e1000_rev_polarity *polarity);
     13static void e1000_clear_hw_cntrs(struct e1000_hw *hw);
     14static void e1000_clear_vfta(struct e1000_hw *hw);
     15static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw,
     16					      bool link_up);
     17static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw);
     18static s32 e1000_detect_gig_phy(struct e1000_hw *hw);
     19static s32 e1000_get_auto_rd_done(struct e1000_hw *hw);
     20static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
     21				  u16 *max_length);
     22static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);
     23static s32 e1000_id_led_init(struct e1000_hw *hw);
     24static void e1000_init_rx_addrs(struct e1000_hw *hw);
     25static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
     26				  struct e1000_phy_info *phy_info);
     27static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
     28				  struct e1000_phy_info *phy_info);
     29static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active);
     30static s32 e1000_wait_autoneg(struct e1000_hw *hw);
     31static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value);
     32static s32 e1000_set_phy_type(struct e1000_hw *hw);
     33static void e1000_phy_init_script(struct e1000_hw *hw);
     34static s32 e1000_setup_copper_link(struct e1000_hw *hw);
     35static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw);
     36static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw);
     37static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw);
     38static s32 e1000_config_mac_to_phy(struct e1000_hw *hw);
     39static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
     40static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
     41static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data, u16 count);
     42static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw);
     43static s32 e1000_phy_reset_dsp(struct e1000_hw *hw);
     44static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset,
     45				  u16 words, u16 *data);
     46static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
     47					u16 words, u16 *data);
     48static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw);
     49static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd);
     50static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd);
     51static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count);
     52static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
     53				  u16 phy_data);
     54static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
     55				 u16 *phy_data);
     56static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count);
     57static s32 e1000_acquire_eeprom(struct e1000_hw *hw);
     58static void e1000_release_eeprom(struct e1000_hw *hw);
     59static void e1000_standby_eeprom(struct e1000_hw *hw);
     60static s32 e1000_set_vco_speed(struct e1000_hw *hw);
     61static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw);
     62static s32 e1000_set_phy_mode(struct e1000_hw *hw);
     63static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
     64				u16 *data);
     65static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
     66				 u16 *data);
     67
     68/* IGP cable length table */
     69static const
     70u16 e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] = {
     71	5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     72	5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
     73	25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
     74	40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
     75	60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
     76	90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100,
     77	    100,
     78	100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
     79	    110, 110,
     80	110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120,
     81	    120, 120
     82};
     83
     84static DEFINE_MUTEX(e1000_eeprom_lock);
     85static DEFINE_SPINLOCK(e1000_phy_lock);
     86
     87/**
     88 * e1000_set_phy_type - Set the phy type member in the hw struct.
     89 * @hw: Struct containing variables accessed by shared code
     90 */
     91static s32 e1000_set_phy_type(struct e1000_hw *hw)
     92{
     93	if (hw->mac_type == e1000_undefined)
     94		return -E1000_ERR_PHY_TYPE;
     95
     96	switch (hw->phy_id) {
     97	case M88E1000_E_PHY_ID:
     98	case M88E1000_I_PHY_ID:
     99	case M88E1011_I_PHY_ID:
    100	case M88E1111_I_PHY_ID:
    101	case M88E1118_E_PHY_ID:
    102		hw->phy_type = e1000_phy_m88;
    103		break;
    104	case IGP01E1000_I_PHY_ID:
    105		if (hw->mac_type == e1000_82541 ||
    106		    hw->mac_type == e1000_82541_rev_2 ||
    107		    hw->mac_type == e1000_82547 ||
    108		    hw->mac_type == e1000_82547_rev_2)
    109			hw->phy_type = e1000_phy_igp;
    110		break;
    111	case RTL8211B_PHY_ID:
    112		hw->phy_type = e1000_phy_8211;
    113		break;
    114	case RTL8201N_PHY_ID:
    115		hw->phy_type = e1000_phy_8201;
    116		break;
    117	default:
    118		/* Should never have loaded on this device */
    119		hw->phy_type = e1000_phy_undefined;
    120		return -E1000_ERR_PHY_TYPE;
    121	}
    122
    123	return E1000_SUCCESS;
    124}
    125
    126/**
    127 * e1000_phy_init_script - IGP phy init script - initializes the GbE PHY
    128 * @hw: Struct containing variables accessed by shared code
    129 */
    130static void e1000_phy_init_script(struct e1000_hw *hw)
    131{
    132	u16 phy_saved_data;
    133
    134	if (hw->phy_init_script) {
    135		msleep(20);
    136
    137		/* Save off the current value of register 0x2F5B to be restored
    138		 * at the end of this routine.
    139		 */
    140		e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
    141
    142		/* Disabled the PHY transmitter */
    143		e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
    144		msleep(20);
    145
    146		e1000_write_phy_reg(hw, 0x0000, 0x0140);
    147		msleep(5);
    148
    149		switch (hw->mac_type) {
    150		case e1000_82541:
    151		case e1000_82547:
    152			e1000_write_phy_reg(hw, 0x1F95, 0x0001);
    153			e1000_write_phy_reg(hw, 0x1F71, 0xBD21);
    154			e1000_write_phy_reg(hw, 0x1F79, 0x0018);
    155			e1000_write_phy_reg(hw, 0x1F30, 0x1600);
    156			e1000_write_phy_reg(hw, 0x1F31, 0x0014);
    157			e1000_write_phy_reg(hw, 0x1F32, 0x161C);
    158			e1000_write_phy_reg(hw, 0x1F94, 0x0003);
    159			e1000_write_phy_reg(hw, 0x1F96, 0x003F);
    160			e1000_write_phy_reg(hw, 0x2010, 0x0008);
    161			break;
    162
    163		case e1000_82541_rev_2:
    164		case e1000_82547_rev_2:
    165			e1000_write_phy_reg(hw, 0x1F73, 0x0099);
    166			break;
    167		default:
    168			break;
    169		}
    170
    171		e1000_write_phy_reg(hw, 0x0000, 0x3300);
    172		msleep(20);
    173
    174		/* Now enable the transmitter */
    175		e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
    176
    177		if (hw->mac_type == e1000_82547) {
    178			u16 fused, fine, coarse;
    179
    180			/* Move to analog registers page */
    181			e1000_read_phy_reg(hw,
    182					   IGP01E1000_ANALOG_SPARE_FUSE_STATUS,
    183					   &fused);
    184
    185			if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
    186				e1000_read_phy_reg(hw,
    187						   IGP01E1000_ANALOG_FUSE_STATUS,
    188						   &fused);
    189
    190				fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
    191				coarse =
    192				    fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
    193
    194				if (coarse >
    195				    IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
    196					coarse -=
    197					    IGP01E1000_ANALOG_FUSE_COARSE_10;
    198					fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
    199				} else if (coarse ==
    200					   IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
    201					fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
    202
    203				fused =
    204				    (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
    205				    (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
    206				    (coarse &
    207				     IGP01E1000_ANALOG_FUSE_COARSE_MASK);
    208
    209				e1000_write_phy_reg(hw,
    210						    IGP01E1000_ANALOG_FUSE_CONTROL,
    211						    fused);
    212				e1000_write_phy_reg(hw,
    213						    IGP01E1000_ANALOG_FUSE_BYPASS,
    214						    IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
    215			}
    216		}
    217	}
    218}
    219
    220/**
    221 * e1000_set_mac_type - Set the mac type member in the hw struct.
    222 * @hw: Struct containing variables accessed by shared code
    223 */
    224s32 e1000_set_mac_type(struct e1000_hw *hw)
    225{
    226	switch (hw->device_id) {
    227	case E1000_DEV_ID_82542:
    228		switch (hw->revision_id) {
    229		case E1000_82542_2_0_REV_ID:
    230			hw->mac_type = e1000_82542_rev2_0;
    231			break;
    232		case E1000_82542_2_1_REV_ID:
    233			hw->mac_type = e1000_82542_rev2_1;
    234			break;
    235		default:
    236			/* Invalid 82542 revision ID */
    237			return -E1000_ERR_MAC_TYPE;
    238		}
    239		break;
    240	case E1000_DEV_ID_82543GC_FIBER:
    241	case E1000_DEV_ID_82543GC_COPPER:
    242		hw->mac_type = e1000_82543;
    243		break;
    244	case E1000_DEV_ID_82544EI_COPPER:
    245	case E1000_DEV_ID_82544EI_FIBER:
    246	case E1000_DEV_ID_82544GC_COPPER:
    247	case E1000_DEV_ID_82544GC_LOM:
    248		hw->mac_type = e1000_82544;
    249		break;
    250	case E1000_DEV_ID_82540EM:
    251	case E1000_DEV_ID_82540EM_LOM:
    252	case E1000_DEV_ID_82540EP:
    253	case E1000_DEV_ID_82540EP_LOM:
    254	case E1000_DEV_ID_82540EP_LP:
    255		hw->mac_type = e1000_82540;
    256		break;
    257	case E1000_DEV_ID_82545EM_COPPER:
    258	case E1000_DEV_ID_82545EM_FIBER:
    259		hw->mac_type = e1000_82545;
    260		break;
    261	case E1000_DEV_ID_82545GM_COPPER:
    262	case E1000_DEV_ID_82545GM_FIBER:
    263	case E1000_DEV_ID_82545GM_SERDES:
    264		hw->mac_type = e1000_82545_rev_3;
    265		break;
    266	case E1000_DEV_ID_82546EB_COPPER:
    267	case E1000_DEV_ID_82546EB_FIBER:
    268	case E1000_DEV_ID_82546EB_QUAD_COPPER:
    269		hw->mac_type = e1000_82546;
    270		break;
    271	case E1000_DEV_ID_82546GB_COPPER:
    272	case E1000_DEV_ID_82546GB_FIBER:
    273	case E1000_DEV_ID_82546GB_SERDES:
    274	case E1000_DEV_ID_82546GB_PCIE:
    275	case E1000_DEV_ID_82546GB_QUAD_COPPER:
    276	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
    277		hw->mac_type = e1000_82546_rev_3;
    278		break;
    279	case E1000_DEV_ID_82541EI:
    280	case E1000_DEV_ID_82541EI_MOBILE:
    281	case E1000_DEV_ID_82541ER_LOM:
    282		hw->mac_type = e1000_82541;
    283		break;
    284	case E1000_DEV_ID_82541ER:
    285	case E1000_DEV_ID_82541GI:
    286	case E1000_DEV_ID_82541GI_LF:
    287	case E1000_DEV_ID_82541GI_MOBILE:
    288		hw->mac_type = e1000_82541_rev_2;
    289		break;
    290	case E1000_DEV_ID_82547EI:
    291	case E1000_DEV_ID_82547EI_MOBILE:
    292		hw->mac_type = e1000_82547;
    293		break;
    294	case E1000_DEV_ID_82547GI:
    295		hw->mac_type = e1000_82547_rev_2;
    296		break;
    297	case E1000_DEV_ID_INTEL_CE4100_GBE:
    298		hw->mac_type = e1000_ce4100;
    299		break;
    300	default:
    301		/* Should never have loaded on this device */
    302		return -E1000_ERR_MAC_TYPE;
    303	}
    304
    305	switch (hw->mac_type) {
    306	case e1000_82541:
    307	case e1000_82547:
    308	case e1000_82541_rev_2:
    309	case e1000_82547_rev_2:
    310		hw->asf_firmware_present = true;
    311		break;
    312	default:
    313		break;
    314	}
    315
    316	/* The 82543 chip does not count tx_carrier_errors properly in
    317	 * FD mode
    318	 */
    319	if (hw->mac_type == e1000_82543)
    320		hw->bad_tx_carr_stats_fd = true;
    321
    322	if (hw->mac_type > e1000_82544)
    323		hw->has_smbus = true;
    324
    325	return E1000_SUCCESS;
    326}
    327
    328/**
    329 * e1000_set_media_type - Set media type and TBI compatibility.
    330 * @hw: Struct containing variables accessed by shared code
    331 */
    332void e1000_set_media_type(struct e1000_hw *hw)
    333{
    334	u32 status;
    335
    336	if (hw->mac_type != e1000_82543) {
    337		/* tbi_compatibility is only valid on 82543 */
    338		hw->tbi_compatibility_en = false;
    339	}
    340
    341	switch (hw->device_id) {
    342	case E1000_DEV_ID_82545GM_SERDES:
    343	case E1000_DEV_ID_82546GB_SERDES:
    344		hw->media_type = e1000_media_type_internal_serdes;
    345		break;
    346	default:
    347		switch (hw->mac_type) {
    348		case e1000_82542_rev2_0:
    349		case e1000_82542_rev2_1:
    350			hw->media_type = e1000_media_type_fiber;
    351			break;
    352		case e1000_ce4100:
    353			hw->media_type = e1000_media_type_copper;
    354			break;
    355		default:
    356			status = er32(STATUS);
    357			if (status & E1000_STATUS_TBIMODE) {
    358				hw->media_type = e1000_media_type_fiber;
    359				/* tbi_compatibility not valid on fiber */
    360				hw->tbi_compatibility_en = false;
    361			} else {
    362				hw->media_type = e1000_media_type_copper;
    363			}
    364			break;
    365		}
    366	}
    367}
    368
    369/**
    370 * e1000_reset_hw - reset the hardware completely
    371 * @hw: Struct containing variables accessed by shared code
    372 *
    373 * Reset the transmit and receive units; mask and clear all interrupts.
    374 */
    375s32 e1000_reset_hw(struct e1000_hw *hw)
    376{
    377	u32 ctrl;
    378	u32 ctrl_ext;
    379	u32 manc;
    380	u32 led_ctrl;
    381	s32 ret_val;
    382
    383	/* For 82542 (rev 2.0), disable MWI before issuing a device reset */
    384	if (hw->mac_type == e1000_82542_rev2_0) {
    385		e_dbg("Disabling MWI on 82542 rev 2.0\n");
    386		e1000_pci_clear_mwi(hw);
    387	}
    388
    389	/* Clear interrupt mask to stop board from generating interrupts */
    390	e_dbg("Masking off all interrupts\n");
    391	ew32(IMC, 0xffffffff);
    392
    393	/* Disable the Transmit and Receive units.  Then delay to allow
    394	 * any pending transactions to complete before we hit the MAC with
    395	 * the global reset.
    396	 */
    397	ew32(RCTL, 0);
    398	ew32(TCTL, E1000_TCTL_PSP);
    399	E1000_WRITE_FLUSH();
    400
    401	/* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */
    402	hw->tbi_compatibility_on = false;
    403
    404	/* Delay to allow any outstanding PCI transactions to complete before
    405	 * resetting the device
    406	 */
    407	msleep(10);
    408
    409	ctrl = er32(CTRL);
    410
    411	/* Must reset the PHY before resetting the MAC */
    412	if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
    413		ew32(CTRL, (ctrl | E1000_CTRL_PHY_RST));
    414		E1000_WRITE_FLUSH();
    415		msleep(5);
    416	}
    417
    418	/* Issue a global reset to the MAC.  This will reset the chip's
    419	 * transmit, receive, DMA, and link units.  It will not effect
    420	 * the current PCI configuration.  The global reset bit is self-
    421	 * clearing, and should clear within a microsecond.
    422	 */
    423	e_dbg("Issuing a global reset to MAC\n");
    424
    425	switch (hw->mac_type) {
    426	case e1000_82544:
    427	case e1000_82540:
    428	case e1000_82545:
    429	case e1000_82546:
    430	case e1000_82541:
    431	case e1000_82541_rev_2:
    432		/* These controllers can't ack the 64-bit write when issuing the
    433		 * reset, so use IO-mapping as a workaround to issue the reset
    434		 */
    435		E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));
    436		break;
    437	case e1000_82545_rev_3:
    438	case e1000_82546_rev_3:
    439		/* Reset is performed on a shadow of the control register */
    440		ew32(CTRL_DUP, (ctrl | E1000_CTRL_RST));
    441		break;
    442	case e1000_ce4100:
    443	default:
    444		ew32(CTRL, (ctrl | E1000_CTRL_RST));
    445		break;
    446	}
    447
    448	/* After MAC reset, force reload of EEPROM to restore power-on settings
    449	 * to device.  Later controllers reload the EEPROM automatically, so
    450	 * just wait for reload to complete.
    451	 */
    452	switch (hw->mac_type) {
    453	case e1000_82542_rev2_0:
    454	case e1000_82542_rev2_1:
    455	case e1000_82543:
    456	case e1000_82544:
    457		/* Wait for reset to complete */
    458		udelay(10);
    459		ctrl_ext = er32(CTRL_EXT);
    460		ctrl_ext |= E1000_CTRL_EXT_EE_RST;
    461		ew32(CTRL_EXT, ctrl_ext);
    462		E1000_WRITE_FLUSH();
    463		/* Wait for EEPROM reload */
    464		msleep(2);
    465		break;
    466	case e1000_82541:
    467	case e1000_82541_rev_2:
    468	case e1000_82547:
    469	case e1000_82547_rev_2:
    470		/* Wait for EEPROM reload */
    471		msleep(20);
    472		break;
    473	default:
    474		/* Auto read done will delay 5ms or poll based on mac type */
    475		ret_val = e1000_get_auto_rd_done(hw);
    476		if (ret_val)
    477			return ret_val;
    478		break;
    479	}
    480
    481	/* Disable HW ARPs on ASF enabled adapters */
    482	if (hw->mac_type >= e1000_82540) {
    483		manc = er32(MANC);
    484		manc &= ~(E1000_MANC_ARP_EN);
    485		ew32(MANC, manc);
    486	}
    487
    488	if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
    489		e1000_phy_init_script(hw);
    490
    491		/* Configure activity LED after PHY reset */
    492		led_ctrl = er32(LEDCTL);
    493		led_ctrl &= IGP_ACTIVITY_LED_MASK;
    494		led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
    495		ew32(LEDCTL, led_ctrl);
    496	}
    497
    498	/* Clear interrupt mask to stop board from generating interrupts */
    499	e_dbg("Masking off all interrupts\n");
    500	ew32(IMC, 0xffffffff);
    501
    502	/* Clear any pending interrupt events. */
    503	er32(ICR);
    504
    505	/* If MWI was previously enabled, reenable it. */
    506	if (hw->mac_type == e1000_82542_rev2_0) {
    507		if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
    508			e1000_pci_set_mwi(hw);
    509	}
    510
    511	return E1000_SUCCESS;
    512}
    513
    514/**
    515 * e1000_init_hw - Performs basic configuration of the adapter.
    516 * @hw: Struct containing variables accessed by shared code
    517 *
    518 * Assumes that the controller has previously been reset and is in a
    519 * post-reset uninitialized state. Initializes the receive address registers,
    520 * multicast table, and VLAN filter table. Calls routines to setup link
    521 * configuration and flow control settings. Clears all on-chip counters. Leaves
    522 * the transmit and receive units disabled and uninitialized.
    523 */
    524s32 e1000_init_hw(struct e1000_hw *hw)
    525{
    526	u32 ctrl;
    527	u32 i;
    528	s32 ret_val;
    529	u32 mta_size;
    530	u32 ctrl_ext;
    531
    532	/* Initialize Identification LED */
    533	ret_val = e1000_id_led_init(hw);
    534	if (ret_val) {
    535		e_dbg("Error Initializing Identification LED\n");
    536		return ret_val;
    537	}
    538
    539	/* Set the media type and TBI compatibility */
    540	e1000_set_media_type(hw);
    541
    542	/* Disabling VLAN filtering. */
    543	e_dbg("Initializing the IEEE VLAN\n");
    544	if (hw->mac_type < e1000_82545_rev_3)
    545		ew32(VET, 0);
    546	e1000_clear_vfta(hw);
    547
    548	/* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
    549	if (hw->mac_type == e1000_82542_rev2_0) {
    550		e_dbg("Disabling MWI on 82542 rev 2.0\n");
    551		e1000_pci_clear_mwi(hw);
    552		ew32(RCTL, E1000_RCTL_RST);
    553		E1000_WRITE_FLUSH();
    554		msleep(5);
    555	}
    556
    557	/* Setup the receive address. This involves initializing all of the
    558	 * Receive Address Registers (RARs 0 - 15).
    559	 */
    560	e1000_init_rx_addrs(hw);
    561
    562	/* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
    563	if (hw->mac_type == e1000_82542_rev2_0) {
    564		ew32(RCTL, 0);
    565		E1000_WRITE_FLUSH();
    566		msleep(1);
    567		if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
    568			e1000_pci_set_mwi(hw);
    569	}
    570
    571	/* Zero out the Multicast HASH table */
    572	e_dbg("Zeroing the MTA\n");
    573	mta_size = E1000_MC_TBL_SIZE;
    574	for (i = 0; i < mta_size; i++) {
    575		E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
    576		/* use write flush to prevent Memory Write Block (MWB) from
    577		 * occurring when accessing our register space
    578		 */
    579		E1000_WRITE_FLUSH();
    580	}
    581
    582	/* Set the PCI priority bit correctly in the CTRL register.  This
    583	 * determines if the adapter gives priority to receives, or if it
    584	 * gives equal priority to transmits and receives.  Valid only on
    585	 * 82542 and 82543 silicon.
    586	 */
    587	if (hw->dma_fairness && hw->mac_type <= e1000_82543) {
    588		ctrl = er32(CTRL);
    589		ew32(CTRL, ctrl | E1000_CTRL_PRIOR);
    590	}
    591
    592	switch (hw->mac_type) {
    593	case e1000_82545_rev_3:
    594	case e1000_82546_rev_3:
    595		break;
    596	default:
    597		/* Workaround for PCI-X problem when BIOS sets MMRBC
    598		 * incorrectly.
    599		 */
    600		if (hw->bus_type == e1000_bus_type_pcix &&
    601		    e1000_pcix_get_mmrbc(hw) > 2048)
    602			e1000_pcix_set_mmrbc(hw, 2048);
    603		break;
    604	}
    605
    606	/* Call a subroutine to configure the link and setup flow control. */
    607	ret_val = e1000_setup_link(hw);
    608
    609	/* Set the transmit descriptor write-back policy */
    610	if (hw->mac_type > e1000_82544) {
    611		ctrl = er32(TXDCTL);
    612		ctrl =
    613		    (ctrl & ~E1000_TXDCTL_WTHRESH) |
    614		    E1000_TXDCTL_FULL_TX_DESC_WB;
    615		ew32(TXDCTL, ctrl);
    616	}
    617
    618	/* Clear all of the statistics registers (clear on read).  It is
    619	 * important that we do this after we have tried to establish link
    620	 * because the symbol error count will increment wildly if there
    621	 * is no link.
    622	 */
    623	e1000_clear_hw_cntrs(hw);
    624
    625	if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER ||
    626	    hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) {
    627		ctrl_ext = er32(CTRL_EXT);
    628		/* Relaxed ordering must be disabled to avoid a parity
    629		 * error crash in a PCI slot.
    630		 */
    631		ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
    632		ew32(CTRL_EXT, ctrl_ext);
    633	}
    634
    635	return ret_val;
    636}
    637
    638/**
    639 * e1000_adjust_serdes_amplitude - Adjust SERDES output amplitude based on EEPROM setting.
    640 * @hw: Struct containing variables accessed by shared code.
    641 */
    642static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
    643{
    644	u16 eeprom_data;
    645	s32 ret_val;
    646
    647	if (hw->media_type != e1000_media_type_internal_serdes)
    648		return E1000_SUCCESS;
    649
    650	switch (hw->mac_type) {
    651	case e1000_82545_rev_3:
    652	case e1000_82546_rev_3:
    653		break;
    654	default:
    655		return E1000_SUCCESS;
    656	}
    657
    658	ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1,
    659				    &eeprom_data);
    660	if (ret_val)
    661		return ret_val;
    662
    663	if (eeprom_data != EEPROM_RESERVED_WORD) {
    664		/* Adjust SERDES output amplitude only. */
    665		eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK;
    666		ret_val =
    667		    e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, eeprom_data);
    668		if (ret_val)
    669			return ret_val;
    670	}
    671
    672	return E1000_SUCCESS;
    673}
    674
    675/**
    676 * e1000_setup_link - Configures flow control and link settings.
    677 * @hw: Struct containing variables accessed by shared code
    678 *
    679 * Determines which flow control settings to use. Calls the appropriate media-
    680 * specific link configuration function. Configures the flow control settings.
    681 * Assuming the adapter has a valid link partner, a valid link should be
    682 * established. Assumes the hardware has previously been reset and the
    683 * transmitter and receiver are not enabled.
    684 */
    685s32 e1000_setup_link(struct e1000_hw *hw)
    686{
    687	u32 ctrl_ext;
    688	s32 ret_val;
    689	u16 eeprom_data;
    690
    691	/* Read and store word 0x0F of the EEPROM. This word contains bits
    692	 * that determine the hardware's default PAUSE (flow control) mode,
    693	 * a bit that determines whether the HW defaults to enabling or
    694	 * disabling auto-negotiation, and the direction of the
    695	 * SW defined pins. If there is no SW over-ride of the flow
    696	 * control setting, then the variable hw->fc will
    697	 * be initialized based on a value in the EEPROM.
    698	 */
    699	if (hw->fc == E1000_FC_DEFAULT) {
    700		ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
    701					    1, &eeprom_data);
    702		if (ret_val) {
    703			e_dbg("EEPROM Read Error\n");
    704			return -E1000_ERR_EEPROM;
    705		}
    706		if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
    707			hw->fc = E1000_FC_NONE;
    708		else if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) ==
    709			 EEPROM_WORD0F_ASM_DIR)
    710			hw->fc = E1000_FC_TX_PAUSE;
    711		else
    712			hw->fc = E1000_FC_FULL;
    713	}
    714
    715	/* We want to save off the original Flow Control configuration just
    716	 * in case we get disconnected and then reconnected into a different
    717	 * hub or switch with different Flow Control capabilities.
    718	 */
    719	if (hw->mac_type == e1000_82542_rev2_0)
    720		hw->fc &= (~E1000_FC_TX_PAUSE);
    721
    722	if ((hw->mac_type < e1000_82543) && (hw->report_tx_early == 1))
    723		hw->fc &= (~E1000_FC_RX_PAUSE);
    724
    725	hw->original_fc = hw->fc;
    726
    727	e_dbg("After fix-ups FlowControl is now = %x\n", hw->fc);
    728
    729	/* Take the 4 bits from EEPROM word 0x0F that determine the initial
    730	 * polarity value for the SW controlled pins, and setup the
    731	 * Extended Device Control reg with that info.
    732	 * This is needed because one of the SW controlled pins is used for
    733	 * signal detection.  So this should be done before e1000_setup_pcs_link()
    734	 * or e1000_phy_setup() is called.
    735	 */
    736	if (hw->mac_type == e1000_82543) {
    737		ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
    738					    1, &eeprom_data);
    739		if (ret_val) {
    740			e_dbg("EEPROM Read Error\n");
    741			return -E1000_ERR_EEPROM;
    742		}
    743		ctrl_ext = ((eeprom_data & EEPROM_WORD0F_SWPDIO_EXT) <<
    744			    SWDPIO__EXT_SHIFT);
    745		ew32(CTRL_EXT, ctrl_ext);
    746	}
    747
    748	/* Call the necessary subroutine to configure the link. */
    749	ret_val = (hw->media_type == e1000_media_type_copper) ?
    750	    e1000_setup_copper_link(hw) : e1000_setup_fiber_serdes_link(hw);
    751
    752	/* Initialize the flow control address, type, and PAUSE timer
    753	 * registers to their default values.  This is done even if flow
    754	 * control is disabled, because it does not hurt anything to
    755	 * initialize these registers.
    756	 */
    757	e_dbg("Initializing the Flow Control address, type and timer regs\n");
    758
    759	ew32(FCT, FLOW_CONTROL_TYPE);
    760	ew32(FCAH, FLOW_CONTROL_ADDRESS_HIGH);
    761	ew32(FCAL, FLOW_CONTROL_ADDRESS_LOW);
    762
    763	ew32(FCTTV, hw->fc_pause_time);
    764
    765	/* Set the flow control receive threshold registers.  Normally,
    766	 * these registers will be set to a default threshold that may be
    767	 * adjusted later by the driver's runtime code.  However, if the
    768	 * ability to transmit pause frames in not enabled, then these
    769	 * registers will be set to 0.
    770	 */
    771	if (!(hw->fc & E1000_FC_TX_PAUSE)) {
    772		ew32(FCRTL, 0);
    773		ew32(FCRTH, 0);
    774	} else {
    775		/* We need to set up the Receive Threshold high and low water
    776		 * marks as well as (optionally) enabling the transmission of
    777		 * XON frames.
    778		 */
    779		if (hw->fc_send_xon) {
    780			ew32(FCRTL, (hw->fc_low_water | E1000_FCRTL_XONE));
    781			ew32(FCRTH, hw->fc_high_water);
    782		} else {
    783			ew32(FCRTL, hw->fc_low_water);
    784			ew32(FCRTH, hw->fc_high_water);
    785		}
    786	}
    787	return ret_val;
    788}
    789
    790/**
    791 * e1000_setup_fiber_serdes_link - prepare fiber or serdes link
    792 * @hw: Struct containing variables accessed by shared code
    793 *
    794 * Manipulates Physical Coding Sublayer functions in order to configure
    795 * link. Assumes the hardware has been previously reset and the transmitter
    796 * and receiver are not enabled.
    797 */
    798static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
    799{
    800	u32 ctrl;
    801	u32 status;
    802	u32 txcw = 0;
    803	u32 i;
    804	u32 signal = 0;
    805	s32 ret_val;
    806
    807	/* On adapters with a MAC newer than 82544, SWDP 1 will be
    808	 * set when the optics detect a signal. On older adapters, it will be
    809	 * cleared when there is a signal.  This applies to fiber media only.
    810	 * If we're on serdes media, adjust the output amplitude to value
    811	 * set in the EEPROM.
    812	 */
    813	ctrl = er32(CTRL);
    814	if (hw->media_type == e1000_media_type_fiber)
    815		signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
    816
    817	ret_val = e1000_adjust_serdes_amplitude(hw);
    818	if (ret_val)
    819		return ret_val;
    820
    821	/* Take the link out of reset */
    822	ctrl &= ~(E1000_CTRL_LRST);
    823
    824	/* Adjust VCO speed to improve BER performance */
    825	ret_val = e1000_set_vco_speed(hw);
    826	if (ret_val)
    827		return ret_val;
    828
    829	e1000_config_collision_dist(hw);
    830
    831	/* Check for a software override of the flow control settings, and setup
    832	 * the device accordingly.  If auto-negotiation is enabled, then
    833	 * software will have to set the "PAUSE" bits to the correct value in
    834	 * the Tranmsit Config Word Register (TXCW) and re-start
    835	 * auto-negotiation.  However, if auto-negotiation is disabled, then
    836	 * software will have to manually configure the two flow control enable
    837	 * bits in the CTRL register.
    838	 *
    839	 * The possible values of the "fc" parameter are:
    840	 *  0:  Flow control is completely disabled
    841	 *  1:  Rx flow control is enabled (we can receive pause frames, but
    842	 *      not send pause frames).
    843	 *  2:  Tx flow control is enabled (we can send pause frames but we do
    844	 *      not support receiving pause frames).
    845	 *  3:  Both Rx and TX flow control (symmetric) are enabled.
    846	 */
    847	switch (hw->fc) {
    848	case E1000_FC_NONE:
    849		/* Flow ctrl is completely disabled by a software over-ride */
    850		txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
    851		break;
    852	case E1000_FC_RX_PAUSE:
    853		/* Rx Flow control is enabled and Tx Flow control is disabled by
    854		 * a software over-ride. Since there really isn't a way to
    855		 * advertise that we are capable of Rx Pause ONLY, we will
    856		 * advertise that we support both symmetric and asymmetric Rx
    857		 * PAUSE. Later, we will disable the adapter's ability to send
    858		 * PAUSE frames.
    859		 */
    860		txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
    861		break;
    862	case E1000_FC_TX_PAUSE:
    863		/* Tx Flow control is enabled, and Rx Flow control is disabled,
    864		 * by a software over-ride.
    865		 */
    866		txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
    867		break;
    868	case E1000_FC_FULL:
    869		/* Flow control (both Rx and Tx) is enabled by a software
    870		 * over-ride.
    871		 */
    872		txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
    873		break;
    874	default:
    875		e_dbg("Flow control param set incorrectly\n");
    876		return -E1000_ERR_CONFIG;
    877	}
    878
    879	/* Since auto-negotiation is enabled, take the link out of reset (the
    880	 * link will be in reset, because we previously reset the chip). This
    881	 * will restart auto-negotiation.  If auto-negotiation is successful
    882	 * then the link-up status bit will be set and the flow control enable
    883	 * bits (RFCE and TFCE) will be set according to their negotiated value.
    884	 */
    885	e_dbg("Auto-negotiation enabled\n");
    886
    887	ew32(TXCW, txcw);
    888	ew32(CTRL, ctrl);
    889	E1000_WRITE_FLUSH();
    890
    891	hw->txcw = txcw;
    892	msleep(1);
    893
    894	/* If we have a signal (the cable is plugged in) then poll for a
    895	 * "Link-Up" indication in the Device Status Register.  Time-out if a
    896	 * link isn't seen in 500 milliseconds seconds (Auto-negotiation should
    897	 * complete in less than 500 milliseconds even if the other end is doing
    898	 * it in SW). For internal serdes, we just assume a signal is present,
    899	 * then poll.
    900	 */
    901	if (hw->media_type == e1000_media_type_internal_serdes ||
    902	    (er32(CTRL) & E1000_CTRL_SWDPIN1) == signal) {
    903		e_dbg("Looking for Link\n");
    904		for (i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
    905			msleep(10);
    906			status = er32(STATUS);
    907			if (status & E1000_STATUS_LU)
    908				break;
    909		}
    910		if (i == (LINK_UP_TIMEOUT / 10)) {
    911			e_dbg("Never got a valid link from auto-neg!!!\n");
    912			hw->autoneg_failed = 1;
    913			/* AutoNeg failed to achieve a link, so we'll call
    914			 * e1000_check_for_link. This routine will force the
    915			 * link up if we detect a signal. This will allow us to
    916			 * communicate with non-autonegotiating link partners.
    917			 */
    918			ret_val = e1000_check_for_link(hw);
    919			if (ret_val) {
    920				e_dbg("Error while checking for link\n");
    921				return ret_val;
    922			}
    923			hw->autoneg_failed = 0;
    924		} else {
    925			hw->autoneg_failed = 0;
    926			e_dbg("Valid Link Found\n");
    927		}
    928	} else {
    929		e_dbg("No Signal Detected\n");
    930	}
    931	return E1000_SUCCESS;
    932}
    933
    934/**
    935 * e1000_copper_link_rtl_setup - Copper link setup for e1000_phy_rtl series.
    936 * @hw: Struct containing variables accessed by shared code
    937 *
    938 * Commits changes to PHY configuration by calling e1000_phy_reset().
    939 */
    940static s32 e1000_copper_link_rtl_setup(struct e1000_hw *hw)
    941{
    942	s32 ret_val;
    943
    944	/* SW reset the PHY so all changes take effect */
    945	ret_val = e1000_phy_reset(hw);
    946	if (ret_val) {
    947		e_dbg("Error Resetting the PHY\n");
    948		return ret_val;
    949	}
    950
    951	return E1000_SUCCESS;
    952}
    953
    954static s32 gbe_dhg_phy_setup(struct e1000_hw *hw)
    955{
    956	s32 ret_val;
    957	u32 ctrl_aux;
    958
    959	switch (hw->phy_type) {
    960	case e1000_phy_8211:
    961		ret_val = e1000_copper_link_rtl_setup(hw);
    962		if (ret_val) {
    963			e_dbg("e1000_copper_link_rtl_setup failed!\n");
    964			return ret_val;
    965		}
    966		break;
    967	case e1000_phy_8201:
    968		/* Set RMII mode */
    969		ctrl_aux = er32(CTL_AUX);
    970		ctrl_aux |= E1000_CTL_AUX_RMII;
    971		ew32(CTL_AUX, ctrl_aux);
    972		E1000_WRITE_FLUSH();
    973
    974		/* Disable the J/K bits required for receive */
    975		ctrl_aux = er32(CTL_AUX);
    976		ctrl_aux |= 0x4;
    977		ctrl_aux &= ~0x2;
    978		ew32(CTL_AUX, ctrl_aux);
    979		E1000_WRITE_FLUSH();
    980		ret_val = e1000_copper_link_rtl_setup(hw);
    981
    982		if (ret_val) {
    983			e_dbg("e1000_copper_link_rtl_setup failed!\n");
    984			return ret_val;
    985		}
    986		break;
    987	default:
    988		e_dbg("Error Resetting the PHY\n");
    989		return E1000_ERR_PHY_TYPE;
    990	}
    991
    992	return E1000_SUCCESS;
    993}
    994
    995/**
    996 * e1000_copper_link_preconfig - early configuration for copper
    997 * @hw: Struct containing variables accessed by shared code
    998 *
    999 * Make sure we have a valid PHY and change PHY mode before link setup.
   1000 */
   1001static s32 e1000_copper_link_preconfig(struct e1000_hw *hw)
   1002{
   1003	u32 ctrl;
   1004	s32 ret_val;
   1005	u16 phy_data;
   1006
   1007	ctrl = er32(CTRL);
   1008	/* With 82543, we need to force speed and duplex on the MAC equal to
   1009	 * what the PHY speed and duplex configuration is. In addition, we need
   1010	 * to perform a hardware reset on the PHY to take it out of reset.
   1011	 */
   1012	if (hw->mac_type > e1000_82543) {
   1013		ctrl |= E1000_CTRL_SLU;
   1014		ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
   1015		ew32(CTRL, ctrl);
   1016	} else {
   1017		ctrl |=
   1018		    (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_SLU);
   1019		ew32(CTRL, ctrl);
   1020		ret_val = e1000_phy_hw_reset(hw);
   1021		if (ret_val)
   1022			return ret_val;
   1023	}
   1024
   1025	/* Make sure we have a valid PHY */
   1026	ret_val = e1000_detect_gig_phy(hw);
   1027	if (ret_val) {
   1028		e_dbg("Error, did not detect valid phy.\n");
   1029		return ret_val;
   1030	}
   1031	e_dbg("Phy ID = %x\n", hw->phy_id);
   1032
   1033	/* Set PHY to class A mode (if necessary) */
   1034	ret_val = e1000_set_phy_mode(hw);
   1035	if (ret_val)
   1036		return ret_val;
   1037
   1038	if ((hw->mac_type == e1000_82545_rev_3) ||
   1039	    (hw->mac_type == e1000_82546_rev_3)) {
   1040		ret_val =
   1041		    e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1042		phy_data |= 0x00000008;
   1043		ret_val =
   1044		    e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
   1045	}
   1046
   1047	if (hw->mac_type <= e1000_82543 ||
   1048	    hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 ||
   1049	    hw->mac_type == e1000_82541_rev_2 ||
   1050	    hw->mac_type == e1000_82547_rev_2)
   1051		hw->phy_reset_disable = false;
   1052
   1053	return E1000_SUCCESS;
   1054}
   1055
   1056/**
   1057 * e1000_copper_link_igp_setup - Copper link setup for e1000_phy_igp series.
   1058 * @hw: Struct containing variables accessed by shared code
   1059 */
   1060static s32 e1000_copper_link_igp_setup(struct e1000_hw *hw)
   1061{
   1062	u32 led_ctrl;
   1063	s32 ret_val;
   1064	u16 phy_data;
   1065
   1066	if (hw->phy_reset_disable)
   1067		return E1000_SUCCESS;
   1068
   1069	ret_val = e1000_phy_reset(hw);
   1070	if (ret_val) {
   1071		e_dbg("Error Resetting the PHY\n");
   1072		return ret_val;
   1073	}
   1074
   1075	/* Wait 15ms for MAC to configure PHY from eeprom settings */
   1076	msleep(15);
   1077	/* Configure activity LED after PHY reset */
   1078	led_ctrl = er32(LEDCTL);
   1079	led_ctrl &= IGP_ACTIVITY_LED_MASK;
   1080	led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
   1081	ew32(LEDCTL, led_ctrl);
   1082
   1083	/* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */
   1084	if (hw->phy_type == e1000_phy_igp) {
   1085		/* disable lplu d3 during driver init */
   1086		ret_val = e1000_set_d3_lplu_state(hw, false);
   1087		if (ret_val) {
   1088			e_dbg("Error Disabling LPLU D3\n");
   1089			return ret_val;
   1090		}
   1091	}
   1092
   1093	/* Configure mdi-mdix settings */
   1094	ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
   1095	if (ret_val)
   1096		return ret_val;
   1097
   1098	if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
   1099		hw->dsp_config_state = e1000_dsp_config_disabled;
   1100		/* Force MDI for earlier revs of the IGP PHY */
   1101		phy_data &=
   1102		    ~(IGP01E1000_PSCR_AUTO_MDIX |
   1103		      IGP01E1000_PSCR_FORCE_MDI_MDIX);
   1104		hw->mdix = 1;
   1105
   1106	} else {
   1107		hw->dsp_config_state = e1000_dsp_config_enabled;
   1108		phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
   1109
   1110		switch (hw->mdix) {
   1111		case 1:
   1112			phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
   1113			break;
   1114		case 2:
   1115			phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
   1116			break;
   1117		case 0:
   1118		default:
   1119			phy_data |= IGP01E1000_PSCR_AUTO_MDIX;
   1120			break;
   1121		}
   1122	}
   1123	ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
   1124	if (ret_val)
   1125		return ret_val;
   1126
   1127	/* set auto-master slave resolution settings */
   1128	if (hw->autoneg) {
   1129		e1000_ms_type phy_ms_setting = hw->master_slave;
   1130
   1131		if (hw->ffe_config_state == e1000_ffe_config_active)
   1132			hw->ffe_config_state = e1000_ffe_config_enabled;
   1133
   1134		if (hw->dsp_config_state == e1000_dsp_config_activated)
   1135			hw->dsp_config_state = e1000_dsp_config_enabled;
   1136
   1137		/* when autonegotiation advertisement is only 1000Mbps then we
   1138		 * should disable SmartSpeed and enable Auto MasterSlave
   1139		 * resolution as hardware default.
   1140		 */
   1141		if (hw->autoneg_advertised == ADVERTISE_1000_FULL) {
   1142			/* Disable SmartSpeed */
   1143			ret_val =
   1144			    e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   1145					       &phy_data);
   1146			if (ret_val)
   1147				return ret_val;
   1148			phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
   1149			ret_val =
   1150			    e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   1151						phy_data);
   1152			if (ret_val)
   1153				return ret_val;
   1154			/* Set auto Master/Slave resolution process */
   1155			ret_val =
   1156			    e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
   1157			if (ret_val)
   1158				return ret_val;
   1159			phy_data &= ~CR_1000T_MS_ENABLE;
   1160			ret_val =
   1161			    e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
   1162			if (ret_val)
   1163				return ret_val;
   1164		}
   1165
   1166		ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
   1167		if (ret_val)
   1168			return ret_val;
   1169
   1170		/* load defaults for future use */
   1171		hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ?
   1172		    ((phy_data & CR_1000T_MS_VALUE) ?
   1173		     e1000_ms_force_master :
   1174		     e1000_ms_force_slave) : e1000_ms_auto;
   1175
   1176		switch (phy_ms_setting) {
   1177		case e1000_ms_force_master:
   1178			phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
   1179			break;
   1180		case e1000_ms_force_slave:
   1181			phy_data |= CR_1000T_MS_ENABLE;
   1182			phy_data &= ~(CR_1000T_MS_VALUE);
   1183			break;
   1184		case e1000_ms_auto:
   1185			phy_data &= ~CR_1000T_MS_ENABLE;
   1186			break;
   1187		default:
   1188			break;
   1189		}
   1190		ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
   1191		if (ret_val)
   1192			return ret_val;
   1193	}
   1194
   1195	return E1000_SUCCESS;
   1196}
   1197
   1198/**
   1199 * e1000_copper_link_mgp_setup - Copper link setup for e1000_phy_m88 series.
   1200 * @hw: Struct containing variables accessed by shared code
   1201 */
   1202static s32 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
   1203{
   1204	s32 ret_val;
   1205	u16 phy_data;
   1206
   1207	if (hw->phy_reset_disable)
   1208		return E1000_SUCCESS;
   1209
   1210	/* Enable CRS on TX. This must be set for half-duplex operation. */
   1211	ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1212	if (ret_val)
   1213		return ret_val;
   1214
   1215	phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
   1216
   1217	/* Options:
   1218	 *   MDI/MDI-X = 0 (default)
   1219	 *   0 - Auto for all speeds
   1220	 *   1 - MDI mode
   1221	 *   2 - MDI-X mode
   1222	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
   1223	 */
   1224	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
   1225
   1226	switch (hw->mdix) {
   1227	case 1:
   1228		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
   1229		break;
   1230	case 2:
   1231		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
   1232		break;
   1233	case 3:
   1234		phy_data |= M88E1000_PSCR_AUTO_X_1000T;
   1235		break;
   1236	case 0:
   1237	default:
   1238		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
   1239		break;
   1240	}
   1241
   1242	/* Options:
   1243	 *   disable_polarity_correction = 0 (default)
   1244	 *       Automatic Correction for Reversed Cable Polarity
   1245	 *   0 - Disabled
   1246	 *   1 - Enabled
   1247	 */
   1248	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
   1249	if (hw->disable_polarity_correction == 1)
   1250		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
   1251	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
   1252	if (ret_val)
   1253		return ret_val;
   1254
   1255	if (hw->phy_revision < M88E1011_I_REV_4) {
   1256		/* Force TX_CLK in the Extended PHY Specific Control Register
   1257		 * to 25MHz clock.
   1258		 */
   1259		ret_val =
   1260		    e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
   1261				       &phy_data);
   1262		if (ret_val)
   1263			return ret_val;
   1264
   1265		phy_data |= M88E1000_EPSCR_TX_CLK_25;
   1266
   1267		if ((hw->phy_revision == E1000_REVISION_2) &&
   1268		    (hw->phy_id == M88E1111_I_PHY_ID)) {
   1269			/* Vidalia Phy, set the downshift counter to 5x */
   1270			phy_data &= ~(M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK);
   1271			phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
   1272			ret_val = e1000_write_phy_reg(hw,
   1273						      M88E1000_EXT_PHY_SPEC_CTRL,
   1274						      phy_data);
   1275			if (ret_val)
   1276				return ret_val;
   1277		} else {
   1278			/* Configure Master and Slave downshift values */
   1279			phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
   1280				      M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
   1281			phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
   1282				     M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
   1283			ret_val = e1000_write_phy_reg(hw,
   1284						      M88E1000_EXT_PHY_SPEC_CTRL,
   1285						      phy_data);
   1286			if (ret_val)
   1287				return ret_val;
   1288		}
   1289	}
   1290
   1291	/* SW Reset the PHY so all changes take effect */
   1292	ret_val = e1000_phy_reset(hw);
   1293	if (ret_val) {
   1294		e_dbg("Error Resetting the PHY\n");
   1295		return ret_val;
   1296	}
   1297
   1298	return E1000_SUCCESS;
   1299}
   1300
   1301/**
   1302 * e1000_copper_link_autoneg - setup auto-neg
   1303 * @hw: Struct containing variables accessed by shared code
   1304 *
   1305 * Setup auto-negotiation and flow control advertisements,
   1306 * and then perform auto-negotiation.
   1307 */
   1308static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
   1309{
   1310	s32 ret_val;
   1311	u16 phy_data;
   1312
   1313	/* Perform some bounds checking on the hw->autoneg_advertised
   1314	 * parameter.  If this variable is zero, then set it to the default.
   1315	 */
   1316	hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT;
   1317
   1318	/* If autoneg_advertised is zero, we assume it was not defaulted
   1319	 * by the calling code so we set to advertise full capability.
   1320	 */
   1321	if (hw->autoneg_advertised == 0)
   1322		hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
   1323
   1324	/* IFE/RTL8201N PHY only supports 10/100 */
   1325	if (hw->phy_type == e1000_phy_8201)
   1326		hw->autoneg_advertised &= AUTONEG_ADVERTISE_10_100_ALL;
   1327
   1328	e_dbg("Reconfiguring auto-neg advertisement params\n");
   1329	ret_val = e1000_phy_setup_autoneg(hw);
   1330	if (ret_val) {
   1331		e_dbg("Error Setting up Auto-Negotiation\n");
   1332		return ret_val;
   1333	}
   1334	e_dbg("Restarting Auto-Neg\n");
   1335
   1336	/* Restart auto-negotiation by setting the Auto Neg Enable bit and
   1337	 * the Auto Neg Restart bit in the PHY control register.
   1338	 */
   1339	ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
   1340	if (ret_val)
   1341		return ret_val;
   1342
   1343	phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
   1344	ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
   1345	if (ret_val)
   1346		return ret_val;
   1347
   1348	/* Does the user want to wait for Auto-Neg to complete here, or
   1349	 * check at a later time (for example, callback routine).
   1350	 */
   1351	if (hw->wait_autoneg_complete) {
   1352		ret_val = e1000_wait_autoneg(hw);
   1353		if (ret_val) {
   1354			e_dbg
   1355			    ("Error while waiting for autoneg to complete\n");
   1356			return ret_val;
   1357		}
   1358	}
   1359
   1360	hw->get_link_status = true;
   1361
   1362	return E1000_SUCCESS;
   1363}
   1364
   1365/**
   1366 * e1000_copper_link_postconfig - post link setup
   1367 * @hw: Struct containing variables accessed by shared code
   1368 *
   1369 * Config the MAC and the PHY after link is up.
   1370 *   1) Set up the MAC to the current PHY speed/duplex
   1371 *      if we are on 82543.  If we
   1372 *      are on newer silicon, we only need to configure
   1373 *      collision distance in the Transmit Control Register.
   1374 *   2) Set up flow control on the MAC to that established with
   1375 *      the link partner.
   1376 *   3) Config DSP to improve Gigabit link quality for some PHY revisions.
   1377 */
   1378static s32 e1000_copper_link_postconfig(struct e1000_hw *hw)
   1379{
   1380	s32 ret_val;
   1381
   1382	if ((hw->mac_type >= e1000_82544) && (hw->mac_type != e1000_ce4100)) {
   1383		e1000_config_collision_dist(hw);
   1384	} else {
   1385		ret_val = e1000_config_mac_to_phy(hw);
   1386		if (ret_val) {
   1387			e_dbg("Error configuring MAC to PHY settings\n");
   1388			return ret_val;
   1389		}
   1390	}
   1391	ret_val = e1000_config_fc_after_link_up(hw);
   1392	if (ret_val) {
   1393		e_dbg("Error Configuring Flow Control\n");
   1394		return ret_val;
   1395	}
   1396
   1397	/* Config DSP to improve Giga link quality */
   1398	if (hw->phy_type == e1000_phy_igp) {
   1399		ret_val = e1000_config_dsp_after_link_change(hw, true);
   1400		if (ret_val) {
   1401			e_dbg("Error Configuring DSP after link up\n");
   1402			return ret_val;
   1403		}
   1404	}
   1405
   1406	return E1000_SUCCESS;
   1407}
   1408
   1409/**
   1410 * e1000_setup_copper_link - phy/speed/duplex setting
   1411 * @hw: Struct containing variables accessed by shared code
   1412 *
   1413 * Detects which PHY is present and sets up the speed and duplex
   1414 */
   1415static s32 e1000_setup_copper_link(struct e1000_hw *hw)
   1416{
   1417	s32 ret_val;
   1418	u16 i;
   1419	u16 phy_data;
   1420
   1421	/* Check if it is a valid PHY and set PHY mode if necessary. */
   1422	ret_val = e1000_copper_link_preconfig(hw);
   1423	if (ret_val)
   1424		return ret_val;
   1425
   1426	if (hw->phy_type == e1000_phy_igp) {
   1427		ret_val = e1000_copper_link_igp_setup(hw);
   1428		if (ret_val)
   1429			return ret_val;
   1430	} else if (hw->phy_type == e1000_phy_m88) {
   1431		ret_val = e1000_copper_link_mgp_setup(hw);
   1432		if (ret_val)
   1433			return ret_val;
   1434	} else {
   1435		ret_val = gbe_dhg_phy_setup(hw);
   1436		if (ret_val) {
   1437			e_dbg("gbe_dhg_phy_setup failed!\n");
   1438			return ret_val;
   1439		}
   1440	}
   1441
   1442	if (hw->autoneg) {
   1443		/* Setup autoneg and flow control advertisement
   1444		 * and perform autonegotiation
   1445		 */
   1446		ret_val = e1000_copper_link_autoneg(hw);
   1447		if (ret_val)
   1448			return ret_val;
   1449	} else {
   1450		/* PHY will be set to 10H, 10F, 100H,or 100F
   1451		 * depending on value from forced_speed_duplex.
   1452		 */
   1453		e_dbg("Forcing speed and duplex\n");
   1454		ret_val = e1000_phy_force_speed_duplex(hw);
   1455		if (ret_val) {
   1456			e_dbg("Error Forcing Speed and Duplex\n");
   1457			return ret_val;
   1458		}
   1459	}
   1460
   1461	/* Check link status. Wait up to 100 microseconds for link to become
   1462	 * valid.
   1463	 */
   1464	for (i = 0; i < 10; i++) {
   1465		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   1466		if (ret_val)
   1467			return ret_val;
   1468		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   1469		if (ret_val)
   1470			return ret_val;
   1471
   1472		if (phy_data & MII_SR_LINK_STATUS) {
   1473			/* Config the MAC and PHY after link is up */
   1474			ret_val = e1000_copper_link_postconfig(hw);
   1475			if (ret_val)
   1476				return ret_val;
   1477
   1478			e_dbg("Valid link established!!!\n");
   1479			return E1000_SUCCESS;
   1480		}
   1481		udelay(10);
   1482	}
   1483
   1484	e_dbg("Unable to establish link!!!\n");
   1485	return E1000_SUCCESS;
   1486}
   1487
   1488/**
   1489 * e1000_phy_setup_autoneg - phy settings
   1490 * @hw: Struct containing variables accessed by shared code
   1491 *
   1492 * Configures PHY autoneg and flow control advertisement settings
   1493 */
   1494s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
   1495{
   1496	s32 ret_val;
   1497	u16 mii_autoneg_adv_reg;
   1498	u16 mii_1000t_ctrl_reg;
   1499
   1500	/* Read the MII Auto-Neg Advertisement Register (Address 4). */
   1501	ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
   1502	if (ret_val)
   1503		return ret_val;
   1504
   1505	/* Read the MII 1000Base-T Control Register (Address 9). */
   1506	ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
   1507	if (ret_val)
   1508		return ret_val;
   1509	else if (hw->phy_type == e1000_phy_8201)
   1510		mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
   1511
   1512	/* Need to parse both autoneg_advertised and fc and set up
   1513	 * the appropriate PHY registers.  First we will parse for
   1514	 * autoneg_advertised software override.  Since we can advertise
   1515	 * a plethora of combinations, we need to check each bit
   1516	 * individually.
   1517	 */
   1518
   1519	/* First we clear all the 10/100 mb speed bits in the Auto-Neg
   1520	 * Advertisement Register (Address 4) and the 1000 mb speed bits in
   1521	 * the  1000Base-T Control Register (Address 9).
   1522	 */
   1523	mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
   1524	mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
   1525
   1526	e_dbg("autoneg_advertised %x\n", hw->autoneg_advertised);
   1527
   1528	/* Do we want to advertise 10 Mb Half Duplex? */
   1529	if (hw->autoneg_advertised & ADVERTISE_10_HALF) {
   1530		e_dbg("Advertise 10mb Half duplex\n");
   1531		mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
   1532	}
   1533
   1534	/* Do we want to advertise 10 Mb Full Duplex? */
   1535	if (hw->autoneg_advertised & ADVERTISE_10_FULL) {
   1536		e_dbg("Advertise 10mb Full duplex\n");
   1537		mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
   1538	}
   1539
   1540	/* Do we want to advertise 100 Mb Half Duplex? */
   1541	if (hw->autoneg_advertised & ADVERTISE_100_HALF) {
   1542		e_dbg("Advertise 100mb Half duplex\n");
   1543		mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
   1544	}
   1545
   1546	/* Do we want to advertise 100 Mb Full Duplex? */
   1547	if (hw->autoneg_advertised & ADVERTISE_100_FULL) {
   1548		e_dbg("Advertise 100mb Full duplex\n");
   1549		mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
   1550	}
   1551
   1552	/* We do not allow the Phy to advertise 1000 Mb Half Duplex */
   1553	if (hw->autoneg_advertised & ADVERTISE_1000_HALF) {
   1554		e_dbg
   1555		    ("Advertise 1000mb Half duplex requested, request denied!\n");
   1556	}
   1557
   1558	/* Do we want to advertise 1000 Mb Full Duplex? */
   1559	if (hw->autoneg_advertised & ADVERTISE_1000_FULL) {
   1560		e_dbg("Advertise 1000mb Full duplex\n");
   1561		mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
   1562	}
   1563
   1564	/* Check for a software override of the flow control settings, and
   1565	 * setup the PHY advertisement registers accordingly.  If
   1566	 * auto-negotiation is enabled, then software will have to set the
   1567	 * "PAUSE" bits to the correct value in the Auto-Negotiation
   1568	 * Advertisement Register (PHY_AUTONEG_ADV) and re-start
   1569	 * auto-negotiation.
   1570	 *
   1571	 * The possible values of the "fc" parameter are:
   1572	 *      0:  Flow control is completely disabled
   1573	 *      1:  Rx flow control is enabled (we can receive pause frames
   1574	 *          but not send pause frames).
   1575	 *      2:  Tx flow control is enabled (we can send pause frames
   1576	 *          but we do not support receiving pause frames).
   1577	 *      3:  Both Rx and TX flow control (symmetric) are enabled.
   1578	 *  other:  No software override.  The flow control configuration
   1579	 *          in the EEPROM is used.
   1580	 */
   1581	switch (hw->fc) {
   1582	case E1000_FC_NONE:	/* 0 */
   1583		/* Flow control (RX & TX) is completely disabled by a
   1584		 * software over-ride.
   1585		 */
   1586		mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1587		break;
   1588	case E1000_FC_RX_PAUSE:	/* 1 */
   1589		/* RX Flow control is enabled, and TX Flow control is
   1590		 * disabled, by a software over-ride.
   1591		 */
   1592		/* Since there really isn't a way to advertise that we are
   1593		 * capable of RX Pause ONLY, we will advertise that we
   1594		 * support both symmetric and asymmetric RX PAUSE.  Later
   1595		 * (in e1000_config_fc_after_link_up) we will disable the
   1596		 * hw's ability to send PAUSE frames.
   1597		 */
   1598		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1599		break;
   1600	case E1000_FC_TX_PAUSE:	/* 2 */
   1601		/* TX Flow control is enabled, and RX Flow control is
   1602		 * disabled, by a software over-ride.
   1603		 */
   1604		mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
   1605		mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
   1606		break;
   1607	case E1000_FC_FULL:	/* 3 */
   1608		/* Flow control (both RX and TX) is enabled by a software
   1609		 * over-ride.
   1610		 */
   1611		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
   1612		break;
   1613	default:
   1614		e_dbg("Flow control param set incorrectly\n");
   1615		return -E1000_ERR_CONFIG;
   1616	}
   1617
   1618	ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
   1619	if (ret_val)
   1620		return ret_val;
   1621
   1622	e_dbg("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
   1623
   1624	if (hw->phy_type == e1000_phy_8201) {
   1625		mii_1000t_ctrl_reg = 0;
   1626	} else {
   1627		ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL,
   1628					      mii_1000t_ctrl_reg);
   1629		if (ret_val)
   1630			return ret_val;
   1631	}
   1632
   1633	return E1000_SUCCESS;
   1634}
   1635
   1636/**
   1637 * e1000_phy_force_speed_duplex - force link settings
   1638 * @hw: Struct containing variables accessed by shared code
   1639 *
   1640 * Force PHY speed and duplex settings to hw->forced_speed_duplex
   1641 */
   1642static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
   1643{
   1644	u32 ctrl;
   1645	s32 ret_val;
   1646	u16 mii_ctrl_reg;
   1647	u16 mii_status_reg;
   1648	u16 phy_data;
   1649	u16 i;
   1650
   1651	/* Turn off Flow control if we are forcing speed and duplex. */
   1652	hw->fc = E1000_FC_NONE;
   1653
   1654	e_dbg("hw->fc = %d\n", hw->fc);
   1655
   1656	/* Read the Device Control Register. */
   1657	ctrl = er32(CTRL);
   1658
   1659	/* Set the bits to Force Speed and Duplex in the Device Ctrl Reg. */
   1660	ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
   1661	ctrl &= ~(DEVICE_SPEED_MASK);
   1662
   1663	/* Clear the Auto Speed Detect Enable bit. */
   1664	ctrl &= ~E1000_CTRL_ASDE;
   1665
   1666	/* Read the MII Control Register. */
   1667	ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg);
   1668	if (ret_val)
   1669		return ret_val;
   1670
   1671	/* We need to disable autoneg in order to force link and duplex. */
   1672
   1673	mii_ctrl_reg &= ~MII_CR_AUTO_NEG_EN;
   1674
   1675	/* Are we forcing Full or Half Duplex? */
   1676	if (hw->forced_speed_duplex == e1000_100_full ||
   1677	    hw->forced_speed_duplex == e1000_10_full) {
   1678		/* We want to force full duplex so we SET the full duplex bits
   1679		 * in the Device and MII Control Registers.
   1680		 */
   1681		ctrl |= E1000_CTRL_FD;
   1682		mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
   1683		e_dbg("Full Duplex\n");
   1684	} else {
   1685		/* We want to force half duplex so we CLEAR the full duplex bits
   1686		 * in the Device and MII Control Registers.
   1687		 */
   1688		ctrl &= ~E1000_CTRL_FD;
   1689		mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
   1690		e_dbg("Half Duplex\n");
   1691	}
   1692
   1693	/* Are we forcing 100Mbps??? */
   1694	if (hw->forced_speed_duplex == e1000_100_full ||
   1695	    hw->forced_speed_duplex == e1000_100_half) {
   1696		/* Set the 100Mb bit and turn off the 1000Mb and 10Mb bits. */
   1697		ctrl |= E1000_CTRL_SPD_100;
   1698		mii_ctrl_reg |= MII_CR_SPEED_100;
   1699		mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
   1700		e_dbg("Forcing 100mb ");
   1701	} else {
   1702		/* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
   1703		ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
   1704		mii_ctrl_reg |= MII_CR_SPEED_10;
   1705		mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
   1706		e_dbg("Forcing 10mb ");
   1707	}
   1708
   1709	e1000_config_collision_dist(hw);
   1710
   1711	/* Write the configured values back to the Device Control Reg. */
   1712	ew32(CTRL, ctrl);
   1713
   1714	if (hw->phy_type == e1000_phy_m88) {
   1715		ret_val =
   1716		    e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1717		if (ret_val)
   1718			return ret_val;
   1719
   1720		/* Clear Auto-Crossover to force MDI manually. M88E1000 requires
   1721		 * MDI forced whenever speed are duplex are forced.
   1722		 */
   1723		phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
   1724		ret_val =
   1725		    e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
   1726		if (ret_val)
   1727			return ret_val;
   1728
   1729		e_dbg("M88E1000 PSCR: %x\n", phy_data);
   1730
   1731		/* Need to reset the PHY or these changes will be ignored */
   1732		mii_ctrl_reg |= MII_CR_RESET;
   1733
   1734		/* Disable MDI-X support for 10/100 */
   1735	} else {
   1736		/* Clear Auto-Crossover to force MDI manually.  IGP requires MDI
   1737		 * forced whenever speed or duplex are forced.
   1738		 */
   1739		ret_val =
   1740		    e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
   1741		if (ret_val)
   1742			return ret_val;
   1743
   1744		phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
   1745		phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
   1746
   1747		ret_val =
   1748		    e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
   1749		if (ret_val)
   1750			return ret_val;
   1751	}
   1752
   1753	/* Write back the modified PHY MII control register. */
   1754	ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg);
   1755	if (ret_val)
   1756		return ret_val;
   1757
   1758	udelay(1);
   1759
   1760	/* The wait_autoneg_complete flag may be a little misleading here.
   1761	 * Since we are forcing speed and duplex, Auto-Neg is not enabled.
   1762	 * But we do want to delay for a period while forcing only so we
   1763	 * don't generate false No Link messages.  So we will wait here
   1764	 * only if the user has set wait_autoneg_complete to 1, which is
   1765	 * the default.
   1766	 */
   1767	if (hw->wait_autoneg_complete) {
   1768		/* We will wait for autoneg to complete. */
   1769		e_dbg("Waiting for forced speed/duplex link.\n");
   1770		mii_status_reg = 0;
   1771
   1772		/* Wait for autoneg to complete or 4.5 seconds to expire */
   1773		for (i = PHY_FORCE_TIME; i > 0; i--) {
   1774			/* Read the MII Status Register and wait for Auto-Neg
   1775			 * Complete bit to be set.
   1776			 */
   1777			ret_val =
   1778			    e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   1779			if (ret_val)
   1780				return ret_val;
   1781
   1782			ret_val =
   1783			    e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   1784			if (ret_val)
   1785				return ret_val;
   1786
   1787			if (mii_status_reg & MII_SR_LINK_STATUS)
   1788				break;
   1789			msleep(100);
   1790		}
   1791		if ((i == 0) && (hw->phy_type == e1000_phy_m88)) {
   1792			/* We didn't get link.  Reset the DSP and wait again
   1793			 * for link.
   1794			 */
   1795			ret_val = e1000_phy_reset_dsp(hw);
   1796			if (ret_val) {
   1797				e_dbg("Error Resetting PHY DSP\n");
   1798				return ret_val;
   1799			}
   1800		}
   1801		/* This loop will early-out if the link condition has been
   1802		 * met
   1803		 */
   1804		for (i = PHY_FORCE_TIME; i > 0; i--) {
   1805			if (mii_status_reg & MII_SR_LINK_STATUS)
   1806				break;
   1807			msleep(100);
   1808			/* Read the MII Status Register and wait for Auto-Neg
   1809			 * Complete bit to be set.
   1810			 */
   1811			ret_val =
   1812			    e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   1813			if (ret_val)
   1814				return ret_val;
   1815
   1816			ret_val =
   1817			    e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   1818			if (ret_val)
   1819				return ret_val;
   1820		}
   1821	}
   1822
   1823	if (hw->phy_type == e1000_phy_m88) {
   1824		/* Because we reset the PHY above, we need to re-force TX_CLK in
   1825		 * the Extended PHY Specific Control Register to 25MHz clock.
   1826		 * This value defaults back to a 2.5MHz clock when the PHY is
   1827		 * reset.
   1828		 */
   1829		ret_val =
   1830		    e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
   1831				       &phy_data);
   1832		if (ret_val)
   1833			return ret_val;
   1834
   1835		phy_data |= M88E1000_EPSCR_TX_CLK_25;
   1836		ret_val =
   1837		    e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
   1838					phy_data);
   1839		if (ret_val)
   1840			return ret_val;
   1841
   1842		/* In addition, because of the s/w reset above, we need to
   1843		 * enable CRS on Tx.  This must be set for both full and half
   1844		 * duplex operation.
   1845		 */
   1846		ret_val =
   1847		    e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   1848		if (ret_val)
   1849			return ret_val;
   1850
   1851		phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
   1852		ret_val =
   1853		    e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
   1854		if (ret_val)
   1855			return ret_val;
   1856
   1857		if ((hw->mac_type == e1000_82544 ||
   1858		     hw->mac_type == e1000_82543) &&
   1859		    (!hw->autoneg) &&
   1860		    (hw->forced_speed_duplex == e1000_10_full ||
   1861		     hw->forced_speed_duplex == e1000_10_half)) {
   1862			ret_val = e1000_polarity_reversal_workaround(hw);
   1863			if (ret_val)
   1864				return ret_val;
   1865		}
   1866	}
   1867	return E1000_SUCCESS;
   1868}
   1869
   1870/**
   1871 * e1000_config_collision_dist - set collision distance register
   1872 * @hw: Struct containing variables accessed by shared code
   1873 *
   1874 * Sets the collision distance in the Transmit Control register.
   1875 * Link should have been established previously. Reads the speed and duplex
   1876 * information from the Device Status register.
   1877 */
   1878void e1000_config_collision_dist(struct e1000_hw *hw)
   1879{
   1880	u32 tctl, coll_dist;
   1881
   1882	if (hw->mac_type < e1000_82543)
   1883		coll_dist = E1000_COLLISION_DISTANCE_82542;
   1884	else
   1885		coll_dist = E1000_COLLISION_DISTANCE;
   1886
   1887	tctl = er32(TCTL);
   1888
   1889	tctl &= ~E1000_TCTL_COLD;
   1890	tctl |= coll_dist << E1000_COLD_SHIFT;
   1891
   1892	ew32(TCTL, tctl);
   1893	E1000_WRITE_FLUSH();
   1894}
   1895
   1896/**
   1897 * e1000_config_mac_to_phy - sync phy and mac settings
   1898 * @hw: Struct containing variables accessed by shared code
   1899 *
   1900 * Sets MAC speed and duplex settings to reflect the those in the PHY
   1901 * The contents of the PHY register containing the needed information need to
   1902 * be passed in.
   1903 */
   1904static s32 e1000_config_mac_to_phy(struct e1000_hw *hw)
   1905{
   1906	u32 ctrl;
   1907	s32 ret_val;
   1908	u16 phy_data;
   1909
   1910	/* 82544 or newer MAC, Auto Speed Detection takes care of
   1911	 * MAC speed/duplex configuration.
   1912	 */
   1913	if ((hw->mac_type >= e1000_82544) && (hw->mac_type != e1000_ce4100))
   1914		return E1000_SUCCESS;
   1915
   1916	/* Read the Device Control Register and set the bits to Force Speed
   1917	 * and Duplex.
   1918	 */
   1919	ctrl = er32(CTRL);
   1920	ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
   1921	ctrl &= ~(E1000_CTRL_SPD_SEL | E1000_CTRL_ILOS);
   1922
   1923	switch (hw->phy_type) {
   1924	case e1000_phy_8201:
   1925		ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
   1926		if (ret_val)
   1927			return ret_val;
   1928
   1929		if (phy_data & RTL_PHY_CTRL_FD)
   1930			ctrl |= E1000_CTRL_FD;
   1931		else
   1932			ctrl &= ~E1000_CTRL_FD;
   1933
   1934		if (phy_data & RTL_PHY_CTRL_SPD_100)
   1935			ctrl |= E1000_CTRL_SPD_100;
   1936		else
   1937			ctrl |= E1000_CTRL_SPD_10;
   1938
   1939		e1000_config_collision_dist(hw);
   1940		break;
   1941	default:
   1942		/* Set up duplex in the Device Control and Transmit Control
   1943		 * registers depending on negotiated values.
   1944		 */
   1945		ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
   1946					     &phy_data);
   1947		if (ret_val)
   1948			return ret_val;
   1949
   1950		if (phy_data & M88E1000_PSSR_DPLX)
   1951			ctrl |= E1000_CTRL_FD;
   1952		else
   1953			ctrl &= ~E1000_CTRL_FD;
   1954
   1955		e1000_config_collision_dist(hw);
   1956
   1957		/* Set up speed in the Device Control register depending on
   1958		 * negotiated values.
   1959		 */
   1960		if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS)
   1961			ctrl |= E1000_CTRL_SPD_1000;
   1962		else if ((phy_data & M88E1000_PSSR_SPEED) ==
   1963			 M88E1000_PSSR_100MBS)
   1964			ctrl |= E1000_CTRL_SPD_100;
   1965	}
   1966
   1967	/* Write the configured values back to the Device Control Reg. */
   1968	ew32(CTRL, ctrl);
   1969	return E1000_SUCCESS;
   1970}
   1971
   1972/**
   1973 * e1000_force_mac_fc - force flow control settings
   1974 * @hw: Struct containing variables accessed by shared code
   1975 *
   1976 * Forces the MAC's flow control settings.
   1977 * Sets the TFCE and RFCE bits in the device control register to reflect
   1978 * the adapter settings. TFCE and RFCE need to be explicitly set by
   1979 * software when a Copper PHY is used because autonegotiation is managed
   1980 * by the PHY rather than the MAC. Software must also configure these
   1981 * bits when link is forced on a fiber connection.
   1982 */
   1983s32 e1000_force_mac_fc(struct e1000_hw *hw)
   1984{
   1985	u32 ctrl;
   1986
   1987	/* Get the current configuration of the Device Control Register */
   1988	ctrl = er32(CTRL);
   1989
   1990	/* Because we didn't get link via the internal auto-negotiation
   1991	 * mechanism (we either forced link or we got link via PHY
   1992	 * auto-neg), we have to manually enable/disable transmit an
   1993	 * receive flow control.
   1994	 *
   1995	 * The "Case" statement below enables/disable flow control
   1996	 * according to the "hw->fc" parameter.
   1997	 *
   1998	 * The possible values of the "fc" parameter are:
   1999	 *      0:  Flow control is completely disabled
   2000	 *      1:  Rx flow control is enabled (we can receive pause
   2001	 *          frames but not send pause frames).
   2002	 *      2:  Tx flow control is enabled (we can send pause frames
   2003	 *          frames but we do not receive pause frames).
   2004	 *      3:  Both Rx and TX flow control (symmetric) is enabled.
   2005	 *  other:  No other values should be possible at this point.
   2006	 */
   2007
   2008	switch (hw->fc) {
   2009	case E1000_FC_NONE:
   2010		ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
   2011		break;
   2012	case E1000_FC_RX_PAUSE:
   2013		ctrl &= (~E1000_CTRL_TFCE);
   2014		ctrl |= E1000_CTRL_RFCE;
   2015		break;
   2016	case E1000_FC_TX_PAUSE:
   2017		ctrl &= (~E1000_CTRL_RFCE);
   2018		ctrl |= E1000_CTRL_TFCE;
   2019		break;
   2020	case E1000_FC_FULL:
   2021		ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
   2022		break;
   2023	default:
   2024		e_dbg("Flow control param set incorrectly\n");
   2025		return -E1000_ERR_CONFIG;
   2026	}
   2027
   2028	/* Disable TX Flow Control for 82542 (rev 2.0) */
   2029	if (hw->mac_type == e1000_82542_rev2_0)
   2030		ctrl &= (~E1000_CTRL_TFCE);
   2031
   2032	ew32(CTRL, ctrl);
   2033	return E1000_SUCCESS;
   2034}
   2035
   2036/**
   2037 * e1000_config_fc_after_link_up - configure flow control after autoneg
   2038 * @hw: Struct containing variables accessed by shared code
   2039 *
   2040 * Configures flow control settings after link is established
   2041 * Should be called immediately after a valid link has been established.
   2042 * Forces MAC flow control settings if link was forced. When in MII/GMII mode
   2043 * and autonegotiation is enabled, the MAC flow control settings will be set
   2044 * based on the flow control negotiated by the PHY. In TBI mode, the TFCE
   2045 * and RFCE bits will be automatically set to the negotiated flow control mode.
   2046 */
   2047static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw)
   2048{
   2049	s32 ret_val;
   2050	u16 mii_status_reg;
   2051	u16 mii_nway_adv_reg;
   2052	u16 mii_nway_lp_ability_reg;
   2053	u16 speed;
   2054	u16 duplex;
   2055
   2056	/* Check for the case where we have fiber media and auto-neg failed
   2057	 * so we had to force link.  In this case, we need to force the
   2058	 * configuration of the MAC to match the "fc" parameter.
   2059	 */
   2060	if (((hw->media_type == e1000_media_type_fiber) &&
   2061	     (hw->autoneg_failed)) ||
   2062	    ((hw->media_type == e1000_media_type_internal_serdes) &&
   2063	     (hw->autoneg_failed)) ||
   2064	    ((hw->media_type == e1000_media_type_copper) &&
   2065	     (!hw->autoneg))) {
   2066		ret_val = e1000_force_mac_fc(hw);
   2067		if (ret_val) {
   2068			e_dbg("Error forcing flow control settings\n");
   2069			return ret_val;
   2070		}
   2071	}
   2072
   2073	/* Check for the case where we have copper media and auto-neg is
   2074	 * enabled.  In this case, we need to check and see if Auto-Neg
   2075	 * has completed, and if so, how the PHY and link partner has
   2076	 * flow control configured.
   2077	 */
   2078	if ((hw->media_type == e1000_media_type_copper) && hw->autoneg) {
   2079		/* Read the MII Status Register and check to see if AutoNeg
   2080		 * has completed.  We read this twice because this reg has
   2081		 * some "sticky" (latched) bits.
   2082		 */
   2083		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   2084		if (ret_val)
   2085			return ret_val;
   2086		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   2087		if (ret_val)
   2088			return ret_val;
   2089
   2090		if (mii_status_reg & MII_SR_AUTONEG_COMPLETE) {
   2091			/* The AutoNeg process has completed, so we now need to
   2092			 * read both the Auto Negotiation Advertisement Register
   2093			 * (Address 4) and the Auto_Negotiation Base Page
   2094			 * Ability Register (Address 5) to determine how flow
   2095			 * control was negotiated.
   2096			 */
   2097			ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV,
   2098						     &mii_nway_adv_reg);
   2099			if (ret_val)
   2100				return ret_val;
   2101			ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY,
   2102						     &mii_nway_lp_ability_reg);
   2103			if (ret_val)
   2104				return ret_val;
   2105
   2106			/* Two bits in the Auto Negotiation Advertisement
   2107			 * Register (Address 4) and two bits in the Auto
   2108			 * Negotiation Base Page Ability Register (Address 5)
   2109			 * determine flow control for both the PHY and the link
   2110			 * partner.  The following table, taken out of the IEEE
   2111			 * 802.3ab/D6.0 dated March 25, 1999, describes these
   2112			 * PAUSE resolution bits and how flow control is
   2113			 * determined based upon these settings.
   2114			 * NOTE:  DC = Don't Care
   2115			 *
   2116			 *   LOCAL DEVICE  |   LINK PARTNER
   2117			 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
   2118			 *-------|---------|-------|---------|------------------
   2119			 *   0   |    0    |  DC   |   DC    | E1000_FC_NONE
   2120			 *   0   |    1    |   0   |   DC    | E1000_FC_NONE
   2121			 *   0   |    1    |   1   |    0    | E1000_FC_NONE
   2122			 *   0   |    1    |   1   |    1    | E1000_FC_TX_PAUSE
   2123			 *   1   |    0    |   0   |   DC    | E1000_FC_NONE
   2124			 *   1   |   DC    |   1   |   DC    | E1000_FC_FULL
   2125			 *   1   |    1    |   0   |    0    | E1000_FC_NONE
   2126			 *   1   |    1    |   0   |    1    | E1000_FC_RX_PAUSE
   2127			 *
   2128			 */
   2129			/* Are both PAUSE bits set to 1?  If so, this implies
   2130			 * Symmetric Flow Control is enabled at both ends.  The
   2131			 * ASM_DIR bits are irrelevant per the spec.
   2132			 *
   2133			 * For Symmetric Flow Control:
   2134			 *
   2135			 *   LOCAL DEVICE  |   LINK PARTNER
   2136			 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
   2137			 *-------|---------|-------|---------|------------------
   2138			 *   1   |   DC    |   1   |   DC    | E1000_FC_FULL
   2139			 *
   2140			 */
   2141			if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
   2142			    (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
   2143				/* Now we need to check if the user selected Rx
   2144				 * ONLY of pause frames.  In this case, we had
   2145				 * to advertise FULL flow control because we
   2146				 * could not advertise Rx ONLY. Hence, we must
   2147				 * now check to see if we need to turn OFF the
   2148				 * TRANSMISSION of PAUSE frames.
   2149				 */
   2150				if (hw->original_fc == E1000_FC_FULL) {
   2151					hw->fc = E1000_FC_FULL;
   2152					e_dbg("Flow Control = FULL.\n");
   2153				} else {
   2154					hw->fc = E1000_FC_RX_PAUSE;
   2155					e_dbg
   2156					    ("Flow Control = RX PAUSE frames only.\n");
   2157				}
   2158			}
   2159			/* For receiving PAUSE frames ONLY.
   2160			 *
   2161			 *   LOCAL DEVICE  |   LINK PARTNER
   2162			 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
   2163			 *-------|---------|-------|---------|------------------
   2164			 *   0   |    1    |   1   |    1    | E1000_FC_TX_PAUSE
   2165			 *
   2166			 */
   2167			else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
   2168				 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
   2169				 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
   2170				 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
   2171				hw->fc = E1000_FC_TX_PAUSE;
   2172				e_dbg
   2173				    ("Flow Control = TX PAUSE frames only.\n");
   2174			}
   2175			/* For transmitting PAUSE frames ONLY.
   2176			 *
   2177			 *   LOCAL DEVICE  |   LINK PARTNER
   2178			 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
   2179			 *-------|---------|-------|---------|------------------
   2180			 *   1   |    1    |   0   |    1    | E1000_FC_RX_PAUSE
   2181			 *
   2182			 */
   2183			else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
   2184				 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
   2185				 !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
   2186				 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
   2187				hw->fc = E1000_FC_RX_PAUSE;
   2188				e_dbg
   2189				    ("Flow Control = RX PAUSE frames only.\n");
   2190			}
   2191			/* Per the IEEE spec, at this point flow control should
   2192			 * be disabled.  However, we want to consider that we
   2193			 * could be connected to a legacy switch that doesn't
   2194			 * advertise desired flow control, but can be forced on
   2195			 * the link partner.  So if we advertised no flow
   2196			 * control, that is what we will resolve to.  If we
   2197			 * advertised some kind of receive capability (Rx Pause
   2198			 * Only or Full Flow Control) and the link partner
   2199			 * advertised none, we will configure ourselves to
   2200			 * enable Rx Flow Control only.  We can do this safely
   2201			 * for two reasons:  If the link partner really
   2202			 * didn't want flow control enabled, and we enable Rx,
   2203			 * no harm done since we won't be receiving any PAUSE
   2204			 * frames anyway.  If the intent on the link partner was
   2205			 * to have flow control enabled, then by us enabling Rx
   2206			 * only, we can at least receive pause frames and
   2207			 * process them. This is a good idea because in most
   2208			 * cases, since we are predominantly a server NIC, more
   2209			 * times than not we will be asked to delay transmission
   2210			 * of packets than asking our link partner to pause
   2211			 * transmission of frames.
   2212			 */
   2213			else if ((hw->original_fc == E1000_FC_NONE ||
   2214				  hw->original_fc == E1000_FC_TX_PAUSE) ||
   2215				 hw->fc_strict_ieee) {
   2216				hw->fc = E1000_FC_NONE;
   2217				e_dbg("Flow Control = NONE.\n");
   2218			} else {
   2219				hw->fc = E1000_FC_RX_PAUSE;
   2220				e_dbg
   2221				    ("Flow Control = RX PAUSE frames only.\n");
   2222			}
   2223
   2224			/* Now we need to do one last check...  If we auto-
   2225			 * negotiated to HALF DUPLEX, flow control should not be
   2226			 * enabled per IEEE 802.3 spec.
   2227			 */
   2228			ret_val =
   2229			    e1000_get_speed_and_duplex(hw, &speed, &duplex);
   2230			if (ret_val) {
   2231				e_dbg
   2232				    ("Error getting link speed and duplex\n");
   2233				return ret_val;
   2234			}
   2235
   2236			if (duplex == HALF_DUPLEX)
   2237				hw->fc = E1000_FC_NONE;
   2238
   2239			/* Now we call a subroutine to actually force the MAC
   2240			 * controller to use the correct flow control settings.
   2241			 */
   2242			ret_val = e1000_force_mac_fc(hw);
   2243			if (ret_val) {
   2244				e_dbg
   2245				    ("Error forcing flow control settings\n");
   2246				return ret_val;
   2247			}
   2248		} else {
   2249			e_dbg
   2250			    ("Copper PHY and Auto Neg has not completed.\n");
   2251		}
   2252	}
   2253	return E1000_SUCCESS;
   2254}
   2255
   2256/**
   2257 * e1000_check_for_serdes_link_generic - Check for link (Serdes)
   2258 * @hw: pointer to the HW structure
   2259 *
   2260 * Checks for link up on the hardware.  If link is not up and we have
   2261 * a signal, then we need to force link up.
   2262 */
   2263static s32 e1000_check_for_serdes_link_generic(struct e1000_hw *hw)
   2264{
   2265	u32 rxcw;
   2266	u32 ctrl;
   2267	u32 status;
   2268	s32 ret_val = E1000_SUCCESS;
   2269
   2270	ctrl = er32(CTRL);
   2271	status = er32(STATUS);
   2272	rxcw = er32(RXCW);
   2273
   2274	/* If we don't have link (auto-negotiation failed or link partner
   2275	 * cannot auto-negotiate), and our link partner is not trying to
   2276	 * auto-negotiate with us (we are receiving idles or data),
   2277	 * we need to force link up. We also need to give auto-negotiation
   2278	 * time to complete.
   2279	 */
   2280	/* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */
   2281	if ((!(status & E1000_STATUS_LU)) && (!(rxcw & E1000_RXCW_C))) {
   2282		if (hw->autoneg_failed == 0) {
   2283			hw->autoneg_failed = 1;
   2284			goto out;
   2285		}
   2286		e_dbg("NOT RXing /C/, disable AutoNeg and force link.\n");
   2287
   2288		/* Disable auto-negotiation in the TXCW register */
   2289		ew32(TXCW, (hw->txcw & ~E1000_TXCW_ANE));
   2290
   2291		/* Force link-up and also force full-duplex. */
   2292		ctrl = er32(CTRL);
   2293		ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
   2294		ew32(CTRL, ctrl);
   2295
   2296		/* Configure Flow Control after forcing link up. */
   2297		ret_val = e1000_config_fc_after_link_up(hw);
   2298		if (ret_val) {
   2299			e_dbg("Error configuring flow control\n");
   2300			goto out;
   2301		}
   2302	} else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
   2303		/* If we are forcing link and we are receiving /C/ ordered
   2304		 * sets, re-enable auto-negotiation in the TXCW register
   2305		 * and disable forced link in the Device Control register
   2306		 * in an attempt to auto-negotiate with our link partner.
   2307		 */
   2308		e_dbg("RXing /C/, enable AutoNeg and stop forcing link.\n");
   2309		ew32(TXCW, hw->txcw);
   2310		ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
   2311
   2312		hw->serdes_has_link = true;
   2313	} else if (!(E1000_TXCW_ANE & er32(TXCW))) {
   2314		/* If we force link for non-auto-negotiation switch, check
   2315		 * link status based on MAC synchronization for internal
   2316		 * serdes media type.
   2317		 */
   2318		/* SYNCH bit and IV bit are sticky. */
   2319		udelay(10);
   2320		rxcw = er32(RXCW);
   2321		if (rxcw & E1000_RXCW_SYNCH) {
   2322			if (!(rxcw & E1000_RXCW_IV)) {
   2323				hw->serdes_has_link = true;
   2324				e_dbg("SERDES: Link up - forced.\n");
   2325			}
   2326		} else {
   2327			hw->serdes_has_link = false;
   2328			e_dbg("SERDES: Link down - force failed.\n");
   2329		}
   2330	}
   2331
   2332	if (E1000_TXCW_ANE & er32(TXCW)) {
   2333		status = er32(STATUS);
   2334		if (status & E1000_STATUS_LU) {
   2335			/* SYNCH bit and IV bit are sticky, so reread rxcw. */
   2336			udelay(10);
   2337			rxcw = er32(RXCW);
   2338			if (rxcw & E1000_RXCW_SYNCH) {
   2339				if (!(rxcw & E1000_RXCW_IV)) {
   2340					hw->serdes_has_link = true;
   2341					e_dbg("SERDES: Link up - autoneg "
   2342						 "completed successfully.\n");
   2343				} else {
   2344					hw->serdes_has_link = false;
   2345					e_dbg("SERDES: Link down - invalid"
   2346						 "codewords detected in autoneg.\n");
   2347				}
   2348			} else {
   2349				hw->serdes_has_link = false;
   2350				e_dbg("SERDES: Link down - no sync.\n");
   2351			}
   2352		} else {
   2353			hw->serdes_has_link = false;
   2354			e_dbg("SERDES: Link down - autoneg failed\n");
   2355		}
   2356	}
   2357
   2358      out:
   2359	return ret_val;
   2360}
   2361
   2362/**
   2363 * e1000_check_for_link
   2364 * @hw: Struct containing variables accessed by shared code
   2365 *
   2366 * Checks to see if the link status of the hardware has changed.
   2367 * Called by any function that needs to check the link status of the adapter.
   2368 */
   2369s32 e1000_check_for_link(struct e1000_hw *hw)
   2370{
   2371	u32 status;
   2372	u32 rctl;
   2373	u32 icr;
   2374	s32 ret_val;
   2375	u16 phy_data;
   2376
   2377	er32(CTRL);
   2378	status = er32(STATUS);
   2379
   2380	/* On adapters with a MAC newer than 82544, SW Definable pin 1 will be
   2381	 * set when the optics detect a signal. On older adapters, it will be
   2382	 * cleared when there is a signal.  This applies to fiber media only.
   2383	 */
   2384	if ((hw->media_type == e1000_media_type_fiber) ||
   2385	    (hw->media_type == e1000_media_type_internal_serdes)) {
   2386		er32(RXCW);
   2387
   2388		if (hw->media_type == e1000_media_type_fiber) {
   2389			if (status & E1000_STATUS_LU)
   2390				hw->get_link_status = false;
   2391		}
   2392	}
   2393
   2394	/* If we have a copper PHY then we only want to go out to the PHY
   2395	 * registers to see if Auto-Neg has completed and/or if our link
   2396	 * status has changed.  The get_link_status flag will be set if we
   2397	 * receive a Link Status Change interrupt or we have Rx Sequence
   2398	 * Errors.
   2399	 */
   2400	if ((hw->media_type == e1000_media_type_copper) && hw->get_link_status) {
   2401		/* First we want to see if the MII Status Register reports
   2402		 * link.  If so, then we want to get the current speed/duplex
   2403		 * of the PHY.
   2404		 * Read the register twice since the link bit is sticky.
   2405		 */
   2406		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   2407		if (ret_val)
   2408			return ret_val;
   2409		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   2410		if (ret_val)
   2411			return ret_val;
   2412
   2413		if (phy_data & MII_SR_LINK_STATUS) {
   2414			hw->get_link_status = false;
   2415			/* Check if there was DownShift, must be checked
   2416			 * immediately after link-up
   2417			 */
   2418			e1000_check_downshift(hw);
   2419
   2420			/* If we are on 82544 or 82543 silicon and speed/duplex
   2421			 * are forced to 10H or 10F, then we will implement the
   2422			 * polarity reversal workaround.  We disable interrupts
   2423			 * first, and upon returning, place the devices
   2424			 * interrupt state to its previous value except for the
   2425			 * link status change interrupt which will
   2426			 * happen due to the execution of this workaround.
   2427			 */
   2428
   2429			if ((hw->mac_type == e1000_82544 ||
   2430			     hw->mac_type == e1000_82543) &&
   2431			    (!hw->autoneg) &&
   2432			    (hw->forced_speed_duplex == e1000_10_full ||
   2433			     hw->forced_speed_duplex == e1000_10_half)) {
   2434				ew32(IMC, 0xffffffff);
   2435				ret_val =
   2436				    e1000_polarity_reversal_workaround(hw);
   2437				icr = er32(ICR);
   2438				ew32(ICS, (icr & ~E1000_ICS_LSC));
   2439				ew32(IMS, IMS_ENABLE_MASK);
   2440			}
   2441
   2442		} else {
   2443			/* No link detected */
   2444			e1000_config_dsp_after_link_change(hw, false);
   2445			return 0;
   2446		}
   2447
   2448		/* If we are forcing speed/duplex, then we simply return since
   2449		 * we have already determined whether we have link or not.
   2450		 */
   2451		if (!hw->autoneg)
   2452			return -E1000_ERR_CONFIG;
   2453
   2454		/* optimize the dsp settings for the igp phy */
   2455		e1000_config_dsp_after_link_change(hw, true);
   2456
   2457		/* We have a M88E1000 PHY and Auto-Neg is enabled.  If we
   2458		 * have Si on board that is 82544 or newer, Auto
   2459		 * Speed Detection takes care of MAC speed/duplex
   2460		 * configuration.  So we only need to configure Collision
   2461		 * Distance in the MAC.  Otherwise, we need to force
   2462		 * speed/duplex on the MAC to the current PHY speed/duplex
   2463		 * settings.
   2464		 */
   2465		if ((hw->mac_type >= e1000_82544) &&
   2466		    (hw->mac_type != e1000_ce4100))
   2467			e1000_config_collision_dist(hw);
   2468		else {
   2469			ret_val = e1000_config_mac_to_phy(hw);
   2470			if (ret_val) {
   2471				e_dbg
   2472				    ("Error configuring MAC to PHY settings\n");
   2473				return ret_val;
   2474			}
   2475		}
   2476
   2477		/* Configure Flow Control now that Auto-Neg has completed.
   2478		 * First, we need to restore the desired flow control settings
   2479		 * because we may have had to re-autoneg with a different link
   2480		 * partner.
   2481		 */
   2482		ret_val = e1000_config_fc_after_link_up(hw);
   2483		if (ret_val) {
   2484			e_dbg("Error configuring flow control\n");
   2485			return ret_val;
   2486		}
   2487
   2488		/* At this point we know that we are on copper and we have
   2489		 * auto-negotiated link.  These are conditions for checking the
   2490		 * link partner capability register.  We use the link speed to
   2491		 * determine if TBI compatibility needs to be turned on or off.
   2492		 * If the link is not at gigabit speed, then TBI compatibility
   2493		 * is not needed.  If we are at gigabit speed, we turn on TBI
   2494		 * compatibility.
   2495		 */
   2496		if (hw->tbi_compatibility_en) {
   2497			u16 speed, duplex;
   2498
   2499			ret_val =
   2500			    e1000_get_speed_and_duplex(hw, &speed, &duplex);
   2501
   2502			if (ret_val) {
   2503				e_dbg
   2504				    ("Error getting link speed and duplex\n");
   2505				return ret_val;
   2506			}
   2507			if (speed != SPEED_1000) {
   2508				/* If link speed is not set to gigabit speed, we
   2509				 * do not need to enable TBI compatibility.
   2510				 */
   2511				if (hw->tbi_compatibility_on) {
   2512					/* If we previously were in the mode,
   2513					 * turn it off.
   2514					 */
   2515					rctl = er32(RCTL);
   2516					rctl &= ~E1000_RCTL_SBP;
   2517					ew32(RCTL, rctl);
   2518					hw->tbi_compatibility_on = false;
   2519				}
   2520			} else {
   2521				/* If TBI compatibility is was previously off,
   2522				 * turn it on. For compatibility with a TBI link
   2523				 * partner, we will store bad packets. Some
   2524				 * frames have an additional byte on the end and
   2525				 * will look like CRC errors to the hardware.
   2526				 */
   2527				if (!hw->tbi_compatibility_on) {
   2528					hw->tbi_compatibility_on = true;
   2529					rctl = er32(RCTL);
   2530					rctl |= E1000_RCTL_SBP;
   2531					ew32(RCTL, rctl);
   2532				}
   2533			}
   2534		}
   2535	}
   2536
   2537	if ((hw->media_type == e1000_media_type_fiber) ||
   2538	    (hw->media_type == e1000_media_type_internal_serdes))
   2539		e1000_check_for_serdes_link_generic(hw);
   2540
   2541	return E1000_SUCCESS;
   2542}
   2543
   2544/**
   2545 * e1000_get_speed_and_duplex
   2546 * @hw: Struct containing variables accessed by shared code
   2547 * @speed: Speed of the connection
   2548 * @duplex: Duplex setting of the connection
   2549 *
   2550 * Detects the current speed and duplex settings of the hardware.
   2551 */
   2552s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
   2553{
   2554	u32 status;
   2555	s32 ret_val;
   2556	u16 phy_data;
   2557
   2558	if (hw->mac_type >= e1000_82543) {
   2559		status = er32(STATUS);
   2560		if (status & E1000_STATUS_SPEED_1000) {
   2561			*speed = SPEED_1000;
   2562			e_dbg("1000 Mbs, ");
   2563		} else if (status & E1000_STATUS_SPEED_100) {
   2564			*speed = SPEED_100;
   2565			e_dbg("100 Mbs, ");
   2566		} else {
   2567			*speed = SPEED_10;
   2568			e_dbg("10 Mbs, ");
   2569		}
   2570
   2571		if (status & E1000_STATUS_FD) {
   2572			*duplex = FULL_DUPLEX;
   2573			e_dbg("Full Duplex\n");
   2574		} else {
   2575			*duplex = HALF_DUPLEX;
   2576			e_dbg(" Half Duplex\n");
   2577		}
   2578	} else {
   2579		e_dbg("1000 Mbs, Full Duplex\n");
   2580		*speed = SPEED_1000;
   2581		*duplex = FULL_DUPLEX;
   2582	}
   2583
   2584	/* IGP01 PHY may advertise full duplex operation after speed downgrade
   2585	 * even if it is operating at half duplex.  Here we set the duplex
   2586	 * settings to match the duplex in the link partner's capabilities.
   2587	 */
   2588	if (hw->phy_type == e1000_phy_igp && hw->speed_downgraded) {
   2589		ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data);
   2590		if (ret_val)
   2591			return ret_val;
   2592
   2593		if (!(phy_data & NWAY_ER_LP_NWAY_CAPS))
   2594			*duplex = HALF_DUPLEX;
   2595		else {
   2596			ret_val =
   2597			    e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data);
   2598			if (ret_val)
   2599				return ret_val;
   2600			if ((*speed == SPEED_100 &&
   2601			     !(phy_data & NWAY_LPAR_100TX_FD_CAPS)) ||
   2602			    (*speed == SPEED_10 &&
   2603			     !(phy_data & NWAY_LPAR_10T_FD_CAPS)))
   2604				*duplex = HALF_DUPLEX;
   2605		}
   2606	}
   2607
   2608	return E1000_SUCCESS;
   2609}
   2610
   2611/**
   2612 * e1000_wait_autoneg
   2613 * @hw: Struct containing variables accessed by shared code
   2614 *
   2615 * Blocks until autoneg completes or times out (~4.5 seconds)
   2616 */
   2617static s32 e1000_wait_autoneg(struct e1000_hw *hw)
   2618{
   2619	s32 ret_val;
   2620	u16 i;
   2621	u16 phy_data;
   2622
   2623	e_dbg("Waiting for Auto-Neg to complete.\n");
   2624
   2625	/* We will wait for autoneg to complete or 4.5 seconds to expire. */
   2626	for (i = PHY_AUTO_NEG_TIME; i > 0; i--) {
   2627		/* Read the MII Status Register and wait for Auto-Neg
   2628		 * Complete bit to be set.
   2629		 */
   2630		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   2631		if (ret_val)
   2632			return ret_val;
   2633		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   2634		if (ret_val)
   2635			return ret_val;
   2636		if (phy_data & MII_SR_AUTONEG_COMPLETE)
   2637			return E1000_SUCCESS;
   2638
   2639		msleep(100);
   2640	}
   2641	return E1000_SUCCESS;
   2642}
   2643
   2644/**
   2645 * e1000_raise_mdi_clk - Raises the Management Data Clock
   2646 * @hw: Struct containing variables accessed by shared code
   2647 * @ctrl: Device control register's current value
   2648 */
   2649static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
   2650{
   2651	/* Raise the clock input to the Management Data Clock (by setting the
   2652	 * MDC bit), and then delay 10 microseconds.
   2653	 */
   2654	ew32(CTRL, (*ctrl | E1000_CTRL_MDC));
   2655	E1000_WRITE_FLUSH();
   2656	udelay(10);
   2657}
   2658
   2659/**
   2660 * e1000_lower_mdi_clk - Lowers the Management Data Clock
   2661 * @hw: Struct containing variables accessed by shared code
   2662 * @ctrl: Device control register's current value
   2663 */
   2664static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
   2665{
   2666	/* Lower the clock input to the Management Data Clock (by clearing the
   2667	 * MDC bit), and then delay 10 microseconds.
   2668	 */
   2669	ew32(CTRL, (*ctrl & ~E1000_CTRL_MDC));
   2670	E1000_WRITE_FLUSH();
   2671	udelay(10);
   2672}
   2673
   2674/**
   2675 * e1000_shift_out_mdi_bits - Shifts data bits out to the PHY
   2676 * @hw: Struct containing variables accessed by shared code
   2677 * @data: Data to send out to the PHY
   2678 * @count: Number of bits to shift out
   2679 *
   2680 * Bits are shifted out in MSB to LSB order.
   2681 */
   2682static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data, u16 count)
   2683{
   2684	u32 ctrl;
   2685	u32 mask;
   2686
   2687	/* We need to shift "count" number of bits out to the PHY. So, the value
   2688	 * in the "data" parameter will be shifted out to the PHY one bit at a
   2689	 * time. In order to do this, "data" must be broken down into bits.
   2690	 */
   2691	mask = 0x01;
   2692	mask <<= (count - 1);
   2693
   2694	ctrl = er32(CTRL);
   2695
   2696	/* Set MDIO_DIR and MDC_DIR direction bits to be used as output pins. */
   2697	ctrl |= (E1000_CTRL_MDIO_DIR | E1000_CTRL_MDC_DIR);
   2698
   2699	while (mask) {
   2700		/* A "1" is shifted out to the PHY by setting the MDIO bit to
   2701		 * "1" and then raising and lowering the Management Data Clock.
   2702		 * A "0" is shifted out to the PHY by setting the MDIO bit to
   2703		 * "0" and then raising and lowering the clock.
   2704		 */
   2705		if (data & mask)
   2706			ctrl |= E1000_CTRL_MDIO;
   2707		else
   2708			ctrl &= ~E1000_CTRL_MDIO;
   2709
   2710		ew32(CTRL, ctrl);
   2711		E1000_WRITE_FLUSH();
   2712
   2713		udelay(10);
   2714
   2715		e1000_raise_mdi_clk(hw, &ctrl);
   2716		e1000_lower_mdi_clk(hw, &ctrl);
   2717
   2718		mask = mask >> 1;
   2719	}
   2720}
   2721
   2722/**
   2723 * e1000_shift_in_mdi_bits - Shifts data bits in from the PHY
   2724 * @hw: Struct containing variables accessed by shared code
   2725 *
   2726 * Bits are shifted in MSB to LSB order.
   2727 */
   2728static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw)
   2729{
   2730	u32 ctrl;
   2731	u16 data = 0;
   2732	u8 i;
   2733
   2734	/* In order to read a register from the PHY, we need to shift in a total
   2735	 * of 18 bits from the PHY. The first two bit (turnaround) times are
   2736	 * used to avoid contention on the MDIO pin when a read operation is
   2737	 * performed. These two bits are ignored by us and thrown away. Bits are
   2738	 * "shifted in" by raising the input to the Management Data Clock
   2739	 * (setting the MDC bit), and then reading the value of the MDIO bit.
   2740	 */
   2741	ctrl = er32(CTRL);
   2742
   2743	/* Clear MDIO_DIR (SWDPIO1) to indicate this bit is to be used as
   2744	 * input.
   2745	 */
   2746	ctrl &= ~E1000_CTRL_MDIO_DIR;
   2747	ctrl &= ~E1000_CTRL_MDIO;
   2748
   2749	ew32(CTRL, ctrl);
   2750	E1000_WRITE_FLUSH();
   2751
   2752	/* Raise and Lower the clock before reading in the data. This accounts
   2753	 * for the turnaround bits. The first clock occurred when we clocked out
   2754	 * the last bit of the Register Address.
   2755	 */
   2756	e1000_raise_mdi_clk(hw, &ctrl);
   2757	e1000_lower_mdi_clk(hw, &ctrl);
   2758
   2759	for (data = 0, i = 0; i < 16; i++) {
   2760		data = data << 1;
   2761		e1000_raise_mdi_clk(hw, &ctrl);
   2762		ctrl = er32(CTRL);
   2763		/* Check to see if we shifted in a "1". */
   2764		if (ctrl & E1000_CTRL_MDIO)
   2765			data |= 1;
   2766		e1000_lower_mdi_clk(hw, &ctrl);
   2767	}
   2768
   2769	e1000_raise_mdi_clk(hw, &ctrl);
   2770	e1000_lower_mdi_clk(hw, &ctrl);
   2771
   2772	return data;
   2773}
   2774
   2775/**
   2776 * e1000_read_phy_reg - read a phy register
   2777 * @hw: Struct containing variables accessed by shared code
   2778 * @reg_addr: address of the PHY register to read
   2779 * @phy_data: pointer to the value on the PHY register
   2780 *
   2781 * Reads the value from a PHY register, if the value is on a specific non zero
   2782 * page, sets the page first.
   2783 */
   2784s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 *phy_data)
   2785{
   2786	u32 ret_val;
   2787	unsigned long flags;
   2788
   2789	spin_lock_irqsave(&e1000_phy_lock, flags);
   2790
   2791	if ((hw->phy_type == e1000_phy_igp) &&
   2792	    (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
   2793		ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
   2794						 (u16) reg_addr);
   2795		if (ret_val)
   2796			goto out;
   2797	}
   2798
   2799	ret_val = e1000_read_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
   2800					phy_data);
   2801out:
   2802	spin_unlock_irqrestore(&e1000_phy_lock, flags);
   2803
   2804	return ret_val;
   2805}
   2806
   2807static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
   2808				 u16 *phy_data)
   2809{
   2810	u32 i;
   2811	u32 mdic = 0;
   2812	const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
   2813
   2814	if (reg_addr > MAX_PHY_REG_ADDRESS) {
   2815		e_dbg("PHY Address %d is out of range\n", reg_addr);
   2816		return -E1000_ERR_PARAM;
   2817	}
   2818
   2819	if (hw->mac_type > e1000_82543) {
   2820		/* Set up Op-code, Phy Address, and register address in the MDI
   2821		 * Control register.  The MAC will take care of interfacing with
   2822		 * the PHY to retrieve the desired data.
   2823		 */
   2824		if (hw->mac_type == e1000_ce4100) {
   2825			mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
   2826				(phy_addr << E1000_MDIC_PHY_SHIFT) |
   2827				(INTEL_CE_GBE_MDIC_OP_READ) |
   2828				(INTEL_CE_GBE_MDIC_GO));
   2829
   2830			writel(mdic, E1000_MDIO_CMD);
   2831
   2832			/* Poll the ready bit to see if the MDI read
   2833			 * completed
   2834			 */
   2835			for (i = 0; i < 64; i++) {
   2836				udelay(50);
   2837				mdic = readl(E1000_MDIO_CMD);
   2838				if (!(mdic & INTEL_CE_GBE_MDIC_GO))
   2839					break;
   2840			}
   2841
   2842			if (mdic & INTEL_CE_GBE_MDIC_GO) {
   2843				e_dbg("MDI Read did not complete\n");
   2844				return -E1000_ERR_PHY;
   2845			}
   2846
   2847			mdic = readl(E1000_MDIO_STS);
   2848			if (mdic & INTEL_CE_GBE_MDIC_READ_ERROR) {
   2849				e_dbg("MDI Read Error\n");
   2850				return -E1000_ERR_PHY;
   2851			}
   2852			*phy_data = (u16)mdic;
   2853		} else {
   2854			mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
   2855				(phy_addr << E1000_MDIC_PHY_SHIFT) |
   2856				(E1000_MDIC_OP_READ));
   2857
   2858			ew32(MDIC, mdic);
   2859
   2860			/* Poll the ready bit to see if the MDI read
   2861			 * completed
   2862			 */
   2863			for (i = 0; i < 64; i++) {
   2864				udelay(50);
   2865				mdic = er32(MDIC);
   2866				if (mdic & E1000_MDIC_READY)
   2867					break;
   2868			}
   2869			if (!(mdic & E1000_MDIC_READY)) {
   2870				e_dbg("MDI Read did not complete\n");
   2871				return -E1000_ERR_PHY;
   2872			}
   2873			if (mdic & E1000_MDIC_ERROR) {
   2874				e_dbg("MDI Error\n");
   2875				return -E1000_ERR_PHY;
   2876			}
   2877			*phy_data = (u16)mdic;
   2878		}
   2879	} else {
   2880		/* We must first send a preamble through the MDIO pin to signal
   2881		 * the beginning of an MII instruction.  This is done by sending
   2882		 * 32 consecutive "1" bits.
   2883		 */
   2884		e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
   2885
   2886		/* Now combine the next few fields that are required for a read
   2887		 * operation.  We use this method instead of calling the
   2888		 * e1000_shift_out_mdi_bits routine five different times. The
   2889		 * format of a MII read instruction consists of a shift out of
   2890		 * 14 bits and is defined as follows:
   2891		 *    <Preamble><SOF><Op Code><Phy Addr><Reg Addr>
   2892		 * followed by a shift in of 18 bits.  This first two bits
   2893		 * shifted in are TurnAround bits used to avoid contention on
   2894		 * the MDIO pin when a READ operation is performed.  These two
   2895		 * bits are thrown away followed by a shift in of 16 bits which
   2896		 * contains the desired data.
   2897		 */
   2898		mdic = ((reg_addr) | (phy_addr << 5) |
   2899			(PHY_OP_READ << 10) | (PHY_SOF << 12));
   2900
   2901		e1000_shift_out_mdi_bits(hw, mdic, 14);
   2902
   2903		/* Now that we've shifted out the read command to the MII, we
   2904		 * need to "shift in" the 16-bit value (18 total bits) of the
   2905		 * requested PHY register address.
   2906		 */
   2907		*phy_data = e1000_shift_in_mdi_bits(hw);
   2908	}
   2909	return E1000_SUCCESS;
   2910}
   2911
   2912/**
   2913 * e1000_write_phy_reg - write a phy register
   2914 *
   2915 * @hw: Struct containing variables accessed by shared code
   2916 * @reg_addr: address of the PHY register to write
   2917 * @phy_data: data to write to the PHY
   2918 *
   2919 * Writes a value to a PHY register
   2920 */
   2921s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 phy_data)
   2922{
   2923	u32 ret_val;
   2924	unsigned long flags;
   2925
   2926	spin_lock_irqsave(&e1000_phy_lock, flags);
   2927
   2928	if ((hw->phy_type == e1000_phy_igp) &&
   2929	    (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
   2930		ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
   2931						 (u16)reg_addr);
   2932		if (ret_val) {
   2933			spin_unlock_irqrestore(&e1000_phy_lock, flags);
   2934			return ret_val;
   2935		}
   2936	}
   2937
   2938	ret_val = e1000_write_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
   2939					 phy_data);
   2940	spin_unlock_irqrestore(&e1000_phy_lock, flags);
   2941
   2942	return ret_val;
   2943}
   2944
   2945static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
   2946				  u16 phy_data)
   2947{
   2948	u32 i;
   2949	u32 mdic = 0;
   2950	const u32 phy_addr = (hw->mac_type == e1000_ce4100) ? hw->phy_addr : 1;
   2951
   2952	if (reg_addr > MAX_PHY_REG_ADDRESS) {
   2953		e_dbg("PHY Address %d is out of range\n", reg_addr);
   2954		return -E1000_ERR_PARAM;
   2955	}
   2956
   2957	if (hw->mac_type > e1000_82543) {
   2958		/* Set up Op-code, Phy Address, register address, and data
   2959		 * intended for the PHY register in the MDI Control register.
   2960		 * The MAC will take care of interfacing with the PHY to send
   2961		 * the desired data.
   2962		 */
   2963		if (hw->mac_type == e1000_ce4100) {
   2964			mdic = (((u32)phy_data) |
   2965				(reg_addr << E1000_MDIC_REG_SHIFT) |
   2966				(phy_addr << E1000_MDIC_PHY_SHIFT) |
   2967				(INTEL_CE_GBE_MDIC_OP_WRITE) |
   2968				(INTEL_CE_GBE_MDIC_GO));
   2969
   2970			writel(mdic, E1000_MDIO_CMD);
   2971
   2972			/* Poll the ready bit to see if the MDI read
   2973			 * completed
   2974			 */
   2975			for (i = 0; i < 640; i++) {
   2976				udelay(5);
   2977				mdic = readl(E1000_MDIO_CMD);
   2978				if (!(mdic & INTEL_CE_GBE_MDIC_GO))
   2979					break;
   2980			}
   2981			if (mdic & INTEL_CE_GBE_MDIC_GO) {
   2982				e_dbg("MDI Write did not complete\n");
   2983				return -E1000_ERR_PHY;
   2984			}
   2985		} else {
   2986			mdic = (((u32)phy_data) |
   2987				(reg_addr << E1000_MDIC_REG_SHIFT) |
   2988				(phy_addr << E1000_MDIC_PHY_SHIFT) |
   2989				(E1000_MDIC_OP_WRITE));
   2990
   2991			ew32(MDIC, mdic);
   2992
   2993			/* Poll the ready bit to see if the MDI read
   2994			 * completed
   2995			 */
   2996			for (i = 0; i < 641; i++) {
   2997				udelay(5);
   2998				mdic = er32(MDIC);
   2999				if (mdic & E1000_MDIC_READY)
   3000					break;
   3001			}
   3002			if (!(mdic & E1000_MDIC_READY)) {
   3003				e_dbg("MDI Write did not complete\n");
   3004				return -E1000_ERR_PHY;
   3005			}
   3006		}
   3007	} else {
   3008		/* We'll need to use the SW defined pins to shift the write
   3009		 * command out to the PHY. We first send a preamble to the PHY
   3010		 * to signal the beginning of the MII instruction.  This is done
   3011		 * by sending 32 consecutive "1" bits.
   3012		 */
   3013		e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
   3014
   3015		/* Now combine the remaining required fields that will indicate
   3016		 * a write operation. We use this method instead of calling the
   3017		 * e1000_shift_out_mdi_bits routine for each field in the
   3018		 * command. The format of a MII write instruction is as follows:
   3019		 * <Preamble><SOF><OpCode><PhyAddr><RegAddr><Turnaround><Data>.
   3020		 */
   3021		mdic = ((PHY_TURNAROUND) | (reg_addr << 2) | (phy_addr << 7) |
   3022			(PHY_OP_WRITE << 12) | (PHY_SOF << 14));
   3023		mdic <<= 16;
   3024		mdic |= (u32)phy_data;
   3025
   3026		e1000_shift_out_mdi_bits(hw, mdic, 32);
   3027	}
   3028
   3029	return E1000_SUCCESS;
   3030}
   3031
   3032/**
   3033 * e1000_phy_hw_reset - reset the phy, hardware style
   3034 * @hw: Struct containing variables accessed by shared code
   3035 *
   3036 * Returns the PHY to the power-on reset state
   3037 */
   3038s32 e1000_phy_hw_reset(struct e1000_hw *hw)
   3039{
   3040	u32 ctrl, ctrl_ext;
   3041	u32 led_ctrl;
   3042
   3043	e_dbg("Resetting Phy...\n");
   3044
   3045	if (hw->mac_type > e1000_82543) {
   3046		/* Read the device control register and assert the
   3047		 * E1000_CTRL_PHY_RST bit. Then, take it out of reset.
   3048		 * For e1000 hardware, we delay for 10ms between the assert
   3049		 * and de-assert.
   3050		 */
   3051		ctrl = er32(CTRL);
   3052		ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
   3053		E1000_WRITE_FLUSH();
   3054
   3055		msleep(10);
   3056
   3057		ew32(CTRL, ctrl);
   3058		E1000_WRITE_FLUSH();
   3059
   3060	} else {
   3061		/* Read the Extended Device Control Register, assert the
   3062		 * PHY_RESET_DIR bit to put the PHY into reset. Then, take it
   3063		 * out of reset.
   3064		 */
   3065		ctrl_ext = er32(CTRL_EXT);
   3066		ctrl_ext |= E1000_CTRL_EXT_SDP4_DIR;
   3067		ctrl_ext &= ~E1000_CTRL_EXT_SDP4_DATA;
   3068		ew32(CTRL_EXT, ctrl_ext);
   3069		E1000_WRITE_FLUSH();
   3070		msleep(10);
   3071		ctrl_ext |= E1000_CTRL_EXT_SDP4_DATA;
   3072		ew32(CTRL_EXT, ctrl_ext);
   3073		E1000_WRITE_FLUSH();
   3074	}
   3075	udelay(150);
   3076
   3077	if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
   3078		/* Configure activity LED after PHY reset */
   3079		led_ctrl = er32(LEDCTL);
   3080		led_ctrl &= IGP_ACTIVITY_LED_MASK;
   3081		led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
   3082		ew32(LEDCTL, led_ctrl);
   3083	}
   3084
   3085	/* Wait for FW to finish PHY configuration. */
   3086	return e1000_get_phy_cfg_done(hw);
   3087}
   3088
   3089/**
   3090 * e1000_phy_reset - reset the phy to commit settings
   3091 * @hw: Struct containing variables accessed by shared code
   3092 *
   3093 * Resets the PHY
   3094 * Sets bit 15 of the MII Control register
   3095 */
   3096s32 e1000_phy_reset(struct e1000_hw *hw)
   3097{
   3098	s32 ret_val;
   3099	u16 phy_data;
   3100
   3101	switch (hw->phy_type) {
   3102	case e1000_phy_igp:
   3103		ret_val = e1000_phy_hw_reset(hw);
   3104		if (ret_val)
   3105			return ret_val;
   3106		break;
   3107	default:
   3108		ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
   3109		if (ret_val)
   3110			return ret_val;
   3111
   3112		phy_data |= MII_CR_RESET;
   3113		ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
   3114		if (ret_val)
   3115			return ret_val;
   3116
   3117		udelay(1);
   3118		break;
   3119	}
   3120
   3121	if (hw->phy_type == e1000_phy_igp)
   3122		e1000_phy_init_script(hw);
   3123
   3124	return E1000_SUCCESS;
   3125}
   3126
   3127/**
   3128 * e1000_detect_gig_phy - check the phy type
   3129 * @hw: Struct containing variables accessed by shared code
   3130 *
   3131 * Probes the expected PHY address for known PHY IDs
   3132 */
   3133static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
   3134{
   3135	s32 phy_init_status, ret_val;
   3136	u16 phy_id_high, phy_id_low;
   3137	bool match = false;
   3138
   3139	if (hw->phy_id != 0)
   3140		return E1000_SUCCESS;
   3141
   3142	/* Read the PHY ID Registers to identify which PHY is onboard. */
   3143	ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high);
   3144	if (ret_val)
   3145		return ret_val;
   3146
   3147	hw->phy_id = (u32)(phy_id_high << 16);
   3148	udelay(20);
   3149	ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low);
   3150	if (ret_val)
   3151		return ret_val;
   3152
   3153	hw->phy_id |= (u32)(phy_id_low & PHY_REVISION_MASK);
   3154	hw->phy_revision = (u32)phy_id_low & ~PHY_REVISION_MASK;
   3155
   3156	switch (hw->mac_type) {
   3157	case e1000_82543:
   3158		if (hw->phy_id == M88E1000_E_PHY_ID)
   3159			match = true;
   3160		break;
   3161	case e1000_82544:
   3162		if (hw->phy_id == M88E1000_I_PHY_ID)
   3163			match = true;
   3164		break;
   3165	case e1000_82540:
   3166	case e1000_82545:
   3167	case e1000_82545_rev_3:
   3168	case e1000_82546:
   3169	case e1000_82546_rev_3:
   3170		if (hw->phy_id == M88E1011_I_PHY_ID)
   3171			match = true;
   3172		break;
   3173	case e1000_ce4100:
   3174		if ((hw->phy_id == RTL8211B_PHY_ID) ||
   3175		    (hw->phy_id == RTL8201N_PHY_ID) ||
   3176		    (hw->phy_id == M88E1118_E_PHY_ID))
   3177			match = true;
   3178		break;
   3179	case e1000_82541:
   3180	case e1000_82541_rev_2:
   3181	case e1000_82547:
   3182	case e1000_82547_rev_2:
   3183		if (hw->phy_id == IGP01E1000_I_PHY_ID)
   3184			match = true;
   3185		break;
   3186	default:
   3187		e_dbg("Invalid MAC type %d\n", hw->mac_type);
   3188		return -E1000_ERR_CONFIG;
   3189	}
   3190	phy_init_status = e1000_set_phy_type(hw);
   3191
   3192	if ((match) && (phy_init_status == E1000_SUCCESS)) {
   3193		e_dbg("PHY ID 0x%X detected\n", hw->phy_id);
   3194		return E1000_SUCCESS;
   3195	}
   3196	e_dbg("Invalid PHY ID 0x%X\n", hw->phy_id);
   3197	return -E1000_ERR_PHY;
   3198}
   3199
   3200/**
   3201 * e1000_phy_reset_dsp - reset DSP
   3202 * @hw: Struct containing variables accessed by shared code
   3203 *
   3204 * Resets the PHY's DSP
   3205 */
   3206static s32 e1000_phy_reset_dsp(struct e1000_hw *hw)
   3207{
   3208	s32 ret_val;
   3209
   3210	do {
   3211		ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
   3212		if (ret_val)
   3213			break;
   3214		ret_val = e1000_write_phy_reg(hw, 30, 0x00c1);
   3215		if (ret_val)
   3216			break;
   3217		ret_val = e1000_write_phy_reg(hw, 30, 0x0000);
   3218		if (ret_val)
   3219			break;
   3220		ret_val = E1000_SUCCESS;
   3221	} while (0);
   3222
   3223	return ret_val;
   3224}
   3225
   3226/**
   3227 * e1000_phy_igp_get_info - get igp specific registers
   3228 * @hw: Struct containing variables accessed by shared code
   3229 * @phy_info: PHY information structure
   3230 *
   3231 * Get PHY information from various PHY registers for igp PHY only.
   3232 */
   3233static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
   3234				  struct e1000_phy_info *phy_info)
   3235{
   3236	s32 ret_val;
   3237	u16 phy_data, min_length, max_length, average;
   3238	e1000_rev_polarity polarity;
   3239
   3240	/* The downshift status is checked only once, after link is established,
   3241	 * and it stored in the hw->speed_downgraded parameter.
   3242	 */
   3243	phy_info->downshift = (e1000_downshift) hw->speed_downgraded;
   3244
   3245	/* IGP01E1000 does not need to support it. */
   3246	phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
   3247
   3248	/* IGP01E1000 always correct polarity reversal */
   3249	phy_info->polarity_correction = e1000_polarity_reversal_enabled;
   3250
   3251	/* Check polarity status */
   3252	ret_val = e1000_check_polarity(hw, &polarity);
   3253	if (ret_val)
   3254		return ret_val;
   3255
   3256	phy_info->cable_polarity = polarity;
   3257
   3258	ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data);
   3259	if (ret_val)
   3260		return ret_val;
   3261
   3262	phy_info->mdix_mode =
   3263	    (e1000_auto_x_mode) ((phy_data & IGP01E1000_PSSR_MDIX) >>
   3264				 IGP01E1000_PSSR_MDIX_SHIFT);
   3265
   3266	if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
   3267	    IGP01E1000_PSSR_SPEED_1000MBPS) {
   3268		/* Local/Remote Receiver Information are only valid @ 1000
   3269		 * Mbps
   3270		 */
   3271		ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
   3272		if (ret_val)
   3273			return ret_val;
   3274
   3275		phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
   3276				      SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
   3277		    e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
   3278		phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
   3279				       SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
   3280		    e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
   3281
   3282		/* Get cable length */
   3283		ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
   3284		if (ret_val)
   3285			return ret_val;
   3286
   3287		/* Translate to old method */
   3288		average = (max_length + min_length) / 2;
   3289
   3290		if (average <= e1000_igp_cable_length_50)
   3291			phy_info->cable_length = e1000_cable_length_50;
   3292		else if (average <= e1000_igp_cable_length_80)
   3293			phy_info->cable_length = e1000_cable_length_50_80;
   3294		else if (average <= e1000_igp_cable_length_110)
   3295			phy_info->cable_length = e1000_cable_length_80_110;
   3296		else if (average <= e1000_igp_cable_length_140)
   3297			phy_info->cable_length = e1000_cable_length_110_140;
   3298		else
   3299			phy_info->cable_length = e1000_cable_length_140;
   3300	}
   3301
   3302	return E1000_SUCCESS;
   3303}
   3304
   3305/**
   3306 * e1000_phy_m88_get_info - get m88 specific registers
   3307 * @hw: Struct containing variables accessed by shared code
   3308 * @phy_info: PHY information structure
   3309 *
   3310 * Get PHY information from various PHY registers for m88 PHY only.
   3311 */
   3312static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
   3313				  struct e1000_phy_info *phy_info)
   3314{
   3315	s32 ret_val;
   3316	u16 phy_data;
   3317	e1000_rev_polarity polarity;
   3318
   3319	/* The downshift status is checked only once, after link is established,
   3320	 * and it stored in the hw->speed_downgraded parameter.
   3321	 */
   3322	phy_info->downshift = (e1000_downshift) hw->speed_downgraded;
   3323
   3324	ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
   3325	if (ret_val)
   3326		return ret_val;
   3327
   3328	phy_info->extended_10bt_distance =
   3329	    ((phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >>
   3330	     M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT) ?
   3331	    e1000_10bt_ext_dist_enable_lower :
   3332	    e1000_10bt_ext_dist_enable_normal;
   3333
   3334	phy_info->polarity_correction =
   3335	    ((phy_data & M88E1000_PSCR_POLARITY_REVERSAL) >>
   3336	     M88E1000_PSCR_POLARITY_REVERSAL_SHIFT) ?
   3337	    e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
   3338
   3339	/* Check polarity status */
   3340	ret_val = e1000_check_polarity(hw, &polarity);
   3341	if (ret_val)
   3342		return ret_val;
   3343	phy_info->cable_polarity = polarity;
   3344
   3345	ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
   3346	if (ret_val)
   3347		return ret_val;
   3348
   3349	phy_info->mdix_mode =
   3350	    (e1000_auto_x_mode) ((phy_data & M88E1000_PSSR_MDIX) >>
   3351				 M88E1000_PSSR_MDIX_SHIFT);
   3352
   3353	if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
   3354		/* Cable Length Estimation and Local/Remote Receiver Information
   3355		 * are only valid at 1000 Mbps.
   3356		 */
   3357		phy_info->cable_length =
   3358		    (e1000_cable_length) ((phy_data &
   3359					   M88E1000_PSSR_CABLE_LENGTH) >>
   3360					  M88E1000_PSSR_CABLE_LENGTH_SHIFT);
   3361
   3362		ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
   3363		if (ret_val)
   3364			return ret_val;
   3365
   3366		phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
   3367				      SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
   3368		    e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
   3369		phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
   3370				       SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
   3371		    e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
   3372	}
   3373
   3374	return E1000_SUCCESS;
   3375}
   3376
   3377/**
   3378 * e1000_phy_get_info - request phy info
   3379 * @hw: Struct containing variables accessed by shared code
   3380 * @phy_info: PHY information structure
   3381 *
   3382 * Get PHY information from various PHY registers
   3383 */
   3384s32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info)
   3385{
   3386	s32 ret_val;
   3387	u16 phy_data;
   3388
   3389	phy_info->cable_length = e1000_cable_length_undefined;
   3390	phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
   3391	phy_info->cable_polarity = e1000_rev_polarity_undefined;
   3392	phy_info->downshift = e1000_downshift_undefined;
   3393	phy_info->polarity_correction = e1000_polarity_reversal_undefined;
   3394	phy_info->mdix_mode = e1000_auto_x_mode_undefined;
   3395	phy_info->local_rx = e1000_1000t_rx_status_undefined;
   3396	phy_info->remote_rx = e1000_1000t_rx_status_undefined;
   3397
   3398	if (hw->media_type != e1000_media_type_copper) {
   3399		e_dbg("PHY info is only valid for copper media\n");
   3400		return -E1000_ERR_CONFIG;
   3401	}
   3402
   3403	ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   3404	if (ret_val)
   3405		return ret_val;
   3406
   3407	ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
   3408	if (ret_val)
   3409		return ret_val;
   3410
   3411	if ((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
   3412		e_dbg("PHY info is only valid if link is up\n");
   3413		return -E1000_ERR_CONFIG;
   3414	}
   3415
   3416	if (hw->phy_type == e1000_phy_igp)
   3417		return e1000_phy_igp_get_info(hw, phy_info);
   3418	else if ((hw->phy_type == e1000_phy_8211) ||
   3419		 (hw->phy_type == e1000_phy_8201))
   3420		return E1000_SUCCESS;
   3421	else
   3422		return e1000_phy_m88_get_info(hw, phy_info);
   3423}
   3424
   3425s32 e1000_validate_mdi_setting(struct e1000_hw *hw)
   3426{
   3427	if (!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
   3428		e_dbg("Invalid MDI setting detected\n");
   3429		hw->mdix = 1;
   3430		return -E1000_ERR_CONFIG;
   3431	}
   3432	return E1000_SUCCESS;
   3433}
   3434
   3435/**
   3436 * e1000_init_eeprom_params - initialize sw eeprom vars
   3437 * @hw: Struct containing variables accessed by shared code
   3438 *
   3439 * Sets up eeprom variables in the hw struct.  Must be called after mac_type
   3440 * is configured.
   3441 */
   3442s32 e1000_init_eeprom_params(struct e1000_hw *hw)
   3443{
   3444	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   3445	u32 eecd = er32(EECD);
   3446	s32 ret_val = E1000_SUCCESS;
   3447	u16 eeprom_size;
   3448
   3449	switch (hw->mac_type) {
   3450	case e1000_82542_rev2_0:
   3451	case e1000_82542_rev2_1:
   3452	case e1000_82543:
   3453	case e1000_82544:
   3454		eeprom->type = e1000_eeprom_microwire;
   3455		eeprom->word_size = 64;
   3456		eeprom->opcode_bits = 3;
   3457		eeprom->address_bits = 6;
   3458		eeprom->delay_usec = 50;
   3459		break;
   3460	case e1000_82540:
   3461	case e1000_82545:
   3462	case e1000_82545_rev_3:
   3463	case e1000_82546:
   3464	case e1000_82546_rev_3:
   3465		eeprom->type = e1000_eeprom_microwire;
   3466		eeprom->opcode_bits = 3;
   3467		eeprom->delay_usec = 50;
   3468		if (eecd & E1000_EECD_SIZE) {
   3469			eeprom->word_size = 256;
   3470			eeprom->address_bits = 8;
   3471		} else {
   3472			eeprom->word_size = 64;
   3473			eeprom->address_bits = 6;
   3474		}
   3475		break;
   3476	case e1000_82541:
   3477	case e1000_82541_rev_2:
   3478	case e1000_82547:
   3479	case e1000_82547_rev_2:
   3480		if (eecd & E1000_EECD_TYPE) {
   3481			eeprom->type = e1000_eeprom_spi;
   3482			eeprom->opcode_bits = 8;
   3483			eeprom->delay_usec = 1;
   3484			if (eecd & E1000_EECD_ADDR_BITS) {
   3485				eeprom->page_size = 32;
   3486				eeprom->address_bits = 16;
   3487			} else {
   3488				eeprom->page_size = 8;
   3489				eeprom->address_bits = 8;
   3490			}
   3491		} else {
   3492			eeprom->type = e1000_eeprom_microwire;
   3493			eeprom->opcode_bits = 3;
   3494			eeprom->delay_usec = 50;
   3495			if (eecd & E1000_EECD_ADDR_BITS) {
   3496				eeprom->word_size = 256;
   3497				eeprom->address_bits = 8;
   3498			} else {
   3499				eeprom->word_size = 64;
   3500				eeprom->address_bits = 6;
   3501			}
   3502		}
   3503		break;
   3504	default:
   3505		break;
   3506	}
   3507
   3508	if (eeprom->type == e1000_eeprom_spi) {
   3509		/* eeprom_size will be an enum [0..8] that maps to eeprom sizes
   3510		 * 128B to 32KB (incremented by powers of 2).
   3511		 */
   3512		/* Set to default value for initial eeprom read. */
   3513		eeprom->word_size = 64;
   3514		ret_val = e1000_read_eeprom(hw, EEPROM_CFG, 1, &eeprom_size);
   3515		if (ret_val)
   3516			return ret_val;
   3517		eeprom_size =
   3518		    (eeprom_size & EEPROM_SIZE_MASK) >> EEPROM_SIZE_SHIFT;
   3519		/* 256B eeprom size was not supported in earlier hardware, so we
   3520		 * bump eeprom_size up one to ensure that "1" (which maps to
   3521		 * 256B) is never the result used in the shifting logic below.
   3522		 */
   3523		if (eeprom_size)
   3524			eeprom_size++;
   3525
   3526		eeprom->word_size = 1 << (eeprom_size + EEPROM_WORD_SIZE_SHIFT);
   3527	}
   3528	return ret_val;
   3529}
   3530
   3531/**
   3532 * e1000_raise_ee_clk - Raises the EEPROM's clock input.
   3533 * @hw: Struct containing variables accessed by shared code
   3534 * @eecd: EECD's current value
   3535 */
   3536static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd)
   3537{
   3538	/* Raise the clock input to the EEPROM (by setting the SK bit), and then
   3539	 * wait <delay> microseconds.
   3540	 */
   3541	*eecd = *eecd | E1000_EECD_SK;
   3542	ew32(EECD, *eecd);
   3543	E1000_WRITE_FLUSH();
   3544	udelay(hw->eeprom.delay_usec);
   3545}
   3546
   3547/**
   3548 * e1000_lower_ee_clk - Lowers the EEPROM's clock input.
   3549 * @hw: Struct containing variables accessed by shared code
   3550 * @eecd: EECD's current value
   3551 */
   3552static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd)
   3553{
   3554	/* Lower the clock input to the EEPROM (by clearing the SK bit), and
   3555	 * then wait 50 microseconds.
   3556	 */
   3557	*eecd = *eecd & ~E1000_EECD_SK;
   3558	ew32(EECD, *eecd);
   3559	E1000_WRITE_FLUSH();
   3560	udelay(hw->eeprom.delay_usec);
   3561}
   3562
   3563/**
   3564 * e1000_shift_out_ee_bits - Shift data bits out to the EEPROM.
   3565 * @hw: Struct containing variables accessed by shared code
   3566 * @data: data to send to the EEPROM
   3567 * @count: number of bits to shift out
   3568 */
   3569static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count)
   3570{
   3571	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   3572	u32 eecd;
   3573	u32 mask;
   3574
   3575	/* We need to shift "count" bits out to the EEPROM. So, value in the
   3576	 * "data" parameter will be shifted out to the EEPROM one bit at a time.
   3577	 * In order to do this, "data" must be broken down into bits.
   3578	 */
   3579	mask = 0x01 << (count - 1);
   3580	eecd = er32(EECD);
   3581	if (eeprom->type == e1000_eeprom_microwire)
   3582		eecd &= ~E1000_EECD_DO;
   3583	else if (eeprom->type == e1000_eeprom_spi)
   3584		eecd |= E1000_EECD_DO;
   3585
   3586	do {
   3587		/* A "1" is shifted out to the EEPROM by setting bit "DI" to a
   3588		 * "1", and then raising and then lowering the clock (the SK bit
   3589		 * controls the clock input to the EEPROM).  A "0" is shifted
   3590		 * out to the EEPROM by setting "DI" to "0" and then raising and
   3591		 * then lowering the clock.
   3592		 */
   3593		eecd &= ~E1000_EECD_DI;
   3594
   3595		if (data & mask)
   3596			eecd |= E1000_EECD_DI;
   3597
   3598		ew32(EECD, eecd);
   3599		E1000_WRITE_FLUSH();
   3600
   3601		udelay(eeprom->delay_usec);
   3602
   3603		e1000_raise_ee_clk(hw, &eecd);
   3604		e1000_lower_ee_clk(hw, &eecd);
   3605
   3606		mask = mask >> 1;
   3607
   3608	} while (mask);
   3609
   3610	/* We leave the "DI" bit set to "0" when we leave this routine. */
   3611	eecd &= ~E1000_EECD_DI;
   3612	ew32(EECD, eecd);
   3613}
   3614
   3615/**
   3616 * e1000_shift_in_ee_bits - Shift data bits in from the EEPROM
   3617 * @hw: Struct containing variables accessed by shared code
   3618 * @count: number of bits to shift in
   3619 */
   3620static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count)
   3621{
   3622	u32 eecd;
   3623	u32 i;
   3624	u16 data;
   3625
   3626	/* In order to read a register from the EEPROM, we need to shift 'count'
   3627	 * bits in from the EEPROM. Bits are "shifted in" by raising the clock
   3628	 * input to the EEPROM (setting the SK bit), and then reading the value
   3629	 * of the "DO" bit.  During this "shifting in" process the "DI" bit
   3630	 * should always be clear.
   3631	 */
   3632
   3633	eecd = er32(EECD);
   3634
   3635	eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
   3636	data = 0;
   3637
   3638	for (i = 0; i < count; i++) {
   3639		data = data << 1;
   3640		e1000_raise_ee_clk(hw, &eecd);
   3641
   3642		eecd = er32(EECD);
   3643
   3644		eecd &= ~(E1000_EECD_DI);
   3645		if (eecd & E1000_EECD_DO)
   3646			data |= 1;
   3647
   3648		e1000_lower_ee_clk(hw, &eecd);
   3649	}
   3650
   3651	return data;
   3652}
   3653
   3654/**
   3655 * e1000_acquire_eeprom - Prepares EEPROM for access
   3656 * @hw: Struct containing variables accessed by shared code
   3657 *
   3658 * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
   3659 * function should be called before issuing a command to the EEPROM.
   3660 */
   3661static s32 e1000_acquire_eeprom(struct e1000_hw *hw)
   3662{
   3663	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   3664	u32 eecd, i = 0;
   3665
   3666	eecd = er32(EECD);
   3667
   3668	/* Request EEPROM Access */
   3669	if (hw->mac_type > e1000_82544) {
   3670		eecd |= E1000_EECD_REQ;
   3671		ew32(EECD, eecd);
   3672		eecd = er32(EECD);
   3673		while ((!(eecd & E1000_EECD_GNT)) &&
   3674		       (i < E1000_EEPROM_GRANT_ATTEMPTS)) {
   3675			i++;
   3676			udelay(5);
   3677			eecd = er32(EECD);
   3678		}
   3679		if (!(eecd & E1000_EECD_GNT)) {
   3680			eecd &= ~E1000_EECD_REQ;
   3681			ew32(EECD, eecd);
   3682			e_dbg("Could not acquire EEPROM grant\n");
   3683			return -E1000_ERR_EEPROM;
   3684		}
   3685	}
   3686
   3687	/* Setup EEPROM for Read/Write */
   3688
   3689	if (eeprom->type == e1000_eeprom_microwire) {
   3690		/* Clear SK and DI */
   3691		eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
   3692		ew32(EECD, eecd);
   3693
   3694		/* Set CS */
   3695		eecd |= E1000_EECD_CS;
   3696		ew32(EECD, eecd);
   3697	} else if (eeprom->type == e1000_eeprom_spi) {
   3698		/* Clear SK and CS */
   3699		eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
   3700		ew32(EECD, eecd);
   3701		E1000_WRITE_FLUSH();
   3702		udelay(1);
   3703	}
   3704
   3705	return E1000_SUCCESS;
   3706}
   3707
   3708/**
   3709 * e1000_standby_eeprom - Returns EEPROM to a "standby" state
   3710 * @hw: Struct containing variables accessed by shared code
   3711 */
   3712static void e1000_standby_eeprom(struct e1000_hw *hw)
   3713{
   3714	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   3715	u32 eecd;
   3716
   3717	eecd = er32(EECD);
   3718
   3719	if (eeprom->type == e1000_eeprom_microwire) {
   3720		eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
   3721		ew32(EECD, eecd);
   3722		E1000_WRITE_FLUSH();
   3723		udelay(eeprom->delay_usec);
   3724
   3725		/* Clock high */
   3726		eecd |= E1000_EECD_SK;
   3727		ew32(EECD, eecd);
   3728		E1000_WRITE_FLUSH();
   3729		udelay(eeprom->delay_usec);
   3730
   3731		/* Select EEPROM */
   3732		eecd |= E1000_EECD_CS;
   3733		ew32(EECD, eecd);
   3734		E1000_WRITE_FLUSH();
   3735		udelay(eeprom->delay_usec);
   3736
   3737		/* Clock low */
   3738		eecd &= ~E1000_EECD_SK;
   3739		ew32(EECD, eecd);
   3740		E1000_WRITE_FLUSH();
   3741		udelay(eeprom->delay_usec);
   3742	} else if (eeprom->type == e1000_eeprom_spi) {
   3743		/* Toggle CS to flush commands */
   3744		eecd |= E1000_EECD_CS;
   3745		ew32(EECD, eecd);
   3746		E1000_WRITE_FLUSH();
   3747		udelay(eeprom->delay_usec);
   3748		eecd &= ~E1000_EECD_CS;
   3749		ew32(EECD, eecd);
   3750		E1000_WRITE_FLUSH();
   3751		udelay(eeprom->delay_usec);
   3752	}
   3753}
   3754
   3755/**
   3756 * e1000_release_eeprom - drop chip select
   3757 * @hw: Struct containing variables accessed by shared code
   3758 *
   3759 * Terminates a command by inverting the EEPROM's chip select pin
   3760 */
   3761static void e1000_release_eeprom(struct e1000_hw *hw)
   3762{
   3763	u32 eecd;
   3764
   3765	eecd = er32(EECD);
   3766
   3767	if (hw->eeprom.type == e1000_eeprom_spi) {
   3768		eecd |= E1000_EECD_CS;	/* Pull CS high */
   3769		eecd &= ~E1000_EECD_SK;	/* Lower SCK */
   3770
   3771		ew32(EECD, eecd);
   3772		E1000_WRITE_FLUSH();
   3773
   3774		udelay(hw->eeprom.delay_usec);
   3775	} else if (hw->eeprom.type == e1000_eeprom_microwire) {
   3776		/* cleanup eeprom */
   3777
   3778		/* CS on Microwire is active-high */
   3779		eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
   3780
   3781		ew32(EECD, eecd);
   3782
   3783		/* Rising edge of clock */
   3784		eecd |= E1000_EECD_SK;
   3785		ew32(EECD, eecd);
   3786		E1000_WRITE_FLUSH();
   3787		udelay(hw->eeprom.delay_usec);
   3788
   3789		/* Falling edge of clock */
   3790		eecd &= ~E1000_EECD_SK;
   3791		ew32(EECD, eecd);
   3792		E1000_WRITE_FLUSH();
   3793		udelay(hw->eeprom.delay_usec);
   3794	}
   3795
   3796	/* Stop requesting EEPROM access */
   3797	if (hw->mac_type > e1000_82544) {
   3798		eecd &= ~E1000_EECD_REQ;
   3799		ew32(EECD, eecd);
   3800	}
   3801}
   3802
   3803/**
   3804 * e1000_spi_eeprom_ready - Reads a 16 bit word from the EEPROM.
   3805 * @hw: Struct containing variables accessed by shared code
   3806 */
   3807static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw)
   3808{
   3809	u16 retry_count = 0;
   3810	u8 spi_stat_reg;
   3811
   3812	/* Read "Status Register" repeatedly until the LSB is cleared.  The
   3813	 * EEPROM will signal that the command has been completed by clearing
   3814	 * bit 0 of the internal status register.  If it's not cleared within
   3815	 * 5 milliseconds, then error out.
   3816	 */
   3817	retry_count = 0;
   3818	do {
   3819		e1000_shift_out_ee_bits(hw, EEPROM_RDSR_OPCODE_SPI,
   3820					hw->eeprom.opcode_bits);
   3821		spi_stat_reg = (u8)e1000_shift_in_ee_bits(hw, 8);
   3822		if (!(spi_stat_reg & EEPROM_STATUS_RDY_SPI))
   3823			break;
   3824
   3825		udelay(5);
   3826		retry_count += 5;
   3827
   3828		e1000_standby_eeprom(hw);
   3829	} while (retry_count < EEPROM_MAX_RETRY_SPI);
   3830
   3831	/* ATMEL SPI write time could vary from 0-20mSec on 3.3V devices (and
   3832	 * only 0-5mSec on 5V devices)
   3833	 */
   3834	if (retry_count >= EEPROM_MAX_RETRY_SPI) {
   3835		e_dbg("SPI EEPROM Status error\n");
   3836		return -E1000_ERR_EEPROM;
   3837	}
   3838
   3839	return E1000_SUCCESS;
   3840}
   3841
   3842/**
   3843 * e1000_read_eeprom - Reads a 16 bit word from the EEPROM.
   3844 * @hw: Struct containing variables accessed by shared code
   3845 * @offset: offset of  word in the EEPROM to read
   3846 * @data: word read from the EEPROM
   3847 * @words: number of words to read
   3848 */
   3849s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
   3850{
   3851	s32 ret;
   3852
   3853	mutex_lock(&e1000_eeprom_lock);
   3854	ret = e1000_do_read_eeprom(hw, offset, words, data);
   3855	mutex_unlock(&e1000_eeprom_lock);
   3856	return ret;
   3857}
   3858
   3859static s32 e1000_do_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
   3860				u16 *data)
   3861{
   3862	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   3863	u32 i = 0;
   3864
   3865	if (hw->mac_type == e1000_ce4100) {
   3866		GBE_CONFIG_FLASH_READ(GBE_CONFIG_BASE_VIRT, offset, words,
   3867				      data);
   3868		return E1000_SUCCESS;
   3869	}
   3870
   3871	/* A check for invalid values:  offset too large, too many words, and
   3872	 * not enough words.
   3873	 */
   3874	if ((offset >= eeprom->word_size) ||
   3875	    (words > eeprom->word_size - offset) ||
   3876	    (words == 0)) {
   3877		e_dbg("\"words\" parameter out of bounds. Words = %d,"
   3878		      "size = %d\n", offset, eeprom->word_size);
   3879		return -E1000_ERR_EEPROM;
   3880	}
   3881
   3882	/* EEPROM's that don't use EERD to read require us to bit-bang the SPI
   3883	 * directly. In this case, we need to acquire the EEPROM so that
   3884	 * FW or other port software does not interrupt.
   3885	 */
   3886	/* Prepare the EEPROM for bit-bang reading */
   3887	if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
   3888		return -E1000_ERR_EEPROM;
   3889
   3890	/* Set up the SPI or Microwire EEPROM for bit-bang reading.  We have
   3891	 * acquired the EEPROM at this point, so any returns should release it
   3892	 */
   3893	if (eeprom->type == e1000_eeprom_spi) {
   3894		u16 word_in;
   3895		u8 read_opcode = EEPROM_READ_OPCODE_SPI;
   3896
   3897		if (e1000_spi_eeprom_ready(hw)) {
   3898			e1000_release_eeprom(hw);
   3899			return -E1000_ERR_EEPROM;
   3900		}
   3901
   3902		e1000_standby_eeprom(hw);
   3903
   3904		/* Some SPI eeproms use the 8th address bit embedded in the
   3905		 * opcode
   3906		 */
   3907		if ((eeprom->address_bits == 8) && (offset >= 128))
   3908			read_opcode |= EEPROM_A8_OPCODE_SPI;
   3909
   3910		/* Send the READ command (opcode + addr)  */
   3911		e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits);
   3912		e1000_shift_out_ee_bits(hw, (u16)(offset * 2),
   3913					eeprom->address_bits);
   3914
   3915		/* Read the data.  The address of the eeprom internally
   3916		 * increments with each byte (spi) being read, saving on the
   3917		 * overhead of eeprom setup and tear-down.  The address counter
   3918		 * will roll over if reading beyond the size of the eeprom, thus
   3919		 * allowing the entire memory to be read starting from any
   3920		 * offset.
   3921		 */
   3922		for (i = 0; i < words; i++) {
   3923			word_in = e1000_shift_in_ee_bits(hw, 16);
   3924			data[i] = (word_in >> 8) | (word_in << 8);
   3925		}
   3926	} else if (eeprom->type == e1000_eeprom_microwire) {
   3927		for (i = 0; i < words; i++) {
   3928			/* Send the READ command (opcode + addr)  */
   3929			e1000_shift_out_ee_bits(hw,
   3930						EEPROM_READ_OPCODE_MICROWIRE,
   3931						eeprom->opcode_bits);
   3932			e1000_shift_out_ee_bits(hw, (u16)(offset + i),
   3933						eeprom->address_bits);
   3934
   3935			/* Read the data.  For microwire, each word requires the
   3936			 * overhead of eeprom setup and tear-down.
   3937			 */
   3938			data[i] = e1000_shift_in_ee_bits(hw, 16);
   3939			e1000_standby_eeprom(hw);
   3940			cond_resched();
   3941		}
   3942	}
   3943
   3944	/* End this read operation */
   3945	e1000_release_eeprom(hw);
   3946
   3947	return E1000_SUCCESS;
   3948}
   3949
   3950/**
   3951 * e1000_validate_eeprom_checksum - Verifies that the EEPROM has a valid checksum
   3952 * @hw: Struct containing variables accessed by shared code
   3953 *
   3954 * Reads the first 64 16 bit words of the EEPROM and sums the values read.
   3955 * If the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
   3956 * valid.
   3957 */
   3958s32 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
   3959{
   3960	u16 checksum = 0;
   3961	u16 i, eeprom_data;
   3962
   3963	for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
   3964		if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
   3965			e_dbg("EEPROM Read Error\n");
   3966			return -E1000_ERR_EEPROM;
   3967		}
   3968		checksum += eeprom_data;
   3969	}
   3970
   3971#ifdef CONFIG_PARISC
   3972	/* This is a signature and not a checksum on HP c8000 */
   3973	if ((hw->subsystem_vendor_id == 0x103C) && (eeprom_data == 0x16d6))
   3974		return E1000_SUCCESS;
   3975
   3976#endif
   3977	if (checksum == (u16)EEPROM_SUM)
   3978		return E1000_SUCCESS;
   3979	else {
   3980		e_dbg("EEPROM Checksum Invalid\n");
   3981		return -E1000_ERR_EEPROM;
   3982	}
   3983}
   3984
   3985/**
   3986 * e1000_update_eeprom_checksum - Calculates/writes the EEPROM checksum
   3987 * @hw: Struct containing variables accessed by shared code
   3988 *
   3989 * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
   3990 * Writes the difference to word offset 63 of the EEPROM.
   3991 */
   3992s32 e1000_update_eeprom_checksum(struct e1000_hw *hw)
   3993{
   3994	u16 checksum = 0;
   3995	u16 i, eeprom_data;
   3996
   3997	for (i = 0; i < EEPROM_CHECKSUM_REG; i++) {
   3998		if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
   3999			e_dbg("EEPROM Read Error\n");
   4000			return -E1000_ERR_EEPROM;
   4001		}
   4002		checksum += eeprom_data;
   4003	}
   4004	checksum = (u16)EEPROM_SUM - checksum;
   4005	if (e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
   4006		e_dbg("EEPROM Write Error\n");
   4007		return -E1000_ERR_EEPROM;
   4008	}
   4009	return E1000_SUCCESS;
   4010}
   4011
   4012/**
   4013 * e1000_write_eeprom - write words to the different EEPROM types.
   4014 * @hw: Struct containing variables accessed by shared code
   4015 * @offset: offset within the EEPROM to be written to
   4016 * @words: number of words to write
   4017 * @data: 16 bit word to be written to the EEPROM
   4018 *
   4019 * If e1000_update_eeprom_checksum is not called after this function, the
   4020 * EEPROM will most likely contain an invalid checksum.
   4021 */
   4022s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
   4023{
   4024	s32 ret;
   4025
   4026	mutex_lock(&e1000_eeprom_lock);
   4027	ret = e1000_do_write_eeprom(hw, offset, words, data);
   4028	mutex_unlock(&e1000_eeprom_lock);
   4029	return ret;
   4030}
   4031
   4032static s32 e1000_do_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words,
   4033				 u16 *data)
   4034{
   4035	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   4036	s32 status = 0;
   4037
   4038	if (hw->mac_type == e1000_ce4100) {
   4039		GBE_CONFIG_FLASH_WRITE(GBE_CONFIG_BASE_VIRT, offset, words,
   4040				       data);
   4041		return E1000_SUCCESS;
   4042	}
   4043
   4044	/* A check for invalid values:  offset too large, too many words, and
   4045	 * not enough words.
   4046	 */
   4047	if ((offset >= eeprom->word_size) ||
   4048	    (words > eeprom->word_size - offset) ||
   4049	    (words == 0)) {
   4050		e_dbg("\"words\" parameter out of bounds\n");
   4051		return -E1000_ERR_EEPROM;
   4052	}
   4053
   4054	/* Prepare the EEPROM for writing  */
   4055	if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
   4056		return -E1000_ERR_EEPROM;
   4057
   4058	if (eeprom->type == e1000_eeprom_microwire) {
   4059		status = e1000_write_eeprom_microwire(hw, offset, words, data);
   4060	} else {
   4061		status = e1000_write_eeprom_spi(hw, offset, words, data);
   4062		msleep(10);
   4063	}
   4064
   4065	/* Done with writing */
   4066	e1000_release_eeprom(hw);
   4067
   4068	return status;
   4069}
   4070
   4071/**
   4072 * e1000_write_eeprom_spi - Writes a 16 bit word to a given offset in an SPI EEPROM.
   4073 * @hw: Struct containing variables accessed by shared code
   4074 * @offset: offset within the EEPROM to be written to
   4075 * @words: number of words to write
   4076 * @data: pointer to array of 8 bit words to be written to the EEPROM
   4077 */
   4078static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset, u16 words,
   4079				  u16 *data)
   4080{
   4081	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   4082	u16 widx = 0;
   4083
   4084	while (widx < words) {
   4085		u8 write_opcode = EEPROM_WRITE_OPCODE_SPI;
   4086
   4087		if (e1000_spi_eeprom_ready(hw))
   4088			return -E1000_ERR_EEPROM;
   4089
   4090		e1000_standby_eeprom(hw);
   4091		cond_resched();
   4092
   4093		/*  Send the WRITE ENABLE command (8 bit opcode )  */
   4094		e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
   4095					eeprom->opcode_bits);
   4096
   4097		e1000_standby_eeprom(hw);
   4098
   4099		/* Some SPI eeproms use the 8th address bit embedded in the
   4100		 * opcode
   4101		 */
   4102		if ((eeprom->address_bits == 8) && (offset >= 128))
   4103			write_opcode |= EEPROM_A8_OPCODE_SPI;
   4104
   4105		/* Send the Write command (8-bit opcode + addr) */
   4106		e1000_shift_out_ee_bits(hw, write_opcode, eeprom->opcode_bits);
   4107
   4108		e1000_shift_out_ee_bits(hw, (u16)((offset + widx) * 2),
   4109					eeprom->address_bits);
   4110
   4111		/* Send the data */
   4112
   4113		/* Loop to allow for up to whole page write (32 bytes) of
   4114		 * eeprom
   4115		 */
   4116		while (widx < words) {
   4117			u16 word_out = data[widx];
   4118
   4119			word_out = (word_out >> 8) | (word_out << 8);
   4120			e1000_shift_out_ee_bits(hw, word_out, 16);
   4121			widx++;
   4122
   4123			/* Some larger eeprom sizes are capable of a 32-byte
   4124			 * PAGE WRITE operation, while the smaller eeproms are
   4125			 * capable of an 8-byte PAGE WRITE operation.  Break the
   4126			 * inner loop to pass new address
   4127			 */
   4128			if ((((offset + widx) * 2) % eeprom->page_size) == 0) {
   4129				e1000_standby_eeprom(hw);
   4130				break;
   4131			}
   4132		}
   4133	}
   4134
   4135	return E1000_SUCCESS;
   4136}
   4137
   4138/**
   4139 * e1000_write_eeprom_microwire - Writes a 16 bit word to a given offset in a Microwire EEPROM.
   4140 * @hw: Struct containing variables accessed by shared code
   4141 * @offset: offset within the EEPROM to be written to
   4142 * @words: number of words to write
   4143 * @data: pointer to array of 8 bit words to be written to the EEPROM
   4144 */
   4145static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
   4146					u16 words, u16 *data)
   4147{
   4148	struct e1000_eeprom_info *eeprom = &hw->eeprom;
   4149	u32 eecd;
   4150	u16 words_written = 0;
   4151	u16 i = 0;
   4152
   4153	/* Send the write enable command to the EEPROM (3-bit opcode plus
   4154	 * 6/8-bit dummy address beginning with 11).  It's less work to include
   4155	 * the 11 of the dummy address as part of the opcode than it is to shift
   4156	 * it over the correct number of bits for the address.  This puts the
   4157	 * EEPROM into write/erase mode.
   4158	 */
   4159	e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE_MICROWIRE,
   4160				(u16)(eeprom->opcode_bits + 2));
   4161
   4162	e1000_shift_out_ee_bits(hw, 0, (u16)(eeprom->address_bits - 2));
   4163
   4164	/* Prepare the EEPROM */
   4165	e1000_standby_eeprom(hw);
   4166
   4167	while (words_written < words) {
   4168		/* Send the Write command (3-bit opcode + addr) */
   4169		e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE_MICROWIRE,
   4170					eeprom->opcode_bits);
   4171
   4172		e1000_shift_out_ee_bits(hw, (u16)(offset + words_written),
   4173					eeprom->address_bits);
   4174
   4175		/* Send the data */
   4176		e1000_shift_out_ee_bits(hw, data[words_written], 16);
   4177
   4178		/* Toggle the CS line.  This in effect tells the EEPROM to
   4179		 * execute the previous command.
   4180		 */
   4181		e1000_standby_eeprom(hw);
   4182
   4183		/* Read DO repeatedly until it is high (equal to '1').  The
   4184		 * EEPROM will signal that the command has been completed by
   4185		 * raising the DO signal. If DO does not go high in 10
   4186		 * milliseconds, then error out.
   4187		 */
   4188		for (i = 0; i < 200; i++) {
   4189			eecd = er32(EECD);
   4190			if (eecd & E1000_EECD_DO)
   4191				break;
   4192			udelay(50);
   4193		}
   4194		if (i == 200) {
   4195			e_dbg("EEPROM Write did not complete\n");
   4196			return -E1000_ERR_EEPROM;
   4197		}
   4198
   4199		/* Recover from write */
   4200		e1000_standby_eeprom(hw);
   4201		cond_resched();
   4202
   4203		words_written++;
   4204	}
   4205
   4206	/* Send the write disable command to the EEPROM (3-bit opcode plus
   4207	 * 6/8-bit dummy address beginning with 10).  It's less work to include
   4208	 * the 10 of the dummy address as part of the opcode than it is to shift
   4209	 * it over the correct number of bits for the address.  This takes the
   4210	 * EEPROM out of write/erase mode.
   4211	 */
   4212	e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE_MICROWIRE,
   4213				(u16)(eeprom->opcode_bits + 2));
   4214
   4215	e1000_shift_out_ee_bits(hw, 0, (u16)(eeprom->address_bits - 2));
   4216
   4217	return E1000_SUCCESS;
   4218}
   4219
   4220/**
   4221 * e1000_read_mac_addr - read the adapters MAC from eeprom
   4222 * @hw: Struct containing variables accessed by shared code
   4223 *
   4224 * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
   4225 * second function of dual function devices
   4226 */
   4227s32 e1000_read_mac_addr(struct e1000_hw *hw)
   4228{
   4229	u16 offset;
   4230	u16 eeprom_data, i;
   4231
   4232	for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
   4233		offset = i >> 1;
   4234		if (e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
   4235			e_dbg("EEPROM Read Error\n");
   4236			return -E1000_ERR_EEPROM;
   4237		}
   4238		hw->perm_mac_addr[i] = (u8)(eeprom_data & 0x00FF);
   4239		hw->perm_mac_addr[i + 1] = (u8)(eeprom_data >> 8);
   4240	}
   4241
   4242	switch (hw->mac_type) {
   4243	default:
   4244		break;
   4245	case e1000_82546:
   4246	case e1000_82546_rev_3:
   4247		if (er32(STATUS) & E1000_STATUS_FUNC_1)
   4248			hw->perm_mac_addr[5] ^= 0x01;
   4249		break;
   4250	}
   4251
   4252	for (i = 0; i < NODE_ADDRESS_SIZE; i++)
   4253		hw->mac_addr[i] = hw->perm_mac_addr[i];
   4254	return E1000_SUCCESS;
   4255}
   4256
   4257/**
   4258 * e1000_init_rx_addrs - Initializes receive address filters.
   4259 * @hw: Struct containing variables accessed by shared code
   4260 *
   4261 * Places the MAC address in receive address register 0 and clears the rest
   4262 * of the receive address registers. Clears the multicast table. Assumes
   4263 * the receiver is in reset when the routine is called.
   4264 */
   4265static void e1000_init_rx_addrs(struct e1000_hw *hw)
   4266{
   4267	u32 i;
   4268	u32 rar_num;
   4269
   4270	/* Setup the receive address. */
   4271	e_dbg("Programming MAC Address into RAR[0]\n");
   4272
   4273	e1000_rar_set(hw, hw->mac_addr, 0);
   4274
   4275	rar_num = E1000_RAR_ENTRIES;
   4276
   4277	/* Zero out the following 14 receive addresses. RAR[15] is for
   4278	 * manageability
   4279	 */
   4280	e_dbg("Clearing RAR[1-14]\n");
   4281	for (i = 1; i < rar_num; i++) {
   4282		E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
   4283		E1000_WRITE_FLUSH();
   4284		E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
   4285		E1000_WRITE_FLUSH();
   4286	}
   4287}
   4288
   4289/**
   4290 * e1000_hash_mc_addr - Hashes an address to determine its location in the multicast table
   4291 * @hw: Struct containing variables accessed by shared code
   4292 * @mc_addr: the multicast address to hash
   4293 */
   4294u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
   4295{
   4296	u32 hash_value = 0;
   4297
   4298	/* The portion of the address that is used for the hash table is
   4299	 * determined by the mc_filter_type setting.
   4300	 */
   4301	switch (hw->mc_filter_type) {
   4302		/* [0] [1] [2] [3] [4] [5]
   4303		 * 01  AA  00  12  34  56
   4304		 * LSB                 MSB
   4305		 */
   4306	case 0:
   4307		/* [47:36] i.e. 0x563 for above example address */
   4308		hash_value = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
   4309		break;
   4310	case 1:
   4311		/* [46:35] i.e. 0xAC6 for above example address */
   4312		hash_value = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
   4313		break;
   4314	case 2:
   4315		/* [45:34] i.e. 0x5D8 for above example address */
   4316		hash_value = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
   4317		break;
   4318	case 3:
   4319		/* [43:32] i.e. 0x634 for above example address */
   4320		hash_value = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
   4321		break;
   4322	}
   4323
   4324	hash_value &= 0xFFF;
   4325	return hash_value;
   4326}
   4327
   4328/**
   4329 * e1000_rar_set - Puts an ethernet address into a receive address register.
   4330 * @hw: Struct containing variables accessed by shared code
   4331 * @addr: Address to put into receive address register
   4332 * @index: Receive address register to write
   4333 */
   4334void e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
   4335{
   4336	u32 rar_low, rar_high;
   4337
   4338	/* HW expects these in little endian so we reverse the byte order
   4339	 * from network order (big endian) to little endian
   4340	 */
   4341	rar_low = ((u32)addr[0] | ((u32)addr[1] << 8) |
   4342		   ((u32)addr[2] << 16) | ((u32)addr[3] << 24));
   4343	rar_high = ((u32)addr[4] | ((u32)addr[5] << 8));
   4344
   4345	/* Disable Rx and flush all Rx frames before enabling RSS to avoid Rx
   4346	 * unit hang.
   4347	 *
   4348	 * Description:
   4349	 * If there are any Rx frames queued up or otherwise present in the HW
   4350	 * before RSS is enabled, and then we enable RSS, the HW Rx unit will
   4351	 * hang.  To work around this issue, we have to disable receives and
   4352	 * flush out all Rx frames before we enable RSS. To do so, we modify we
   4353	 * redirect all Rx traffic to manageability and then reset the HW.
   4354	 * This flushes away Rx frames, and (since the redirections to
   4355	 * manageability persists across resets) keeps new ones from coming in
   4356	 * while we work.  Then, we clear the Address Valid AV bit for all MAC
   4357	 * addresses and undo the re-direction to manageability.
   4358	 * Now, frames are coming in again, but the MAC won't accept them, so
   4359	 * far so good.  We now proceed to initialize RSS (if necessary) and
   4360	 * configure the Rx unit.  Last, we re-enable the AV bits and continue
   4361	 * on our merry way.
   4362	 */
   4363	switch (hw->mac_type) {
   4364	default:
   4365		/* Indicate to hardware the Address is Valid. */
   4366		rar_high |= E1000_RAH_AV;
   4367		break;
   4368	}
   4369
   4370	E1000_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
   4371	E1000_WRITE_FLUSH();
   4372	E1000_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
   4373	E1000_WRITE_FLUSH();
   4374}
   4375
   4376/**
   4377 * e1000_write_vfta - Writes a value to the specified offset in the VLAN filter table.
   4378 * @hw: Struct containing variables accessed by shared code
   4379 * @offset: Offset in VLAN filer table to write
   4380 * @value: Value to write into VLAN filter table
   4381 */
   4382void e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
   4383{
   4384	u32 temp;
   4385
   4386	if ((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
   4387		temp = E1000_READ_REG_ARRAY(hw, VFTA, (offset - 1));
   4388		E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
   4389		E1000_WRITE_FLUSH();
   4390		E1000_WRITE_REG_ARRAY(hw, VFTA, (offset - 1), temp);
   4391		E1000_WRITE_FLUSH();
   4392	} else {
   4393		E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
   4394		E1000_WRITE_FLUSH();
   4395	}
   4396}
   4397
   4398/**
   4399 * e1000_clear_vfta - Clears the VLAN filer table
   4400 * @hw: Struct containing variables accessed by shared code
   4401 */
   4402static void e1000_clear_vfta(struct e1000_hw *hw)
   4403{
   4404	u32 offset;
   4405
   4406	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
   4407		E1000_WRITE_REG_ARRAY(hw, VFTA, offset, 0);
   4408		E1000_WRITE_FLUSH();
   4409	}
   4410}
   4411
   4412static s32 e1000_id_led_init(struct e1000_hw *hw)
   4413{
   4414	u32 ledctl;
   4415	const u32 ledctl_mask = 0x000000FF;
   4416	const u32 ledctl_on = E1000_LEDCTL_MODE_LED_ON;
   4417	const u32 ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
   4418	u16 eeprom_data, i, temp;
   4419	const u16 led_mask = 0x0F;
   4420
   4421	if (hw->mac_type < e1000_82540) {
   4422		/* Nothing to do */
   4423		return E1000_SUCCESS;
   4424	}
   4425
   4426	ledctl = er32(LEDCTL);
   4427	hw->ledctl_default = ledctl;
   4428	hw->ledctl_mode1 = hw->ledctl_default;
   4429	hw->ledctl_mode2 = hw->ledctl_default;
   4430
   4431	if (e1000_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
   4432		e_dbg("EEPROM Read Error\n");
   4433		return -E1000_ERR_EEPROM;
   4434	}
   4435
   4436	if ((eeprom_data == ID_LED_RESERVED_0000) ||
   4437	    (eeprom_data == ID_LED_RESERVED_FFFF)) {
   4438		eeprom_data = ID_LED_DEFAULT;
   4439	}
   4440
   4441	for (i = 0; i < 4; i++) {
   4442		temp = (eeprom_data >> (i << 2)) & led_mask;
   4443		switch (temp) {
   4444		case ID_LED_ON1_DEF2:
   4445		case ID_LED_ON1_ON2:
   4446		case ID_LED_ON1_OFF2:
   4447			hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
   4448			hw->ledctl_mode1 |= ledctl_on << (i << 3);
   4449			break;
   4450		case ID_LED_OFF1_DEF2:
   4451		case ID_LED_OFF1_ON2:
   4452		case ID_LED_OFF1_OFF2:
   4453			hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
   4454			hw->ledctl_mode1 |= ledctl_off << (i << 3);
   4455			break;
   4456		default:
   4457			/* Do nothing */
   4458			break;
   4459		}
   4460		switch (temp) {
   4461		case ID_LED_DEF1_ON2:
   4462		case ID_LED_ON1_ON2:
   4463		case ID_LED_OFF1_ON2:
   4464			hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
   4465			hw->ledctl_mode2 |= ledctl_on << (i << 3);
   4466			break;
   4467		case ID_LED_DEF1_OFF2:
   4468		case ID_LED_ON1_OFF2:
   4469		case ID_LED_OFF1_OFF2:
   4470			hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
   4471			hw->ledctl_mode2 |= ledctl_off << (i << 3);
   4472			break;
   4473		default:
   4474			/* Do nothing */
   4475			break;
   4476		}
   4477	}
   4478	return E1000_SUCCESS;
   4479}
   4480
   4481/**
   4482 * e1000_setup_led
   4483 * @hw: Struct containing variables accessed by shared code
   4484 *
   4485 * Prepares SW controlable LED for use and saves the current state of the LED.
   4486 */
   4487s32 e1000_setup_led(struct e1000_hw *hw)
   4488{
   4489	u32 ledctl;
   4490	s32 ret_val = E1000_SUCCESS;
   4491
   4492	switch (hw->mac_type) {
   4493	case e1000_82542_rev2_0:
   4494	case e1000_82542_rev2_1:
   4495	case e1000_82543:
   4496	case e1000_82544:
   4497		/* No setup necessary */
   4498		break;
   4499	case e1000_82541:
   4500	case e1000_82547:
   4501	case e1000_82541_rev_2:
   4502	case e1000_82547_rev_2:
   4503		/* Turn off PHY Smart Power Down (if enabled) */
   4504		ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO,
   4505					     &hw->phy_spd_default);
   4506		if (ret_val)
   4507			return ret_val;
   4508		ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
   4509					      (u16)(hw->phy_spd_default &
   4510						     ~IGP01E1000_GMII_SPD));
   4511		if (ret_val)
   4512			return ret_val;
   4513		fallthrough;
   4514	default:
   4515		if (hw->media_type == e1000_media_type_fiber) {
   4516			ledctl = er32(LEDCTL);
   4517			/* Save current LEDCTL settings */
   4518			hw->ledctl_default = ledctl;
   4519			/* Turn off LED0 */
   4520			ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
   4521				    E1000_LEDCTL_LED0_BLINK |
   4522				    E1000_LEDCTL_LED0_MODE_MASK);
   4523			ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
   4524				   E1000_LEDCTL_LED0_MODE_SHIFT);
   4525			ew32(LEDCTL, ledctl);
   4526		} else if (hw->media_type == e1000_media_type_copper)
   4527			ew32(LEDCTL, hw->ledctl_mode1);
   4528		break;
   4529	}
   4530
   4531	return E1000_SUCCESS;
   4532}
   4533
   4534/**
   4535 * e1000_cleanup_led - Restores the saved state of the SW controlable LED.
   4536 * @hw: Struct containing variables accessed by shared code
   4537 */
   4538s32 e1000_cleanup_led(struct e1000_hw *hw)
   4539{
   4540	s32 ret_val = E1000_SUCCESS;
   4541
   4542	switch (hw->mac_type) {
   4543	case e1000_82542_rev2_0:
   4544	case e1000_82542_rev2_1:
   4545	case e1000_82543:
   4546	case e1000_82544:
   4547		/* No cleanup necessary */
   4548		break;
   4549	case e1000_82541:
   4550	case e1000_82547:
   4551	case e1000_82541_rev_2:
   4552	case e1000_82547_rev_2:
   4553		/* Turn on PHY Smart Power Down (if previously enabled) */
   4554		ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
   4555					      hw->phy_spd_default);
   4556		if (ret_val)
   4557			return ret_val;
   4558		fallthrough;
   4559	default:
   4560		/* Restore LEDCTL settings */
   4561		ew32(LEDCTL, hw->ledctl_default);
   4562		break;
   4563	}
   4564
   4565	return E1000_SUCCESS;
   4566}
   4567
   4568/**
   4569 * e1000_led_on - Turns on the software controllable LED
   4570 * @hw: Struct containing variables accessed by shared code
   4571 */
   4572s32 e1000_led_on(struct e1000_hw *hw)
   4573{
   4574	u32 ctrl = er32(CTRL);
   4575
   4576	switch (hw->mac_type) {
   4577	case e1000_82542_rev2_0:
   4578	case e1000_82542_rev2_1:
   4579	case e1000_82543:
   4580		/* Set SW Defineable Pin 0 to turn on the LED */
   4581		ctrl |= E1000_CTRL_SWDPIN0;
   4582		ctrl |= E1000_CTRL_SWDPIO0;
   4583		break;
   4584	case e1000_82544:
   4585		if (hw->media_type == e1000_media_type_fiber) {
   4586			/* Set SW Defineable Pin 0 to turn on the LED */
   4587			ctrl |= E1000_CTRL_SWDPIN0;
   4588			ctrl |= E1000_CTRL_SWDPIO0;
   4589		} else {
   4590			/* Clear SW Defineable Pin 0 to turn on the LED */
   4591			ctrl &= ~E1000_CTRL_SWDPIN0;
   4592			ctrl |= E1000_CTRL_SWDPIO0;
   4593		}
   4594		break;
   4595	default:
   4596		if (hw->media_type == e1000_media_type_fiber) {
   4597			/* Clear SW Defineable Pin 0 to turn on the LED */
   4598			ctrl &= ~E1000_CTRL_SWDPIN0;
   4599			ctrl |= E1000_CTRL_SWDPIO0;
   4600		} else if (hw->media_type == e1000_media_type_copper) {
   4601			ew32(LEDCTL, hw->ledctl_mode2);
   4602			return E1000_SUCCESS;
   4603		}
   4604		break;
   4605	}
   4606
   4607	ew32(CTRL, ctrl);
   4608
   4609	return E1000_SUCCESS;
   4610}
   4611
   4612/**
   4613 * e1000_led_off - Turns off the software controllable LED
   4614 * @hw: Struct containing variables accessed by shared code
   4615 */
   4616s32 e1000_led_off(struct e1000_hw *hw)
   4617{
   4618	u32 ctrl = er32(CTRL);
   4619
   4620	switch (hw->mac_type) {
   4621	case e1000_82542_rev2_0:
   4622	case e1000_82542_rev2_1:
   4623	case e1000_82543:
   4624		/* Clear SW Defineable Pin 0 to turn off the LED */
   4625		ctrl &= ~E1000_CTRL_SWDPIN0;
   4626		ctrl |= E1000_CTRL_SWDPIO0;
   4627		break;
   4628	case e1000_82544:
   4629		if (hw->media_type == e1000_media_type_fiber) {
   4630			/* Clear SW Defineable Pin 0 to turn off the LED */
   4631			ctrl &= ~E1000_CTRL_SWDPIN0;
   4632			ctrl |= E1000_CTRL_SWDPIO0;
   4633		} else {
   4634			/* Set SW Defineable Pin 0 to turn off the LED */
   4635			ctrl |= E1000_CTRL_SWDPIN0;
   4636			ctrl |= E1000_CTRL_SWDPIO0;
   4637		}
   4638		break;
   4639	default:
   4640		if (hw->media_type == e1000_media_type_fiber) {
   4641			/* Set SW Defineable Pin 0 to turn off the LED */
   4642			ctrl |= E1000_CTRL_SWDPIN0;
   4643			ctrl |= E1000_CTRL_SWDPIO0;
   4644		} else if (hw->media_type == e1000_media_type_copper) {
   4645			ew32(LEDCTL, hw->ledctl_mode1);
   4646			return E1000_SUCCESS;
   4647		}
   4648		break;
   4649	}
   4650
   4651	ew32(CTRL, ctrl);
   4652
   4653	return E1000_SUCCESS;
   4654}
   4655
   4656/**
   4657 * e1000_clear_hw_cntrs - Clears all hardware statistics counters.
   4658 * @hw: Struct containing variables accessed by shared code
   4659 */
   4660static void e1000_clear_hw_cntrs(struct e1000_hw *hw)
   4661{
   4662	er32(CRCERRS);
   4663	er32(SYMERRS);
   4664	er32(MPC);
   4665	er32(SCC);
   4666	er32(ECOL);
   4667	er32(MCC);
   4668	er32(LATECOL);
   4669	er32(COLC);
   4670	er32(DC);
   4671	er32(SEC);
   4672	er32(RLEC);
   4673	er32(XONRXC);
   4674	er32(XONTXC);
   4675	er32(XOFFRXC);
   4676	er32(XOFFTXC);
   4677	er32(FCRUC);
   4678
   4679	er32(PRC64);
   4680	er32(PRC127);
   4681	er32(PRC255);
   4682	er32(PRC511);
   4683	er32(PRC1023);
   4684	er32(PRC1522);
   4685
   4686	er32(GPRC);
   4687	er32(BPRC);
   4688	er32(MPRC);
   4689	er32(GPTC);
   4690	er32(GORCL);
   4691	er32(GORCH);
   4692	er32(GOTCL);
   4693	er32(GOTCH);
   4694	er32(RNBC);
   4695	er32(RUC);
   4696	er32(RFC);
   4697	er32(ROC);
   4698	er32(RJC);
   4699	er32(TORL);
   4700	er32(TORH);
   4701	er32(TOTL);
   4702	er32(TOTH);
   4703	er32(TPR);
   4704	er32(TPT);
   4705
   4706	er32(PTC64);
   4707	er32(PTC127);
   4708	er32(PTC255);
   4709	er32(PTC511);
   4710	er32(PTC1023);
   4711	er32(PTC1522);
   4712
   4713	er32(MPTC);
   4714	er32(BPTC);
   4715
   4716	if (hw->mac_type < e1000_82543)
   4717		return;
   4718
   4719	er32(ALGNERRC);
   4720	er32(RXERRC);
   4721	er32(TNCRS);
   4722	er32(CEXTERR);
   4723	er32(TSCTC);
   4724	er32(TSCTFC);
   4725
   4726	if (hw->mac_type <= e1000_82544)
   4727		return;
   4728
   4729	er32(MGTPRC);
   4730	er32(MGTPDC);
   4731	er32(MGTPTC);
   4732}
   4733
   4734/**
   4735 * e1000_reset_adaptive - Resets Adaptive IFS to its default state.
   4736 * @hw: Struct containing variables accessed by shared code
   4737 *
   4738 * Call this after e1000_init_hw. You may override the IFS defaults by setting
   4739 * hw->ifs_params_forced to true. However, you must initialize hw->
   4740 * current_ifs_val, ifs_min_val, ifs_max_val, ifs_step_size, and ifs_ratio
   4741 * before calling this function.
   4742 */
   4743void e1000_reset_adaptive(struct e1000_hw *hw)
   4744{
   4745	if (hw->adaptive_ifs) {
   4746		if (!hw->ifs_params_forced) {
   4747			hw->current_ifs_val = 0;
   4748			hw->ifs_min_val = IFS_MIN;
   4749			hw->ifs_max_val = IFS_MAX;
   4750			hw->ifs_step_size = IFS_STEP;
   4751			hw->ifs_ratio = IFS_RATIO;
   4752		}
   4753		hw->in_ifs_mode = false;
   4754		ew32(AIT, 0);
   4755	} else {
   4756		e_dbg("Not in Adaptive IFS mode!\n");
   4757	}
   4758}
   4759
   4760/**
   4761 * e1000_update_adaptive - update adaptive IFS
   4762 * @hw: Struct containing variables accessed by shared code
   4763 *
   4764 * Called during the callback/watchdog routine to update IFS value based on
   4765 * the ratio of transmits to collisions.
   4766 */
   4767void e1000_update_adaptive(struct e1000_hw *hw)
   4768{
   4769	if (hw->adaptive_ifs) {
   4770		if ((hw->collision_delta * hw->ifs_ratio) > hw->tx_packet_delta) {
   4771			if (hw->tx_packet_delta > MIN_NUM_XMITS) {
   4772				hw->in_ifs_mode = true;
   4773				if (hw->current_ifs_val < hw->ifs_max_val) {
   4774					if (hw->current_ifs_val == 0)
   4775						hw->current_ifs_val =
   4776						    hw->ifs_min_val;
   4777					else
   4778						hw->current_ifs_val +=
   4779						    hw->ifs_step_size;
   4780					ew32(AIT, hw->current_ifs_val);
   4781				}
   4782			}
   4783		} else {
   4784			if (hw->in_ifs_mode &&
   4785			    (hw->tx_packet_delta <= MIN_NUM_XMITS)) {
   4786				hw->current_ifs_val = 0;
   4787				hw->in_ifs_mode = false;
   4788				ew32(AIT, 0);
   4789			}
   4790		}
   4791	} else {
   4792		e_dbg("Not in Adaptive IFS mode!\n");
   4793	}
   4794}
   4795
   4796/**
   4797 * e1000_get_bus_info
   4798 * @hw: Struct containing variables accessed by shared code
   4799 *
   4800 * Gets the current PCI bus type, speed, and width of the hardware
   4801 */
   4802void e1000_get_bus_info(struct e1000_hw *hw)
   4803{
   4804	u32 status;
   4805
   4806	switch (hw->mac_type) {
   4807	case e1000_82542_rev2_0:
   4808	case e1000_82542_rev2_1:
   4809		hw->bus_type = e1000_bus_type_pci;
   4810		hw->bus_speed = e1000_bus_speed_unknown;
   4811		hw->bus_width = e1000_bus_width_unknown;
   4812		break;
   4813	default:
   4814		status = er32(STATUS);
   4815		hw->bus_type = (status & E1000_STATUS_PCIX_MODE) ?
   4816		    e1000_bus_type_pcix : e1000_bus_type_pci;
   4817
   4818		if (hw->device_id == E1000_DEV_ID_82546EB_QUAD_COPPER) {
   4819			hw->bus_speed = (hw->bus_type == e1000_bus_type_pci) ?
   4820			    e1000_bus_speed_66 : e1000_bus_speed_120;
   4821		} else if (hw->bus_type == e1000_bus_type_pci) {
   4822			hw->bus_speed = (status & E1000_STATUS_PCI66) ?
   4823			    e1000_bus_speed_66 : e1000_bus_speed_33;
   4824		} else {
   4825			switch (status & E1000_STATUS_PCIX_SPEED) {
   4826			case E1000_STATUS_PCIX_SPEED_66:
   4827				hw->bus_speed = e1000_bus_speed_66;
   4828				break;
   4829			case E1000_STATUS_PCIX_SPEED_100:
   4830				hw->bus_speed = e1000_bus_speed_100;
   4831				break;
   4832			case E1000_STATUS_PCIX_SPEED_133:
   4833				hw->bus_speed = e1000_bus_speed_133;
   4834				break;
   4835			default:
   4836				hw->bus_speed = e1000_bus_speed_reserved;
   4837				break;
   4838			}
   4839		}
   4840		hw->bus_width = (status & E1000_STATUS_BUS64) ?
   4841		    e1000_bus_width_64 : e1000_bus_width_32;
   4842		break;
   4843	}
   4844}
   4845
   4846/**
   4847 * e1000_write_reg_io
   4848 * @hw: Struct containing variables accessed by shared code
   4849 * @offset: offset to write to
   4850 * @value: value to write
   4851 *
   4852 * Writes a value to one of the devices registers using port I/O (as opposed to
   4853 * memory mapped I/O). Only 82544 and newer devices support port I/O.
   4854 */
   4855static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value)
   4856{
   4857	unsigned long io_addr = hw->io_base;
   4858	unsigned long io_data = hw->io_base + 4;
   4859
   4860	e1000_io_write(hw, io_addr, offset);
   4861	e1000_io_write(hw, io_data, value);
   4862}
   4863
   4864/**
   4865 * e1000_get_cable_length - Estimates the cable length.
   4866 * @hw: Struct containing variables accessed by shared code
   4867 * @min_length: The estimated minimum length
   4868 * @max_length: The estimated maximum length
   4869 *
   4870 * returns: - E1000_ERR_XXX
   4871 *            E1000_SUCCESS
   4872 *
   4873 * This function always returns a ranged length (minimum & maximum).
   4874 * So for M88 phy's, this function interprets the one value returned from the
   4875 * register to the minimum and maximum range.
   4876 * For IGP phy's, the function calculates the range by the AGC registers.
   4877 */
   4878static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
   4879				  u16 *max_length)
   4880{
   4881	s32 ret_val;
   4882	u16 agc_value = 0;
   4883	u16 i, phy_data;
   4884	u16 cable_length;
   4885
   4886	*min_length = *max_length = 0;
   4887
   4888	/* Use old method for Phy older than IGP */
   4889	if (hw->phy_type == e1000_phy_m88) {
   4890		ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
   4891					     &phy_data);
   4892		if (ret_val)
   4893			return ret_val;
   4894		cable_length = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
   4895		    M88E1000_PSSR_CABLE_LENGTH_SHIFT;
   4896
   4897		/* Convert the enum value to ranged values */
   4898		switch (cable_length) {
   4899		case e1000_cable_length_50:
   4900			*min_length = 0;
   4901			*max_length = e1000_igp_cable_length_50;
   4902			break;
   4903		case e1000_cable_length_50_80:
   4904			*min_length = e1000_igp_cable_length_50;
   4905			*max_length = e1000_igp_cable_length_80;
   4906			break;
   4907		case e1000_cable_length_80_110:
   4908			*min_length = e1000_igp_cable_length_80;
   4909			*max_length = e1000_igp_cable_length_110;
   4910			break;
   4911		case e1000_cable_length_110_140:
   4912			*min_length = e1000_igp_cable_length_110;
   4913			*max_length = e1000_igp_cable_length_140;
   4914			break;
   4915		case e1000_cable_length_140:
   4916			*min_length = e1000_igp_cable_length_140;
   4917			*max_length = e1000_igp_cable_length_170;
   4918			break;
   4919		default:
   4920			return -E1000_ERR_PHY;
   4921		}
   4922	} else if (hw->phy_type == e1000_phy_igp) {	/* For IGP PHY */
   4923		u16 cur_agc_value;
   4924		u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
   4925		static const u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {
   4926		       IGP01E1000_PHY_AGC_A,
   4927		       IGP01E1000_PHY_AGC_B,
   4928		       IGP01E1000_PHY_AGC_C,
   4929		       IGP01E1000_PHY_AGC_D
   4930		};
   4931		/* Read the AGC registers for all channels */
   4932		for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
   4933			ret_val =
   4934			    e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
   4935			if (ret_val)
   4936				return ret_val;
   4937
   4938			cur_agc_value = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT;
   4939
   4940			/* Value bound check. */
   4941			if ((cur_agc_value >=
   4942			     IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
   4943			    (cur_agc_value == 0))
   4944				return -E1000_ERR_PHY;
   4945
   4946			agc_value += cur_agc_value;
   4947
   4948			/* Update minimal AGC value. */
   4949			if (min_agc_value > cur_agc_value)
   4950				min_agc_value = cur_agc_value;
   4951		}
   4952
   4953		/* Remove the minimal AGC result for length < 50m */
   4954		if (agc_value <
   4955		    IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) {
   4956			agc_value -= min_agc_value;
   4957
   4958			/* Get the average length of the remaining 3 channels */
   4959			agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
   4960		} else {
   4961			/* Get the average length of all the 4 channels. */
   4962			agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
   4963		}
   4964
   4965		/* Set the range of the calculated length. */
   4966		*min_length = ((e1000_igp_cable_length_table[agc_value] -
   4967				IGP01E1000_AGC_RANGE) > 0) ?
   4968		    (e1000_igp_cable_length_table[agc_value] -
   4969		     IGP01E1000_AGC_RANGE) : 0;
   4970		*max_length = e1000_igp_cable_length_table[agc_value] +
   4971		    IGP01E1000_AGC_RANGE;
   4972	}
   4973
   4974	return E1000_SUCCESS;
   4975}
   4976
   4977/**
   4978 * e1000_check_polarity - Check the cable polarity
   4979 * @hw: Struct containing variables accessed by shared code
   4980 * @polarity: output parameter : 0 - Polarity is not reversed
   4981 *                               1 - Polarity is reversed.
   4982 *
   4983 * returns: - E1000_ERR_XXX
   4984 *            E1000_SUCCESS
   4985 *
   4986 * For phy's older than IGP, this function simply reads the polarity bit in the
   4987 * Phy Status register.  For IGP phy's, this bit is valid only if link speed is
   4988 * 10 Mbps.  If the link speed is 100 Mbps there is no polarity so this bit will
   4989 * return 0.  If the link speed is 1000 Mbps the polarity status is in the
   4990 * IGP01E1000_PHY_PCS_INIT_REG.
   4991 */
   4992static s32 e1000_check_polarity(struct e1000_hw *hw,
   4993				e1000_rev_polarity *polarity)
   4994{
   4995	s32 ret_val;
   4996	u16 phy_data;
   4997
   4998	if (hw->phy_type == e1000_phy_m88) {
   4999		/* return the Polarity bit in the Status register. */
   5000		ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
   5001					     &phy_data);
   5002		if (ret_val)
   5003			return ret_val;
   5004		*polarity = ((phy_data & M88E1000_PSSR_REV_POLARITY) >>
   5005			     M88E1000_PSSR_REV_POLARITY_SHIFT) ?
   5006		    e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
   5007
   5008	} else if (hw->phy_type == e1000_phy_igp) {
   5009		/* Read the Status register to check the speed */
   5010		ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS,
   5011					     &phy_data);
   5012		if (ret_val)
   5013			return ret_val;
   5014
   5015		/* If speed is 1000 Mbps, must read the
   5016		 * IGP01E1000_PHY_PCS_INIT_REG to find the polarity status
   5017		 */
   5018		if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
   5019		    IGP01E1000_PSSR_SPEED_1000MBPS) {
   5020			/* Read the GIG initialization PCS register (0x00B4) */
   5021			ret_val =
   5022			    e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG,
   5023					       &phy_data);
   5024			if (ret_val)
   5025				return ret_val;
   5026
   5027			/* Check the polarity bits */
   5028			*polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ?
   5029			    e1000_rev_polarity_reversed :
   5030			    e1000_rev_polarity_normal;
   5031		} else {
   5032			/* For 10 Mbps, read the polarity bit in the status
   5033			 * register. (for 100 Mbps this bit is always 0)
   5034			 */
   5035			*polarity =
   5036			    (phy_data & IGP01E1000_PSSR_POLARITY_REVERSED) ?
   5037			    e1000_rev_polarity_reversed :
   5038			    e1000_rev_polarity_normal;
   5039		}
   5040	}
   5041	return E1000_SUCCESS;
   5042}
   5043
   5044/**
   5045 * e1000_check_downshift - Check if Downshift occurred
   5046 * @hw: Struct containing variables accessed by shared code
   5047 *
   5048 * returns: - E1000_ERR_XXX
   5049 *            E1000_SUCCESS
   5050 *
   5051 * For phy's older than IGP, this function reads the Downshift bit in the Phy
   5052 * Specific Status register.  For IGP phy's, it reads the Downgrade bit in the
   5053 * Link Health register.  In IGP this bit is latched high, so the driver must
   5054 * read it immediately after link is established.
   5055 */
   5056static s32 e1000_check_downshift(struct e1000_hw *hw)
   5057{
   5058	s32 ret_val;
   5059	u16 phy_data;
   5060
   5061	if (hw->phy_type == e1000_phy_igp) {
   5062		ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
   5063					     &phy_data);
   5064		if (ret_val)
   5065			return ret_val;
   5066
   5067		hw->speed_downgraded =
   5068		    (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0;
   5069	} else if (hw->phy_type == e1000_phy_m88) {
   5070		ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
   5071					     &phy_data);
   5072		if (ret_val)
   5073			return ret_val;
   5074
   5075		hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >>
   5076		    M88E1000_PSSR_DOWNSHIFT_SHIFT;
   5077	}
   5078
   5079	return E1000_SUCCESS;
   5080}
   5081
   5082static const u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] = {
   5083	IGP01E1000_PHY_AGC_PARAM_A,
   5084	IGP01E1000_PHY_AGC_PARAM_B,
   5085	IGP01E1000_PHY_AGC_PARAM_C,
   5086	IGP01E1000_PHY_AGC_PARAM_D
   5087};
   5088
   5089static s32 e1000_1000Mb_check_cable_length(struct e1000_hw *hw)
   5090{
   5091	u16 min_length, max_length;
   5092	u16 phy_data, i;
   5093	s32 ret_val;
   5094
   5095	ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
   5096	if (ret_val)
   5097		return ret_val;
   5098
   5099	if (hw->dsp_config_state != e1000_dsp_config_enabled)
   5100		return 0;
   5101
   5102	if (min_length >= e1000_igp_cable_length_50) {
   5103		for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
   5104			ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i],
   5105						     &phy_data);
   5106			if (ret_val)
   5107				return ret_val;
   5108
   5109			phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
   5110
   5111			ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i],
   5112						      phy_data);
   5113			if (ret_val)
   5114				return ret_val;
   5115		}
   5116		hw->dsp_config_state = e1000_dsp_config_activated;
   5117	} else {
   5118		u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
   5119		u32 idle_errs = 0;
   5120
   5121		/* clear previous idle error counts */
   5122		ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
   5123		if (ret_val)
   5124			return ret_val;
   5125
   5126		for (i = 0; i < ffe_idle_err_timeout; i++) {
   5127			udelay(1000);
   5128			ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
   5129						     &phy_data);
   5130			if (ret_val)
   5131				return ret_val;
   5132
   5133			idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
   5134			if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
   5135				hw->ffe_config_state = e1000_ffe_config_active;
   5136
   5137				ret_val = e1000_write_phy_reg(hw,
   5138							      IGP01E1000_PHY_DSP_FFE,
   5139							      IGP01E1000_PHY_DSP_FFE_CM_CP);
   5140				if (ret_val)
   5141					return ret_val;
   5142				break;
   5143			}
   5144
   5145			if (idle_errs)
   5146				ffe_idle_err_timeout =
   5147					    FFE_IDLE_ERR_COUNT_TIMEOUT_100;
   5148		}
   5149	}
   5150
   5151	return 0;
   5152}
   5153
   5154/**
   5155 * e1000_config_dsp_after_link_change
   5156 * @hw: Struct containing variables accessed by shared code
   5157 * @link_up: was link up at the time this was called
   5158 *
   5159 * returns: - E1000_ERR_PHY if fail to read/write the PHY
   5160 *            E1000_SUCCESS at any other case.
   5161 *
   5162 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
   5163 * gigabit link is achieved to improve link quality.
   5164 */
   5165
   5166static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
   5167{
   5168	s32 ret_val;
   5169	u16 phy_data, phy_saved_data, speed, duplex, i;
   5170
   5171	if (hw->phy_type != e1000_phy_igp)
   5172		return E1000_SUCCESS;
   5173
   5174	if (link_up) {
   5175		ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
   5176		if (ret_val) {
   5177			e_dbg("Error getting link speed and duplex\n");
   5178			return ret_val;
   5179		}
   5180
   5181		if (speed == SPEED_1000) {
   5182			ret_val = e1000_1000Mb_check_cable_length(hw);
   5183			if (ret_val)
   5184				return ret_val;
   5185		}
   5186	} else {
   5187		if (hw->dsp_config_state == e1000_dsp_config_activated) {
   5188			/* Save off the current value of register 0x2F5B to be
   5189			 * restored at the end of the routines.
   5190			 */
   5191			ret_val =
   5192			    e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
   5193
   5194			if (ret_val)
   5195				return ret_val;
   5196
   5197			/* Disable the PHY transmitter */
   5198			ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
   5199
   5200			if (ret_val)
   5201				return ret_val;
   5202
   5203			msleep(20);
   5204
   5205			ret_val = e1000_write_phy_reg(hw, 0x0000,
   5206						      IGP01E1000_IEEE_FORCE_GIGA);
   5207			if (ret_val)
   5208				return ret_val;
   5209			for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
   5210				ret_val =
   5211				    e1000_read_phy_reg(hw, dsp_reg_array[i],
   5212						       &phy_data);
   5213				if (ret_val)
   5214					return ret_val;
   5215
   5216				phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
   5217				phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
   5218
   5219				ret_val =
   5220				    e1000_write_phy_reg(hw, dsp_reg_array[i],
   5221							phy_data);
   5222				if (ret_val)
   5223					return ret_val;
   5224			}
   5225
   5226			ret_val = e1000_write_phy_reg(hw, 0x0000,
   5227						      IGP01E1000_IEEE_RESTART_AUTONEG);
   5228			if (ret_val)
   5229				return ret_val;
   5230
   5231			msleep(20);
   5232
   5233			/* Now enable the transmitter */
   5234			ret_val =
   5235			    e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
   5236
   5237			if (ret_val)
   5238				return ret_val;
   5239
   5240			hw->dsp_config_state = e1000_dsp_config_enabled;
   5241		}
   5242
   5243		if (hw->ffe_config_state == e1000_ffe_config_active) {
   5244			/* Save off the current value of register 0x2F5B to be
   5245			 * restored at the end of the routines.
   5246			 */
   5247			ret_val =
   5248			    e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
   5249
   5250			if (ret_val)
   5251				return ret_val;
   5252
   5253			/* Disable the PHY transmitter */
   5254			ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
   5255
   5256			if (ret_val)
   5257				return ret_val;
   5258
   5259			msleep(20);
   5260
   5261			ret_val = e1000_write_phy_reg(hw, 0x0000,
   5262						      IGP01E1000_IEEE_FORCE_GIGA);
   5263			if (ret_val)
   5264				return ret_val;
   5265			ret_val =
   5266			    e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE,
   5267						IGP01E1000_PHY_DSP_FFE_DEFAULT);
   5268			if (ret_val)
   5269				return ret_val;
   5270
   5271			ret_val = e1000_write_phy_reg(hw, 0x0000,
   5272						      IGP01E1000_IEEE_RESTART_AUTONEG);
   5273			if (ret_val)
   5274				return ret_val;
   5275
   5276			msleep(20);
   5277
   5278			/* Now enable the transmitter */
   5279			ret_val =
   5280			    e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
   5281
   5282			if (ret_val)
   5283				return ret_val;
   5284
   5285			hw->ffe_config_state = e1000_ffe_config_enabled;
   5286		}
   5287	}
   5288	return E1000_SUCCESS;
   5289}
   5290
   5291/**
   5292 * e1000_set_phy_mode - Set PHY to class A mode
   5293 * @hw: Struct containing variables accessed by shared code
   5294 *
   5295 * Assumes the following operations will follow to enable the new class mode.
   5296 *  1. Do a PHY soft reset
   5297 *  2. Restart auto-negotiation or force link.
   5298 */
   5299static s32 e1000_set_phy_mode(struct e1000_hw *hw)
   5300{
   5301	s32 ret_val;
   5302	u16 eeprom_data;
   5303
   5304	if ((hw->mac_type == e1000_82545_rev_3) &&
   5305	    (hw->media_type == e1000_media_type_copper)) {
   5306		ret_val =
   5307		    e1000_read_eeprom(hw, EEPROM_PHY_CLASS_WORD, 1,
   5308				      &eeprom_data);
   5309		if (ret_val)
   5310			return ret_val;
   5311
   5312		if ((eeprom_data != EEPROM_RESERVED_WORD) &&
   5313		    (eeprom_data & EEPROM_PHY_CLASS_A)) {
   5314			ret_val =
   5315			    e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT,
   5316						0x000B);
   5317			if (ret_val)
   5318				return ret_val;
   5319			ret_val =
   5320			    e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL,
   5321						0x8104);
   5322			if (ret_val)
   5323				return ret_val;
   5324
   5325			hw->phy_reset_disable = false;
   5326		}
   5327	}
   5328
   5329	return E1000_SUCCESS;
   5330}
   5331
   5332/**
   5333 * e1000_set_d3_lplu_state - set d3 link power state
   5334 * @hw: Struct containing variables accessed by shared code
   5335 * @active: true to enable lplu false to disable lplu.
   5336 *
   5337 * This function sets the lplu state according to the active flag.  When
   5338 * activating lplu this function also disables smart speed and vise versa.
   5339 * lplu will not be activated unless the device autonegotiation advertisement
   5340 * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
   5341 *
   5342 * returns: - E1000_ERR_PHY if fail to read/write the PHY
   5343 *            E1000_SUCCESS at any other case.
   5344 */
   5345static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
   5346{
   5347	s32 ret_val;
   5348	u16 phy_data;
   5349
   5350	if (hw->phy_type != e1000_phy_igp)
   5351		return E1000_SUCCESS;
   5352
   5353	/* During driver activity LPLU should not be used or it will attain link
   5354	 * from the lowest speeds starting from 10Mbps. The capability is used
   5355	 * for Dx transitions and states
   5356	 */
   5357	if (hw->mac_type == e1000_82541_rev_2 ||
   5358	    hw->mac_type == e1000_82547_rev_2) {
   5359		ret_val =
   5360		    e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
   5361		if (ret_val)
   5362			return ret_val;
   5363	}
   5364
   5365	if (!active) {
   5366		if (hw->mac_type == e1000_82541_rev_2 ||
   5367		    hw->mac_type == e1000_82547_rev_2) {
   5368			phy_data &= ~IGP01E1000_GMII_FLEX_SPD;
   5369			ret_val =
   5370			    e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
   5371						phy_data);
   5372			if (ret_val)
   5373				return ret_val;
   5374		}
   5375
   5376		/* LPLU and SmartSpeed are mutually exclusive.  LPLU is used
   5377		 * during Dx states where the power conservation is most
   5378		 * important.  During driver activity we should enable
   5379		 * SmartSpeed, so performance is maintained.
   5380		 */
   5381		if (hw->smart_speed == e1000_smart_speed_on) {
   5382			ret_val =
   5383			    e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5384					       &phy_data);
   5385			if (ret_val)
   5386				return ret_val;
   5387
   5388			phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
   5389			ret_val =
   5390			    e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5391						phy_data);
   5392			if (ret_val)
   5393				return ret_val;
   5394		} else if (hw->smart_speed == e1000_smart_speed_off) {
   5395			ret_val =
   5396			    e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5397					       &phy_data);
   5398			if (ret_val)
   5399				return ret_val;
   5400
   5401			phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
   5402			ret_val =
   5403			    e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5404						phy_data);
   5405			if (ret_val)
   5406				return ret_val;
   5407		}
   5408	} else if ((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT) ||
   5409		   (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL) ||
   5410		   (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_100_ALL)) {
   5411		if (hw->mac_type == e1000_82541_rev_2 ||
   5412		    hw->mac_type == e1000_82547_rev_2) {
   5413			phy_data |= IGP01E1000_GMII_FLEX_SPD;
   5414			ret_val =
   5415			    e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
   5416						phy_data);
   5417			if (ret_val)
   5418				return ret_val;
   5419		}
   5420
   5421		/* When LPLU is enabled we should disable SmartSpeed */
   5422		ret_val =
   5423		    e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5424				       &phy_data);
   5425		if (ret_val)
   5426			return ret_val;
   5427
   5428		phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
   5429		ret_val =
   5430		    e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
   5431					phy_data);
   5432		if (ret_val)
   5433			return ret_val;
   5434	}
   5435	return E1000_SUCCESS;
   5436}
   5437
   5438/**
   5439 * e1000_set_vco_speed
   5440 * @hw: Struct containing variables accessed by shared code
   5441 *
   5442 * Change VCO speed register to improve Bit Error Rate performance of SERDES.
   5443 */
   5444static s32 e1000_set_vco_speed(struct e1000_hw *hw)
   5445{
   5446	s32 ret_val;
   5447	u16 default_page = 0;
   5448	u16 phy_data;
   5449
   5450	switch (hw->mac_type) {
   5451	case e1000_82545_rev_3:
   5452	case e1000_82546_rev_3:
   5453		break;
   5454	default:
   5455		return E1000_SUCCESS;
   5456	}
   5457
   5458	/* Set PHY register 30, page 5, bit 8 to 0 */
   5459
   5460	ret_val =
   5461	    e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, &default_page);
   5462	if (ret_val)
   5463		return ret_val;
   5464
   5465	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005);
   5466	if (ret_val)
   5467		return ret_val;
   5468
   5469	ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
   5470	if (ret_val)
   5471		return ret_val;
   5472
   5473	phy_data &= ~M88E1000_PHY_VCO_REG_BIT8;
   5474	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
   5475	if (ret_val)
   5476		return ret_val;
   5477
   5478	/* Set PHY register 30, page 4, bit 11 to 1 */
   5479
   5480	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004);
   5481	if (ret_val)
   5482		return ret_val;
   5483
   5484	ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
   5485	if (ret_val)
   5486		return ret_val;
   5487
   5488	phy_data |= M88E1000_PHY_VCO_REG_BIT11;
   5489	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
   5490	if (ret_val)
   5491		return ret_val;
   5492
   5493	ret_val =
   5494	    e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, default_page);
   5495	if (ret_val)
   5496		return ret_val;
   5497
   5498	return E1000_SUCCESS;
   5499}
   5500
   5501/**
   5502 * e1000_enable_mng_pass_thru - check for bmc pass through
   5503 * @hw: Struct containing variables accessed by shared code
   5504 *
   5505 * Verifies the hardware needs to allow ARPs to be processed by the host
   5506 * returns: - true/false
   5507 */
   5508u32 e1000_enable_mng_pass_thru(struct e1000_hw *hw)
   5509{
   5510	u32 manc;
   5511
   5512	if (hw->asf_firmware_present) {
   5513		manc = er32(MANC);
   5514
   5515		if (!(manc & E1000_MANC_RCV_TCO_EN) ||
   5516		    !(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
   5517			return false;
   5518		if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
   5519			return true;
   5520	}
   5521	return false;
   5522}
   5523
   5524static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
   5525{
   5526	s32 ret_val;
   5527	u16 mii_status_reg;
   5528	u16 i;
   5529
   5530	/* Polarity reversal workaround for forced 10F/10H links. */
   5531
   5532	/* Disable the transmitter on the PHY */
   5533
   5534	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
   5535	if (ret_val)
   5536		return ret_val;
   5537	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFFF);
   5538	if (ret_val)
   5539		return ret_val;
   5540
   5541	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
   5542	if (ret_val)
   5543		return ret_val;
   5544
   5545	/* This loop will early-out if the NO link condition has been met. */
   5546	for (i = PHY_FORCE_TIME; i > 0; i--) {
   5547		/* Read the MII Status Register and wait for Link Status bit
   5548		 * to be clear.
   5549		 */
   5550
   5551		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   5552		if (ret_val)
   5553			return ret_val;
   5554
   5555		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   5556		if (ret_val)
   5557			return ret_val;
   5558
   5559		if ((mii_status_reg & ~MII_SR_LINK_STATUS) == 0)
   5560			break;
   5561		msleep(100);
   5562	}
   5563
   5564	/* Recommended delay time after link has been lost */
   5565	msleep(1000);
   5566
   5567	/* Now we will re-enable th transmitter on the PHY */
   5568
   5569	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
   5570	if (ret_val)
   5571		return ret_val;
   5572	msleep(50);
   5573	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFF0);
   5574	if (ret_val)
   5575		return ret_val;
   5576	msleep(50);
   5577	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFF00);
   5578	if (ret_val)
   5579		return ret_val;
   5580	msleep(50);
   5581	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x0000);
   5582	if (ret_val)
   5583		return ret_val;
   5584
   5585	ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
   5586	if (ret_val)
   5587		return ret_val;
   5588
   5589	/* This loop will early-out if the link condition has been met. */
   5590	for (i = PHY_FORCE_TIME; i > 0; i--) {
   5591		/* Read the MII Status Register and wait for Link Status bit
   5592		 * to be set.
   5593		 */
   5594
   5595		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   5596		if (ret_val)
   5597			return ret_val;
   5598
   5599		ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
   5600		if (ret_val)
   5601			return ret_val;
   5602
   5603		if (mii_status_reg & MII_SR_LINK_STATUS)
   5604			break;
   5605		msleep(100);
   5606	}
   5607	return E1000_SUCCESS;
   5608}
   5609
   5610/**
   5611 * e1000_get_auto_rd_done
   5612 * @hw: Struct containing variables accessed by shared code
   5613 *
   5614 * Check for EEPROM Auto Read bit done.
   5615 * returns: - E1000_ERR_RESET if fail to reset MAC
   5616 *            E1000_SUCCESS at any other case.
   5617 */
   5618static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
   5619{
   5620	msleep(5);
   5621	return E1000_SUCCESS;
   5622}
   5623
   5624/**
   5625 * e1000_get_phy_cfg_done
   5626 * @hw: Struct containing variables accessed by shared code
   5627 *
   5628 * Checks if the PHY configuration is done
   5629 * returns: - E1000_ERR_RESET if fail to reset MAC
   5630 *            E1000_SUCCESS at any other case.
   5631 */
   5632static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
   5633{
   5634	msleep(10);
   5635	return E1000_SUCCESS;
   5636}