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