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