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