xref: /freebsd/sys/dev/e1000/e1000_phy.c (revision 884a2a699669ec61e2366e3e358342dbc94be24a)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2010, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 #include "e1000_api.h"
36 
37 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg);
38 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
39                                           u16 *data, bool read);
40 static u32 e1000_get_phy_addr_for_hv_page(u32 page);
41 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
42                                           u16 *data, bool read);
43 
44 /* Cable length tables */
45 static const u16 e1000_m88_cable_length_table[] = {
46 	0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
47 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \
48                 (sizeof(e1000_m88_cable_length_table) / \
49                  sizeof(e1000_m88_cable_length_table[0]))
50 
51 static const u16 e1000_igp_2_cable_length_table[] = {
52 	0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21, 0, 0, 0, 3,
53 	6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 6, 10, 14, 18, 22,
54 	26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61, 21, 26, 31, 35, 40,
55 	44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82, 40, 45, 51, 56, 61,
56 	66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104, 60, 66, 72, 77, 82,
57 	87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121, 83, 89, 95,
58 	100, 105, 109, 113, 116, 119, 122, 124, 104, 109, 114, 118, 121,
59 	124};
60 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
61                 (sizeof(e1000_igp_2_cable_length_table) / \
62                  sizeof(e1000_igp_2_cable_length_table[0]))
63 
64 /**
65  *  e1000_init_phy_ops_generic - Initialize PHY function pointers
66  *  @hw: pointer to the HW structure
67  *
68  *  Setups up the function pointers to no-op functions
69  **/
70 void e1000_init_phy_ops_generic(struct e1000_hw *hw)
71 {
72 	struct e1000_phy_info *phy = &hw->phy;
73 	DEBUGFUNC("e1000_init_phy_ops_generic");
74 
75 	/* Initialize function pointers */
76 	phy->ops.init_params = e1000_null_ops_generic;
77 	phy->ops.acquire = e1000_null_ops_generic;
78 	phy->ops.check_polarity = e1000_null_ops_generic;
79 	phy->ops.check_reset_block = e1000_null_ops_generic;
80 	phy->ops.commit = e1000_null_ops_generic;
81 	phy->ops.force_speed_duplex = e1000_null_ops_generic;
82 	phy->ops.get_cfg_done = e1000_null_ops_generic;
83 	phy->ops.get_cable_length = e1000_null_ops_generic;
84 	phy->ops.get_info = e1000_null_ops_generic;
85 	phy->ops.read_reg = e1000_null_read_reg;
86 	phy->ops.read_reg_locked = e1000_null_read_reg;
87 	phy->ops.release = e1000_null_phy_generic;
88 	phy->ops.reset = e1000_null_ops_generic;
89 	phy->ops.set_d0_lplu_state = e1000_null_lplu_state;
90 	phy->ops.set_d3_lplu_state = e1000_null_lplu_state;
91 	phy->ops.write_reg = e1000_null_write_reg;
92 	phy->ops.write_reg_locked = e1000_null_write_reg;
93 	phy->ops.power_up = e1000_null_phy_generic;
94 	phy->ops.power_down = e1000_null_phy_generic;
95 	phy->ops.cfg_on_link_up = e1000_null_ops_generic;
96 }
97 
98 /**
99  *  e1000_null_read_reg - No-op function, return 0
100  *  @hw: pointer to the HW structure
101  **/
102 s32 e1000_null_read_reg(struct e1000_hw *hw, u32 offset, u16 *data)
103 {
104 	DEBUGFUNC("e1000_null_read_reg");
105 	return E1000_SUCCESS;
106 }
107 
108 /**
109  *  e1000_null_phy_generic - No-op function, return void
110  *  @hw: pointer to the HW structure
111  **/
112 void e1000_null_phy_generic(struct e1000_hw *hw)
113 {
114 	DEBUGFUNC("e1000_null_phy_generic");
115 	return;
116 }
117 
118 /**
119  *  e1000_null_lplu_state - No-op function, return 0
120  *  @hw: pointer to the HW structure
121  **/
122 s32 e1000_null_lplu_state(struct e1000_hw *hw, bool active)
123 {
124 	DEBUGFUNC("e1000_null_lplu_state");
125 	return E1000_SUCCESS;
126 }
127 
128 /**
129  *  e1000_null_write_reg - No-op function, return 0
130  *  @hw: pointer to the HW structure
131  **/
132 s32 e1000_null_write_reg(struct e1000_hw *hw, u32 offset, u16 data)
133 {
134 	DEBUGFUNC("e1000_null_write_reg");
135 	return E1000_SUCCESS;
136 }
137 
138 /**
139  *  e1000_check_reset_block_generic - Check if PHY reset is blocked
140  *  @hw: pointer to the HW structure
141  *
142  *  Read the PHY management control register and check whether a PHY reset
143  *  is blocked.  If a reset is not blocked return E1000_SUCCESS, otherwise
144  *  return E1000_BLK_PHY_RESET (12).
145  **/
146 s32 e1000_check_reset_block_generic(struct e1000_hw *hw)
147 {
148 	u32 manc;
149 
150 	DEBUGFUNC("e1000_check_reset_block");
151 
152 	manc = E1000_READ_REG(hw, E1000_MANC);
153 
154 	return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
155 	       E1000_BLK_PHY_RESET : E1000_SUCCESS;
156 }
157 
158 /**
159  *  e1000_get_phy_id - Retrieve the PHY ID and revision
160  *  @hw: pointer to the HW structure
161  *
162  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
163  *  revision in the hardware structure.
164  **/
165 s32 e1000_get_phy_id(struct e1000_hw *hw)
166 {
167 	struct e1000_phy_info *phy = &hw->phy;
168 	s32 ret_val = E1000_SUCCESS;
169 	u16 phy_id;
170 	u16 retry_count = 0;
171 
172 	DEBUGFUNC("e1000_get_phy_id");
173 
174 	if (!(phy->ops.read_reg))
175 		goto out;
176 
177 	while (retry_count < 2) {
178 		ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
179 		if (ret_val)
180 			goto out;
181 
182 		phy->id = (u32)(phy_id << 16);
183 		usec_delay(20);
184 		ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
185 		if (ret_val)
186 			goto out;
187 
188 		phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
189 		phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
190 
191 		if (phy->id != 0 && phy->id != PHY_REVISION_MASK)
192 			goto out;
193 
194 		retry_count++;
195 	}
196 out:
197 	return ret_val;
198 }
199 
200 /**
201  *  e1000_phy_reset_dsp_generic - Reset PHY DSP
202  *  @hw: pointer to the HW structure
203  *
204  *  Reset the digital signal processor.
205  **/
206 s32 e1000_phy_reset_dsp_generic(struct e1000_hw *hw)
207 {
208 	s32 ret_val = E1000_SUCCESS;
209 
210 	DEBUGFUNC("e1000_phy_reset_dsp_generic");
211 
212 	if (!(hw->phy.ops.write_reg))
213 		goto out;
214 
215 	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
216 	if (ret_val)
217 		goto out;
218 
219 	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0);
220 
221 out:
222 	return ret_val;
223 }
224 
225 /**
226  *  e1000_read_phy_reg_mdic - Read MDI control register
227  *  @hw: pointer to the HW structure
228  *  @offset: register offset to be read
229  *  @data: pointer to the read data
230  *
231  *  Reads the MDI control register in the PHY at offset and stores the
232  *  information read to data.
233  **/
234 s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
235 {
236 	struct e1000_phy_info *phy = &hw->phy;
237 	u32 i, mdic = 0;
238 	s32 ret_val = E1000_SUCCESS;
239 
240 	DEBUGFUNC("e1000_read_phy_reg_mdic");
241 
242 	if (offset > MAX_PHY_REG_ADDRESS) {
243 		DEBUGOUT1("PHY Address %d is out of range\n", offset);
244 		return -E1000_ERR_PARAM;
245 	}
246 
247 	/*
248 	 * Set up Op-code, Phy Address, and register offset in the MDI
249 	 * Control register.  The MAC will take care of interfacing with the
250 	 * PHY to retrieve the desired data.
251 	 */
252 	mdic = ((offset << E1000_MDIC_REG_SHIFT) |
253 	        (phy->addr << E1000_MDIC_PHY_SHIFT) |
254 	        (E1000_MDIC_OP_READ));
255 
256 	E1000_WRITE_REG(hw, E1000_MDIC, mdic);
257 
258 	/*
259 	 * Poll the ready bit to see if the MDI read completed
260 	 * Increasing the time out as testing showed failures with
261 	 * the lower time out
262 	 */
263 	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
264 		usec_delay(50);
265 		mdic = E1000_READ_REG(hw, E1000_MDIC);
266 		if (mdic & E1000_MDIC_READY)
267 			break;
268 	}
269 	if (!(mdic & E1000_MDIC_READY)) {
270 		DEBUGOUT("MDI Read did not complete\n");
271 		ret_val = -E1000_ERR_PHY;
272 		goto out;
273 	}
274 	if (mdic & E1000_MDIC_ERROR) {
275 		DEBUGOUT("MDI Error\n");
276 		ret_val = -E1000_ERR_PHY;
277 		goto out;
278 	}
279 	*data = (u16) mdic;
280 
281 	/*
282 	 * Allow some time after each MDIC transaction to avoid
283 	 * reading duplicate data in the next MDIC transaction.
284 	 */
285 	if (hw->mac.type == e1000_pch2lan)
286 		usec_delay(100);
287 
288 out:
289 	return ret_val;
290 }
291 
292 /**
293  *  e1000_write_phy_reg_mdic - Write MDI control register
294  *  @hw: pointer to the HW structure
295  *  @offset: register offset to write to
296  *  @data: data to write to register at offset
297  *
298  *  Writes data to MDI control register in the PHY at offset.
299  **/
300 s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
301 {
302 	struct e1000_phy_info *phy = &hw->phy;
303 	u32 i, mdic = 0;
304 	s32 ret_val = E1000_SUCCESS;
305 
306 	DEBUGFUNC("e1000_write_phy_reg_mdic");
307 
308 	if (offset > MAX_PHY_REG_ADDRESS) {
309 		DEBUGOUT1("PHY Address %d is out of range\n", offset);
310 		return -E1000_ERR_PARAM;
311 	}
312 
313 	/*
314 	 * Set up Op-code, Phy Address, and register offset in the MDI
315 	 * Control register.  The MAC will take care of interfacing with the
316 	 * PHY to retrieve the desired data.
317 	 */
318 	mdic = (((u32)data) |
319 	        (offset << E1000_MDIC_REG_SHIFT) |
320 	        (phy->addr << E1000_MDIC_PHY_SHIFT) |
321 	        (E1000_MDIC_OP_WRITE));
322 
323 	E1000_WRITE_REG(hw, E1000_MDIC, mdic);
324 
325 	/*
326 	 * Poll the ready bit to see if the MDI read completed
327 	 * Increasing the time out as testing showed failures with
328 	 * the lower time out
329 	 */
330 	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
331 		usec_delay(50);
332 		mdic = E1000_READ_REG(hw, E1000_MDIC);
333 		if (mdic & E1000_MDIC_READY)
334 			break;
335 	}
336 	if (!(mdic & E1000_MDIC_READY)) {
337 		DEBUGOUT("MDI Write did not complete\n");
338 		ret_val = -E1000_ERR_PHY;
339 		goto out;
340 	}
341 	if (mdic & E1000_MDIC_ERROR) {
342 		DEBUGOUT("MDI Error\n");
343 		ret_val = -E1000_ERR_PHY;
344 		goto out;
345 	}
346 
347 	/*
348 	 * Allow some time after each MDIC transaction to avoid
349 	 * reading duplicate data in the next MDIC transaction.
350 	 */
351 	if (hw->mac.type == e1000_pch2lan)
352 		usec_delay(100);
353 
354 out:
355 	return ret_val;
356 }
357 
358 /**
359  *  e1000_read_phy_reg_i2c - Read PHY register using i2c
360  *  @hw: pointer to the HW structure
361  *  @offset: register offset to be read
362  *  @data: pointer to the read data
363  *
364  *  Reads the PHY register at offset using the i2c interface and stores the
365  *  retrieved information in data.
366  **/
367 s32 e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
368 {
369 	struct e1000_phy_info *phy = &hw->phy;
370 	u32 i, i2ccmd = 0;
371 
372 	DEBUGFUNC("e1000_read_phy_reg_i2c");
373 
374 	/*
375 	 * Set up Op-code, Phy Address, and register address in the I2CCMD
376 	 * register.  The MAC will take care of interfacing with the
377 	 * PHY to retrieve the desired data.
378 	 */
379 	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
380 	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
381 	          (E1000_I2CCMD_OPCODE_READ));
382 
383 	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
384 
385 	/* Poll the ready bit to see if the I2C read completed */
386 	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
387 		usec_delay(50);
388 		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
389 		if (i2ccmd & E1000_I2CCMD_READY)
390 			break;
391 	}
392 	if (!(i2ccmd & E1000_I2CCMD_READY)) {
393 		DEBUGOUT("I2CCMD Read did not complete\n");
394 		return -E1000_ERR_PHY;
395 	}
396 	if (i2ccmd & E1000_I2CCMD_ERROR) {
397 		DEBUGOUT("I2CCMD Error bit set\n");
398 		return -E1000_ERR_PHY;
399 	}
400 
401 	/* Need to byte-swap the 16-bit value. */
402 	*data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
403 
404 	return E1000_SUCCESS;
405 }
406 
407 /**
408  *  e1000_write_phy_reg_i2c - Write PHY register using i2c
409  *  @hw: pointer to the HW structure
410  *  @offset: register offset to write to
411  *  @data: data to write at register offset
412  *
413  *  Writes the data to PHY register at the offset using the i2c interface.
414  **/
415 s32 e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
416 {
417 	struct e1000_phy_info *phy = &hw->phy;
418 	u32 i, i2ccmd = 0;
419 	u16 phy_data_swapped;
420 
421 	DEBUGFUNC("e1000_write_phy_reg_i2c");
422 
423 	/* Swap the data bytes for the I2C interface */
424 	phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
425 
426 	/*
427 	 * Set up Op-code, Phy Address, and register address in the I2CCMD
428 	 * register.  The MAC will take care of interfacing with the
429 	 * PHY to retrieve the desired data.
430 	 */
431 	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
432 	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
433 	          E1000_I2CCMD_OPCODE_WRITE |
434 	          phy_data_swapped);
435 
436 	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
437 
438 	/* Poll the ready bit to see if the I2C read completed */
439 	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
440 		usec_delay(50);
441 		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
442 		if (i2ccmd & E1000_I2CCMD_READY)
443 			break;
444 	}
445 	if (!(i2ccmd & E1000_I2CCMD_READY)) {
446 		DEBUGOUT("I2CCMD Write did not complete\n");
447 		return -E1000_ERR_PHY;
448 	}
449 	if (i2ccmd & E1000_I2CCMD_ERROR) {
450 		DEBUGOUT("I2CCMD Error bit set\n");
451 		return -E1000_ERR_PHY;
452 	}
453 
454 	return E1000_SUCCESS;
455 }
456 
457 /**
458  *  e1000_read_phy_reg_m88 - Read m88 PHY register
459  *  @hw: pointer to the HW structure
460  *  @offset: register offset to be read
461  *  @data: pointer to the read data
462  *
463  *  Acquires semaphore, if necessary, then reads the PHY register at offset
464  *  and storing the retrieved information in data.  Release any acquired
465  *  semaphores before exiting.
466  **/
467 s32 e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data)
468 {
469 	s32 ret_val = E1000_SUCCESS;
470 
471 	DEBUGFUNC("e1000_read_phy_reg_m88");
472 
473 	if (!(hw->phy.ops.acquire))
474 		goto out;
475 
476 	ret_val = hw->phy.ops.acquire(hw);
477 	if (ret_val)
478 		goto out;
479 
480 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
481 	                                  data);
482 
483 	hw->phy.ops.release(hw);
484 
485 out:
486 	return ret_val;
487 }
488 
489 /**
490  *  e1000_write_phy_reg_m88 - Write m88 PHY register
491  *  @hw: pointer to the HW structure
492  *  @offset: register offset to write to
493  *  @data: data to write at register offset
494  *
495  *  Acquires semaphore, if necessary, then writes the data to PHY register
496  *  at the offset.  Release any acquired semaphores before exiting.
497  **/
498 s32 e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data)
499 {
500 	s32 ret_val = E1000_SUCCESS;
501 
502 	DEBUGFUNC("e1000_write_phy_reg_m88");
503 
504 	if (!(hw->phy.ops.acquire))
505 		goto out;
506 
507 	ret_val = hw->phy.ops.acquire(hw);
508 	if (ret_val)
509 		goto out;
510 
511 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
512 	                                   data);
513 
514 	hw->phy.ops.release(hw);
515 
516 out:
517 	return ret_val;
518 }
519 
520 /**
521  *  __e1000_read_phy_reg_igp - Read igp PHY register
522  *  @hw: pointer to the HW structure
523  *  @offset: register offset to be read
524  *  @data: pointer to the read data
525  *  @locked: semaphore has already been acquired or not
526  *
527  *  Acquires semaphore, if necessary, then reads the PHY register at offset
528  *  and stores the retrieved information in data.  Release any acquired
529  *  semaphores before exiting.
530  **/
531 static s32 __e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data,
532                                     bool locked)
533 {
534 	s32 ret_val = E1000_SUCCESS;
535 
536 	DEBUGFUNC("__e1000_read_phy_reg_igp");
537 
538 	if (!locked) {
539 		if (!(hw->phy.ops.acquire))
540 			goto out;
541 
542 		ret_val = hw->phy.ops.acquire(hw);
543 		if (ret_val)
544 			goto out;
545 	}
546 
547 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
548 		ret_val = e1000_write_phy_reg_mdic(hw,
549 		                                   IGP01E1000_PHY_PAGE_SELECT,
550 		                                   (u16)offset);
551 		if (ret_val)
552 			goto release;
553 	}
554 
555 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
556 	                                  data);
557 
558 release:
559 	if (!locked)
560 		hw->phy.ops.release(hw);
561 out:
562 	return ret_val;
563 }
564 
565 /**
566  *  e1000_read_phy_reg_igp - Read igp PHY register
567  *  @hw: pointer to the HW structure
568  *  @offset: register offset to be read
569  *  @data: pointer to the read data
570  *
571  *  Acquires semaphore then reads the PHY register at offset and stores the
572  *  retrieved information in data.
573  *  Release the acquired semaphore before exiting.
574  **/
575 s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
576 {
577 	return __e1000_read_phy_reg_igp(hw, offset, data, FALSE);
578 }
579 
580 /**
581  *  e1000_read_phy_reg_igp_locked - Read igp PHY register
582  *  @hw: pointer to the HW structure
583  *  @offset: register offset to be read
584  *  @data: pointer to the read data
585  *
586  *  Reads the PHY register at offset and stores the retrieved information
587  *  in data.  Assumes semaphore already acquired.
588  **/
589 s32 e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data)
590 {
591 	return __e1000_read_phy_reg_igp(hw, offset, data, TRUE);
592 }
593 
594 /**
595  *  e1000_write_phy_reg_igp - Write igp PHY register
596  *  @hw: pointer to the HW structure
597  *  @offset: register offset to write to
598  *  @data: data to write at register offset
599  *  @locked: semaphore has already been acquired or not
600  *
601  *  Acquires semaphore, if necessary, then writes the data to PHY register
602  *  at the offset.  Release any acquired semaphores before exiting.
603  **/
604 static s32 __e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data,
605                                      bool locked)
606 {
607 	s32 ret_val = E1000_SUCCESS;
608 
609 	DEBUGFUNC("e1000_write_phy_reg_igp");
610 
611 	if (!locked) {
612 		if (!(hw->phy.ops.acquire))
613 			goto out;
614 
615 		ret_val = hw->phy.ops.acquire(hw);
616 		if (ret_val)
617 			goto out;
618 	}
619 
620 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
621 		ret_val = e1000_write_phy_reg_mdic(hw,
622 		                                   IGP01E1000_PHY_PAGE_SELECT,
623 		                                   (u16)offset);
624 		if (ret_val)
625 			goto release;
626 	}
627 
628 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
629 	                                   data);
630 
631 release:
632 	if (!locked)
633 		hw->phy.ops.release(hw);
634 
635 out:
636 	return ret_val;
637 }
638 
639 /**
640  *  e1000_write_phy_reg_igp - Write igp PHY register
641  *  @hw: pointer to the HW structure
642  *  @offset: register offset to write to
643  *  @data: data to write at register offset
644  *
645  *  Acquires semaphore then writes the data to PHY register
646  *  at the offset.  Release any acquired semaphores before exiting.
647  **/
648 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
649 {
650 	return __e1000_write_phy_reg_igp(hw, offset, data, FALSE);
651 }
652 
653 /**
654  *  e1000_write_phy_reg_igp_locked - Write igp PHY register
655  *  @hw: pointer to the HW structure
656  *  @offset: register offset to write to
657  *  @data: data to write at register offset
658  *
659  *  Writes the data to PHY register at the offset.
660  *  Assumes semaphore already acquired.
661  **/
662 s32 e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data)
663 {
664 	return __e1000_write_phy_reg_igp(hw, offset, data, TRUE);
665 }
666 
667 /**
668  *  __e1000_read_kmrn_reg - Read kumeran register
669  *  @hw: pointer to the HW structure
670  *  @offset: register offset to be read
671  *  @data: pointer to the read data
672  *  @locked: semaphore has already been acquired or not
673  *
674  *  Acquires semaphore, if necessary.  Then reads the PHY register at offset
675  *  using the kumeran interface.  The information retrieved is stored in data.
676  *  Release any acquired semaphores before exiting.
677  **/
678 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data,
679                                  bool locked)
680 {
681 	u32 kmrnctrlsta;
682 	s32 ret_val = E1000_SUCCESS;
683 
684 	DEBUGFUNC("__e1000_read_kmrn_reg");
685 
686 	if (!locked) {
687 		if (!(hw->phy.ops.acquire))
688 			goto out;
689 
690 		ret_val = hw->phy.ops.acquire(hw);
691 		if (ret_val)
692 			goto out;
693 	}
694 
695 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
696 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
697 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
698 
699 	usec_delay(2);
700 
701 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
702 	*data = (u16)kmrnctrlsta;
703 
704 	if (!locked)
705 		hw->phy.ops.release(hw);
706 
707 out:
708 	return ret_val;
709 }
710 
711 /**
712  *  e1000_read_kmrn_reg_generic -  Read kumeran register
713  *  @hw: pointer to the HW structure
714  *  @offset: register offset to be read
715  *  @data: pointer to the read data
716  *
717  *  Acquires semaphore then reads the PHY register at offset using the
718  *  kumeran interface.  The information retrieved is stored in data.
719  *  Release the acquired semaphore before exiting.
720  **/
721 s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
722 {
723 	return __e1000_read_kmrn_reg(hw, offset, data, FALSE);
724 }
725 
726 /**
727  *  e1000_read_kmrn_reg_locked -  Read kumeran register
728  *  @hw: pointer to the HW structure
729  *  @offset: register offset to be read
730  *  @data: pointer to the read data
731  *
732  *  Reads the PHY register at offset using the kumeran interface.  The
733  *  information retrieved is stored in data.
734  *  Assumes semaphore already acquired.
735  **/
736 s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
737 {
738 	return __e1000_read_kmrn_reg(hw, offset, data, TRUE);
739 }
740 
741 /**
742  *  __e1000_write_kmrn_reg - Write kumeran register
743  *  @hw: pointer to the HW structure
744  *  @offset: register offset to write to
745  *  @data: data to write at register offset
746  *  @locked: semaphore has already been acquired or not
747  *
748  *  Acquires semaphore, if necessary.  Then write the data to PHY register
749  *  at the offset using the kumeran interface.  Release any acquired semaphores
750  *  before exiting.
751  **/
752 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data,
753                                   bool locked)
754 {
755 	u32 kmrnctrlsta;
756 	s32 ret_val = E1000_SUCCESS;
757 
758 	DEBUGFUNC("e1000_write_kmrn_reg_generic");
759 
760 	if (!locked) {
761 		if (!(hw->phy.ops.acquire))
762 			goto out;
763 
764 		ret_val = hw->phy.ops.acquire(hw);
765 		if (ret_val)
766 			goto out;
767 	}
768 
769 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
770 	               E1000_KMRNCTRLSTA_OFFSET) | data;
771 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
772 
773 	usec_delay(2);
774 
775 	if (!locked)
776 		hw->phy.ops.release(hw);
777 
778 out:
779 	return ret_val;
780 }
781 
782 /**
783  *  e1000_write_kmrn_reg_generic -  Write kumeran register
784  *  @hw: pointer to the HW structure
785  *  @offset: register offset to write to
786  *  @data: data to write at register offset
787  *
788  *  Acquires semaphore then writes the data to the PHY register at the offset
789  *  using the kumeran interface.  Release the acquired semaphore before exiting.
790  **/
791 s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data)
792 {
793 	return __e1000_write_kmrn_reg(hw, offset, data, FALSE);
794 }
795 
796 /**
797  *  e1000_write_kmrn_reg_locked -  Write kumeran register
798  *  @hw: pointer to the HW structure
799  *  @offset: register offset to write to
800  *  @data: data to write at register offset
801  *
802  *  Write the data to PHY register at the offset using the kumeran interface.
803  *  Assumes semaphore already acquired.
804  **/
805 s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
806 {
807 	return __e1000_write_kmrn_reg(hw, offset, data, TRUE);
808 }
809 
810 /**
811  *  e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link
812  *  @hw: pointer to the HW structure
813  *
814  *  Sets up Carrier-sense on Transmit and downshift values.
815  **/
816 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
817 {
818 	s32 ret_val;
819 	u16 phy_data;
820 
821 	DEBUGFUNC("e1000_copper_link_setup_82577");
822 
823 	if (hw->phy.reset_disable) {
824 		ret_val = E1000_SUCCESS;
825 		goto out;
826 	}
827 
828 	if (hw->phy.type == e1000_phy_82580) {
829 		ret_val = hw->phy.ops.reset(hw);
830 		if (ret_val) {
831 			DEBUGOUT("Error resetting the PHY.\n");
832 			goto out;
833 		}
834 	}
835 
836 	/* Enable CRS on Tx. This must be set for half-duplex operation. */
837 	ret_val = hw->phy.ops.read_reg(hw, I82577_CFG_REG, &phy_data);
838 	if (ret_val)
839 		goto out;
840 
841 	phy_data |= I82577_CFG_ASSERT_CRS_ON_TX;
842 
843 	/* Enable downshift */
844 	phy_data |= I82577_CFG_ENABLE_DOWNSHIFT;
845 
846 	ret_val = hw->phy.ops.write_reg(hw, I82577_CFG_REG, phy_data);
847 
848 out:
849 	return ret_val;
850 }
851 
852 /**
853  *  e1000_copper_link_setup_m88 - Setup m88 PHY's for copper link
854  *  @hw: pointer to the HW structure
855  *
856  *  Sets up MDI/MDI-X and polarity for m88 PHY's.  If necessary, transmit clock
857  *  and downshift values are set also.
858  **/
859 s32 e1000_copper_link_setup_m88(struct e1000_hw *hw)
860 {
861 	struct e1000_phy_info *phy = &hw->phy;
862 	s32 ret_val;
863 	u16 phy_data;
864 
865 	DEBUGFUNC("e1000_copper_link_setup_m88");
866 
867 	if (phy->reset_disable) {
868 		ret_val = E1000_SUCCESS;
869 		goto out;
870 	}
871 
872 	/* Enable CRS on Tx. This must be set for half-duplex operation. */
873 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
874 	if (ret_val)
875 		goto out;
876 
877 	/* For BM PHY this bit is downshift enable */
878 	if (phy->type != e1000_phy_bm)
879 		phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
880 
881 	/*
882 	 * Options:
883 	 *   MDI/MDI-X = 0 (default)
884 	 *   0 - Auto for all speeds
885 	 *   1 - MDI mode
886 	 *   2 - MDI-X mode
887 	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
888 	 */
889 	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
890 
891 	switch (phy->mdix) {
892 	case 1:
893 		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
894 		break;
895 	case 2:
896 		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
897 		break;
898 	case 3:
899 		phy_data |= M88E1000_PSCR_AUTO_X_1000T;
900 		break;
901 	case 0:
902 	default:
903 		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
904 		break;
905 	}
906 
907 	/*
908 	 * Options:
909 	 *   disable_polarity_correction = 0 (default)
910 	 *       Automatic Correction for Reversed Cable Polarity
911 	 *   0 - Disabled
912 	 *   1 - Enabled
913 	 */
914 	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
915 	if (phy->disable_polarity_correction == 1)
916 		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
917 
918 	/* Enable downshift on BM (disabled by default) */
919 	if (phy->type == e1000_phy_bm)
920 		phy_data |= BME1000_PSCR_ENABLE_DOWNSHIFT;
921 
922 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
923 	if (ret_val)
924 		goto out;
925 
926 	if ((phy->type == e1000_phy_m88) &&
927 	    (phy->revision < E1000_REVISION_4) &&
928 	    (phy->id != BME1000_E_PHY_ID_R2)) {
929 		/*
930 		 * Force TX_CLK in the Extended PHY Specific Control Register
931 		 * to 25MHz clock.
932 		 */
933 		ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
934 		                             &phy_data);
935 		if (ret_val)
936 			goto out;
937 
938 		phy_data |= M88E1000_EPSCR_TX_CLK_25;
939 
940 		if ((phy->revision == E1000_REVISION_2) &&
941 		    (phy->id == M88E1111_I_PHY_ID)) {
942 			/* 82573L PHY - set the downshift counter to 5x. */
943 			phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
944 			phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
945 		} else {
946 			/* Configure Master and Slave downshift values */
947 			phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
948 			             M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
949 			phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
950 			             M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
951 		}
952 		ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
953 		                             phy_data);
954 		if (ret_val)
955 			goto out;
956 	}
957 
958 	if ((phy->type == e1000_phy_bm) && (phy->id == BME1000_E_PHY_ID_R2)) {
959 		/* Set PHY page 0, register 29 to 0x0003 */
960 		ret_val = phy->ops.write_reg(hw, 29, 0x0003);
961 		if (ret_val)
962 			goto out;
963 
964 		/* Set PHY page 0, register 30 to 0x0000 */
965 		ret_val = phy->ops.write_reg(hw, 30, 0x0000);
966 		if (ret_val)
967 			goto out;
968 	}
969 
970 	/* Commit the changes. */
971 	ret_val = phy->ops.commit(hw);
972 	if (ret_val) {
973 		DEBUGOUT("Error committing the PHY changes\n");
974 		goto out;
975 	}
976 
977 	if (phy->type == e1000_phy_82578) {
978 		ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
979 		                            &phy_data);
980 		if (ret_val)
981 			goto out;
982 
983 		/* 82578 PHY - set the downshift count to 1x. */
984 		phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE;
985 		phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK;
986 		ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
987 		                             phy_data);
988 		if (ret_val)
989 			goto out;
990 	}
991 
992 out:
993 	return ret_val;
994 }
995 
996 /**
997  *  e1000_copper_link_setup_m88_gen2 - Setup m88 PHY's for copper link
998  *  @hw: pointer to the HW structure
999  *
1000  *  Sets up MDI/MDI-X and polarity for i347-AT4, m88e1322 and m88e1112 PHY's.
1001  *  Also enables and sets the downshift parameters.
1002  **/
1003 s32 e1000_copper_link_setup_m88_gen2(struct e1000_hw *hw)
1004 {
1005 	struct e1000_phy_info *phy = &hw->phy;
1006 	s32 ret_val;
1007 	u16 phy_data;
1008 
1009 	DEBUGFUNC("e1000_copper_link_setup_m88_gen2");
1010 
1011 	if (phy->reset_disable) {
1012 		ret_val = E1000_SUCCESS;
1013 		goto out;
1014 	}
1015 
1016 	/* Enable CRS on Tx. This must be set for half-duplex operation. */
1017 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1018 	if (ret_val)
1019 		goto out;
1020 
1021 	/*
1022 	 * Options:
1023 	 *   MDI/MDI-X = 0 (default)
1024 	 *   0 - Auto for all speeds
1025 	 *   1 - MDI mode
1026 	 *   2 - MDI-X mode
1027 	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1028 	 */
1029 	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1030 
1031 	switch (phy->mdix) {
1032 	case 1:
1033 		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
1034 		break;
1035 	case 2:
1036 		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
1037 		break;
1038 	case 3:
1039 		/* M88E1112 does not support this mode) */
1040 		if (phy->id != M88E1112_E_PHY_ID) {
1041 			phy_data |= M88E1000_PSCR_AUTO_X_1000T;
1042 			break;
1043 		}
1044 	case 0:
1045 	default:
1046 		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
1047 		break;
1048 	}
1049 
1050 	/*
1051 	 * Options:
1052 	 *   disable_polarity_correction = 0 (default)
1053 	 *       Automatic Correction for Reversed Cable Polarity
1054 	 *   0 - Disabled
1055 	 *   1 - Enabled
1056 	 */
1057 	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
1058 	if (phy->disable_polarity_correction == 1)
1059 		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
1060 
1061 	/* Enable downshift and setting it to X6 */
1062 	phy_data &= ~I347AT4_PSCR_DOWNSHIFT_MASK;
1063 	phy_data |= I347AT4_PSCR_DOWNSHIFT_6X;
1064 	phy_data |= I347AT4_PSCR_DOWNSHIFT_ENABLE;
1065 
1066 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1067 	if (ret_val)
1068 		goto out;
1069 
1070 	/* Commit the changes. */
1071 	ret_val = phy->ops.commit(hw);
1072 	if (ret_val) {
1073 		DEBUGOUT("Error committing the PHY changes\n");
1074 		goto out;
1075 	}
1076 
1077 out:
1078 	return ret_val;
1079 }
1080 
1081 /**
1082  *  e1000_copper_link_setup_igp - Setup igp PHY's for copper link
1083  *  @hw: pointer to the HW structure
1084  *
1085  *  Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
1086  *  igp PHY's.
1087  **/
1088 s32 e1000_copper_link_setup_igp(struct e1000_hw *hw)
1089 {
1090 	struct e1000_phy_info *phy = &hw->phy;
1091 	s32 ret_val;
1092 	u16 data;
1093 
1094 	DEBUGFUNC("e1000_copper_link_setup_igp");
1095 
1096 	if (phy->reset_disable) {
1097 		ret_val = E1000_SUCCESS;
1098 		goto out;
1099 	}
1100 
1101 	ret_val = hw->phy.ops.reset(hw);
1102 	if (ret_val) {
1103 		DEBUGOUT("Error resetting the PHY.\n");
1104 		goto out;
1105 	}
1106 
1107 	/*
1108 	 * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
1109 	 * timeout issues when LFS is enabled.
1110 	 */
1111 	msec_delay(100);
1112 
1113 	/*
1114 	 * The NVM settings will configure LPLU in D3 for
1115 	 * non-IGP1 PHYs.
1116 	 */
1117 	if (phy->type == e1000_phy_igp) {
1118 		/* disable lplu d3 during driver init */
1119 		ret_val = hw->phy.ops.set_d3_lplu_state(hw, FALSE);
1120 		if (ret_val) {
1121 			DEBUGOUT("Error Disabling LPLU D3\n");
1122 			goto out;
1123 		}
1124 	}
1125 
1126 	/* disable lplu d0 during driver init */
1127 	if (hw->phy.ops.set_d0_lplu_state) {
1128 		ret_val = hw->phy.ops.set_d0_lplu_state(hw, FALSE);
1129 		if (ret_val) {
1130 			DEBUGOUT("Error Disabling LPLU D0\n");
1131 			goto out;
1132 		}
1133 	}
1134 	/* Configure mdi-mdix settings */
1135 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data);
1136 	if (ret_val)
1137 		goto out;
1138 
1139 	data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1140 
1141 	switch (phy->mdix) {
1142 	case 1:
1143 		data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1144 		break;
1145 	case 2:
1146 		data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
1147 		break;
1148 	case 0:
1149 	default:
1150 		data |= IGP01E1000_PSCR_AUTO_MDIX;
1151 		break;
1152 	}
1153 	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data);
1154 	if (ret_val)
1155 		goto out;
1156 
1157 	/* set auto-master slave resolution settings */
1158 	if (hw->mac.autoneg) {
1159 		/*
1160 		 * when autonegotiation advertisement is only 1000Mbps then we
1161 		 * should disable SmartSpeed and enable Auto MasterSlave
1162 		 * resolution as hardware default.
1163 		 */
1164 		if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
1165 			/* Disable SmartSpeed */
1166 			ret_val = phy->ops.read_reg(hw,
1167 			                             IGP01E1000_PHY_PORT_CONFIG,
1168 			                             &data);
1169 			if (ret_val)
1170 				goto out;
1171 
1172 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1173 			ret_val = phy->ops.write_reg(hw,
1174 			                             IGP01E1000_PHY_PORT_CONFIG,
1175 			                             data);
1176 			if (ret_val)
1177 				goto out;
1178 
1179 			/* Set auto Master/Slave resolution process */
1180 			ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
1181 			if (ret_val)
1182 				goto out;
1183 
1184 			data &= ~CR_1000T_MS_ENABLE;
1185 			ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
1186 			if (ret_val)
1187 				goto out;
1188 		}
1189 
1190 		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
1191 		if (ret_val)
1192 			goto out;
1193 
1194 		/* load defaults for future use */
1195 		phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
1196 			((data & CR_1000T_MS_VALUE) ?
1197 			e1000_ms_force_master :
1198 			e1000_ms_force_slave) :
1199 			e1000_ms_auto;
1200 
1201 		switch (phy->ms_type) {
1202 		case e1000_ms_force_master:
1203 			data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
1204 			break;
1205 		case e1000_ms_force_slave:
1206 			data |= CR_1000T_MS_ENABLE;
1207 			data &= ~(CR_1000T_MS_VALUE);
1208 			break;
1209 		case e1000_ms_auto:
1210 			data &= ~CR_1000T_MS_ENABLE;
1211 		default:
1212 			break;
1213 		}
1214 		ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
1215 		if (ret_val)
1216 			goto out;
1217 	}
1218 
1219 out:
1220 	return ret_val;
1221 }
1222 
1223 /**
1224  *  e1000_copper_link_autoneg - Setup/Enable autoneg for copper link
1225  *  @hw: pointer to the HW structure
1226  *
1227  *  Performs initial bounds checking on autoneg advertisement parameter, then
1228  *  configure to advertise the full capability.  Setup the PHY to autoneg
1229  *  and restart the negotiation process between the link partner.  If
1230  *  autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
1231  **/
1232 s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
1233 {
1234 	struct e1000_phy_info *phy = &hw->phy;
1235 	s32 ret_val;
1236 	u16 phy_ctrl;
1237 
1238 	DEBUGFUNC("e1000_copper_link_autoneg");
1239 
1240 	/*
1241 	 * Perform some bounds checking on the autoneg advertisement
1242 	 * parameter.
1243 	 */
1244 	phy->autoneg_advertised &= phy->autoneg_mask;
1245 
1246 	/*
1247 	 * If autoneg_advertised is zero, we assume it was not defaulted
1248 	 * by the calling code so we set to advertise full capability.
1249 	 */
1250 	if (phy->autoneg_advertised == 0)
1251 		phy->autoneg_advertised = phy->autoneg_mask;
1252 
1253 	DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
1254 	ret_val = e1000_phy_setup_autoneg(hw);
1255 	if (ret_val) {
1256 		DEBUGOUT("Error Setting up Auto-Negotiation\n");
1257 		goto out;
1258 	}
1259 	DEBUGOUT("Restarting Auto-Neg\n");
1260 
1261 	/*
1262 	 * Restart auto-negotiation by setting the Auto Neg Enable bit and
1263 	 * the Auto Neg Restart bit in the PHY control register.
1264 	 */
1265 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
1266 	if (ret_val)
1267 		goto out;
1268 
1269 	phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
1270 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
1271 	if (ret_val)
1272 		goto out;
1273 
1274 	/*
1275 	 * Does the user want to wait for Auto-Neg to complete here, or
1276 	 * check at a later time (for example, callback routine).
1277 	 */
1278 	if (phy->autoneg_wait_to_complete) {
1279 		ret_val = hw->mac.ops.wait_autoneg(hw);
1280 		if (ret_val) {
1281 			DEBUGOUT("Error while waiting for "
1282 			         "autoneg to complete\n");
1283 			goto out;
1284 		}
1285 	}
1286 
1287 	hw->mac.get_link_status = TRUE;
1288 
1289 out:
1290 	return ret_val;
1291 }
1292 
1293 /**
1294  *  e1000_phy_setup_autoneg - Configure PHY for auto-negotiation
1295  *  @hw: pointer to the HW structure
1296  *
1297  *  Reads the MII auto-neg advertisement register and/or the 1000T control
1298  *  register and if the PHY is already setup for auto-negotiation, then
1299  *  return successful.  Otherwise, setup advertisement and flow control to
1300  *  the appropriate values for the wanted auto-negotiation.
1301  **/
1302 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
1303 {
1304 	struct e1000_phy_info *phy = &hw->phy;
1305 	s32 ret_val;
1306 	u16 mii_autoneg_adv_reg;
1307 	u16 mii_1000t_ctrl_reg = 0;
1308 
1309 	DEBUGFUNC("e1000_phy_setup_autoneg");
1310 
1311 	phy->autoneg_advertised &= phy->autoneg_mask;
1312 
1313 	/* Read the MII Auto-Neg Advertisement Register (Address 4). */
1314 	ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
1315 	if (ret_val)
1316 		goto out;
1317 
1318 	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
1319 		/* Read the MII 1000Base-T Control Register (Address 9). */
1320 		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL,
1321 		                            &mii_1000t_ctrl_reg);
1322 		if (ret_val)
1323 			goto out;
1324 	}
1325 
1326 	/*
1327 	 * Need to parse both autoneg_advertised and fc and set up
1328 	 * the appropriate PHY registers.  First we will parse for
1329 	 * autoneg_advertised software override.  Since we can advertise
1330 	 * a plethora of combinations, we need to check each bit
1331 	 * individually.
1332 	 */
1333 
1334 	/*
1335 	 * First we clear all the 10/100 mb speed bits in the Auto-Neg
1336 	 * Advertisement Register (Address 4) and the 1000 mb speed bits in
1337 	 * the  1000Base-T Control Register (Address 9).
1338 	 */
1339 	mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
1340 	                         NWAY_AR_100TX_HD_CAPS |
1341 	                         NWAY_AR_10T_FD_CAPS   |
1342 	                         NWAY_AR_10T_HD_CAPS);
1343 	mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
1344 
1345 	DEBUGOUT1("autoneg_advertised %x\n", phy->autoneg_advertised);
1346 
1347 	/* Do we want to advertise 10 Mb Half Duplex? */
1348 	if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
1349 		DEBUGOUT("Advertise 10mb Half duplex\n");
1350 		mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
1351 	}
1352 
1353 	/* Do we want to advertise 10 Mb Full Duplex? */
1354 	if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
1355 		DEBUGOUT("Advertise 10mb Full duplex\n");
1356 		mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
1357 	}
1358 
1359 	/* Do we want to advertise 100 Mb Half Duplex? */
1360 	if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
1361 		DEBUGOUT("Advertise 100mb Half duplex\n");
1362 		mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
1363 	}
1364 
1365 	/* Do we want to advertise 100 Mb Full Duplex? */
1366 	if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
1367 		DEBUGOUT("Advertise 100mb Full duplex\n");
1368 		mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
1369 	}
1370 
1371 	/* We do not allow the Phy to advertise 1000 Mb Half Duplex */
1372 	if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
1373 		DEBUGOUT("Advertise 1000mb Half duplex request denied!\n");
1374 
1375 	/* Do we want to advertise 1000 Mb Full Duplex? */
1376 	if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
1377 		DEBUGOUT("Advertise 1000mb Full duplex\n");
1378 		mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
1379 	}
1380 
1381 	/*
1382 	 * Check for a software override of the flow control settings, and
1383 	 * setup the PHY advertisement registers accordingly.  If
1384 	 * auto-negotiation is enabled, then software will have to set the
1385 	 * "PAUSE" bits to the correct value in the Auto-Negotiation
1386 	 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
1387 	 * negotiation.
1388 	 *
1389 	 * The possible values of the "fc" parameter are:
1390 	 *      0:  Flow control is completely disabled
1391 	 *      1:  Rx flow control is enabled (we can receive pause frames
1392 	 *          but not send pause frames).
1393 	 *      2:  Tx flow control is enabled (we can send pause frames
1394 	 *          but we do not support receiving pause frames).
1395 	 *      3:  Both Rx and Tx flow control (symmetric) are enabled.
1396 	 *  other:  No software override.  The flow control configuration
1397 	 *          in the EEPROM is used.
1398 	 */
1399 	switch (hw->fc.current_mode) {
1400 	case e1000_fc_none:
1401 		/*
1402 		 * Flow control (Rx & Tx) is completely disabled by a
1403 		 * software over-ride.
1404 		 */
1405 		mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1406 		break;
1407 	case e1000_fc_rx_pause:
1408 		/*
1409 		 * Rx Flow control is enabled, and Tx Flow control is
1410 		 * disabled, by a software over-ride.
1411 		 *
1412 		 * Since there really isn't a way to advertise that we are
1413 		 * capable of Rx Pause ONLY, we will advertise that we
1414 		 * support both symmetric and asymmetric Rx PAUSE.  Later
1415 		 * (in e1000_config_fc_after_link_up) we will disable the
1416 		 * hw's ability to send PAUSE frames.
1417 		 */
1418 		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1419 		break;
1420 	case e1000_fc_tx_pause:
1421 		/*
1422 		 * Tx Flow control is enabled, and Rx Flow control is
1423 		 * disabled, by a software over-ride.
1424 		 */
1425 		mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
1426 		mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
1427 		break;
1428 	case e1000_fc_full:
1429 		/*
1430 		 * Flow control (both Rx and Tx) is enabled by a software
1431 		 * over-ride.
1432 		 */
1433 		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1434 		break;
1435 	default:
1436 		DEBUGOUT("Flow control param set incorrectly\n");
1437 		ret_val = -E1000_ERR_CONFIG;
1438 		goto out;
1439 	}
1440 
1441 	ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
1442 	if (ret_val)
1443 		goto out;
1444 
1445 	DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
1446 
1447 	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
1448 		ret_val = phy->ops.write_reg(hw,
1449 		                              PHY_1000T_CTRL,
1450 		                              mii_1000t_ctrl_reg);
1451 		if (ret_val)
1452 			goto out;
1453 	}
1454 
1455 out:
1456 	return ret_val;
1457 }
1458 
1459 /**
1460  *  e1000_setup_copper_link_generic - Configure copper link settings
1461  *  @hw: pointer to the HW structure
1462  *
1463  *  Calls the appropriate function to configure the link for auto-neg or forced
1464  *  speed and duplex.  Then we check for link, once link is established calls
1465  *  to configure collision distance and flow control are called.  If link is
1466  *  not established, we return -E1000_ERR_PHY (-2).
1467  **/
1468 s32 e1000_setup_copper_link_generic(struct e1000_hw *hw)
1469 {
1470 	s32 ret_val;
1471 	bool link;
1472 
1473 	DEBUGFUNC("e1000_setup_copper_link_generic");
1474 
1475 	if (hw->mac.autoneg) {
1476 		/*
1477 		 * Setup autoneg and flow control advertisement and perform
1478 		 * autonegotiation.
1479 		 */
1480 		ret_val = e1000_copper_link_autoneg(hw);
1481 		if (ret_val)
1482 			goto out;
1483 	} else {
1484 		/*
1485 		 * PHY will be set to 10H, 10F, 100H or 100F
1486 		 * depending on user settings.
1487 		 */
1488 		DEBUGOUT("Forcing Speed and Duplex\n");
1489 		ret_val = hw->phy.ops.force_speed_duplex(hw);
1490 		if (ret_val) {
1491 			DEBUGOUT("Error Forcing Speed and Duplex\n");
1492 			goto out;
1493 		}
1494 	}
1495 
1496 	/*
1497 	 * Check link status. Wait up to 100 microseconds for link to become
1498 	 * valid.
1499 	 */
1500 	ret_val = e1000_phy_has_link_generic(hw,
1501 	                                     COPPER_LINK_UP_LIMIT,
1502 	                                     10,
1503 	                                     &link);
1504 	if (ret_val)
1505 		goto out;
1506 
1507 	if (link) {
1508 		DEBUGOUT("Valid link established!!!\n");
1509 		e1000_config_collision_dist_generic(hw);
1510 		ret_val = e1000_config_fc_after_link_up_generic(hw);
1511 	} else {
1512 		DEBUGOUT("Unable to establish link!!!\n");
1513 	}
1514 
1515 out:
1516 	return ret_val;
1517 }
1518 
1519 /**
1520  *  e1000_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
1521  *  @hw: pointer to the HW structure
1522  *
1523  *  Calls the PHY setup function to force speed and duplex.  Clears the
1524  *  auto-crossover to force MDI manually.  Waits for link and returns
1525  *  successful if link up is successful, else -E1000_ERR_PHY (-2).
1526  **/
1527 s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw)
1528 {
1529 	struct e1000_phy_info *phy = &hw->phy;
1530 	s32 ret_val;
1531 	u16 phy_data;
1532 	bool link;
1533 
1534 	DEBUGFUNC("e1000_phy_force_speed_duplex_igp");
1535 
1536 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1537 	if (ret_val)
1538 		goto out;
1539 
1540 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
1541 
1542 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1543 	if (ret_val)
1544 		goto out;
1545 
1546 	/*
1547 	 * Clear Auto-Crossover to force MDI manually.  IGP requires MDI
1548 	 * forced whenever speed and duplex are forced.
1549 	 */
1550 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1551 	if (ret_val)
1552 		goto out;
1553 
1554 	phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1555 	phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1556 
1557 	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1558 	if (ret_val)
1559 		goto out;
1560 
1561 	DEBUGOUT1("IGP PSCR: %X\n", phy_data);
1562 
1563 	usec_delay(1);
1564 
1565 	if (phy->autoneg_wait_to_complete) {
1566 		DEBUGOUT("Waiting for forced speed/duplex link on IGP phy.\n");
1567 
1568 		ret_val = e1000_phy_has_link_generic(hw,
1569 		                                     PHY_FORCE_LIMIT,
1570 		                                     100000,
1571 		                                     &link);
1572 		if (ret_val)
1573 			goto out;
1574 
1575 		if (!link)
1576 			DEBUGOUT("Link taking longer than expected.\n");
1577 
1578 		/* Try once more */
1579 		ret_val = e1000_phy_has_link_generic(hw,
1580 		                                     PHY_FORCE_LIMIT,
1581 		                                     100000,
1582 		                                     &link);
1583 		if (ret_val)
1584 			goto out;
1585 	}
1586 
1587 out:
1588 	return ret_val;
1589 }
1590 
1591 /**
1592  *  e1000_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
1593  *  @hw: pointer to the HW structure
1594  *
1595  *  Calls the PHY setup function to force speed and duplex.  Clears the
1596  *  auto-crossover to force MDI manually.  Resets the PHY to commit the
1597  *  changes.  If time expires while waiting for link up, we reset the DSP.
1598  *  After reset, TX_CLK and CRS on Tx must be set.  Return successful upon
1599  *  successful completion, else return corresponding error code.
1600  **/
1601 s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
1602 {
1603 	struct e1000_phy_info *phy = &hw->phy;
1604 	s32 ret_val;
1605 	u16 phy_data;
1606 	bool link;
1607 
1608 	DEBUGFUNC("e1000_phy_force_speed_duplex_m88");
1609 
1610 	/*
1611 	 * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
1612 	 * forced whenever speed and duplex are forced.
1613 	 */
1614 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1615 	if (ret_val)
1616 		goto out;
1617 
1618 	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1619 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1620 	if (ret_val)
1621 		goto out;
1622 
1623 	DEBUGOUT1("M88E1000 PSCR: %X\n", phy_data);
1624 
1625 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1626 	if (ret_val)
1627 		goto out;
1628 
1629 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
1630 
1631 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1632 	if (ret_val)
1633 		goto out;
1634 
1635 	/* Reset the phy to commit changes. */
1636 	ret_val = hw->phy.ops.commit(hw);
1637 	if (ret_val)
1638 		goto out;
1639 
1640 	if (phy->autoneg_wait_to_complete) {
1641 		DEBUGOUT("Waiting for forced speed/duplex link on M88 phy.\n");
1642 
1643 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1644 		                                     100000, &link);
1645 		if (ret_val)
1646 			goto out;
1647 
1648 		if (!link) {
1649 			if (hw->phy.type != e1000_phy_m88 ||
1650 			    hw->phy.id == I347AT4_E_PHY_ID ||
1651 			    hw->phy.id == M88E1340M_E_PHY_ID ||
1652 			    hw->phy.id == M88E1112_E_PHY_ID) {
1653 				DEBUGOUT("Link taking longer than expected.\n");
1654 			} else {
1655 				/*
1656 				 * We didn't get link.
1657 				 * Reset the DSP and cross our fingers.
1658 				 */
1659 				ret_val = phy->ops.write_reg(hw,
1660 						M88E1000_PHY_PAGE_SELECT,
1661 						0x001d);
1662 				if (ret_val)
1663 					goto out;
1664 				ret_val = e1000_phy_reset_dsp_generic(hw);
1665 				if (ret_val)
1666 					goto out;
1667 			}
1668 		}
1669 
1670 		/* Try once more */
1671 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1672 		                                     100000, &link);
1673 		if (ret_val)
1674 			goto out;
1675 	}
1676 
1677 	if (hw->phy.type != e1000_phy_m88 ||
1678 	    hw->phy.id == I347AT4_E_PHY_ID ||
1679 	    hw->phy.id == M88E1340M_E_PHY_ID ||
1680 	    hw->phy.id == M88E1112_E_PHY_ID)
1681 		goto out;
1682 
1683 	ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1684 	if (ret_val)
1685 		goto out;
1686 
1687 	/*
1688 	 * Resetting the phy means we need to re-force TX_CLK in the
1689 	 * Extended PHY Specific Control Register to 25MHz clock from
1690 	 * the reset value of 2.5MHz.
1691 	 */
1692 	phy_data |= M88E1000_EPSCR_TX_CLK_25;
1693 	ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1694 	if (ret_val)
1695 		goto out;
1696 
1697 	/*
1698 	 * In addition, we must re-enable CRS on Tx for both half and full
1699 	 * duplex.
1700 	 */
1701 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1702 	if (ret_val)
1703 		goto out;
1704 
1705 	phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1706 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1707 
1708 out:
1709 	return ret_val;
1710 }
1711 
1712 /**
1713  *  e1000_phy_force_speed_duplex_ife - Force PHY speed & duplex
1714  *  @hw: pointer to the HW structure
1715  *
1716  *  Forces the speed and duplex settings of the PHY.
1717  *  This is a function pointer entry point only called by
1718  *  PHY setup routines.
1719  **/
1720 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw)
1721 {
1722 	struct e1000_phy_info *phy = &hw->phy;
1723 	s32 ret_val;
1724 	u16 data;
1725 	bool link;
1726 
1727 	DEBUGFUNC("e1000_phy_force_speed_duplex_ife");
1728 
1729 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &data);
1730 	if (ret_val)
1731 		goto out;
1732 
1733 	e1000_phy_force_speed_duplex_setup(hw, &data);
1734 
1735 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, data);
1736 	if (ret_val)
1737 		goto out;
1738 
1739 	/* Disable MDI-X support for 10/100 */
1740 	ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
1741 	if (ret_val)
1742 		goto out;
1743 
1744 	data &= ~IFE_PMC_AUTO_MDIX;
1745 	data &= ~IFE_PMC_FORCE_MDIX;
1746 
1747 	ret_val = phy->ops.write_reg(hw, IFE_PHY_MDIX_CONTROL, data);
1748 	if (ret_val)
1749 		goto out;
1750 
1751 	DEBUGOUT1("IFE PMC: %X\n", data);
1752 
1753 	usec_delay(1);
1754 
1755 	if (phy->autoneg_wait_to_complete) {
1756 		DEBUGOUT("Waiting for forced speed/duplex link on IFE phy.\n");
1757 
1758 		ret_val = e1000_phy_has_link_generic(hw,
1759 		                                     PHY_FORCE_LIMIT,
1760 		                                     100000,
1761 		                                     &link);
1762 		if (ret_val)
1763 			goto out;
1764 
1765 		if (!link)
1766 			DEBUGOUT("Link taking longer than expected.\n");
1767 
1768 		/* Try once more */
1769 		ret_val = e1000_phy_has_link_generic(hw,
1770 		                                     PHY_FORCE_LIMIT,
1771 		                                     100000,
1772 		                                     &link);
1773 		if (ret_val)
1774 			goto out;
1775 	}
1776 
1777 out:
1778 	return ret_val;
1779 }
1780 
1781 /**
1782  *  e1000_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
1783  *  @hw: pointer to the HW structure
1784  *  @phy_ctrl: pointer to current value of PHY_CONTROL
1785  *
1786  *  Forces speed and duplex on the PHY by doing the following: disable flow
1787  *  control, force speed/duplex on the MAC, disable auto speed detection,
1788  *  disable auto-negotiation, configure duplex, configure speed, configure
1789  *  the collision distance, write configuration to CTRL register.  The
1790  *  caller must write to the PHY_CONTROL register for these settings to
1791  *  take affect.
1792  **/
1793 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl)
1794 {
1795 	struct e1000_mac_info *mac = &hw->mac;
1796 	u32 ctrl;
1797 
1798 	DEBUGFUNC("e1000_phy_force_speed_duplex_setup");
1799 
1800 	/* Turn off flow control when forcing speed/duplex */
1801 	hw->fc.current_mode = e1000_fc_none;
1802 
1803 	/* Force speed/duplex on the mac */
1804 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1805 	ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1806 	ctrl &= ~E1000_CTRL_SPD_SEL;
1807 
1808 	/* Disable Auto Speed Detection */
1809 	ctrl &= ~E1000_CTRL_ASDE;
1810 
1811 	/* Disable autoneg on the phy */
1812 	*phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
1813 
1814 	/* Forcing Full or Half Duplex? */
1815 	if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
1816 		ctrl &= ~E1000_CTRL_FD;
1817 		*phy_ctrl &= ~MII_CR_FULL_DUPLEX;
1818 		DEBUGOUT("Half Duplex\n");
1819 	} else {
1820 		ctrl |= E1000_CTRL_FD;
1821 		*phy_ctrl |= MII_CR_FULL_DUPLEX;
1822 		DEBUGOUT("Full Duplex\n");
1823 	}
1824 
1825 	/* Forcing 10mb or 100mb? */
1826 	if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
1827 		ctrl |= E1000_CTRL_SPD_100;
1828 		*phy_ctrl |= MII_CR_SPEED_100;
1829 		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
1830 		DEBUGOUT("Forcing 100mb\n");
1831 	} else {
1832 		ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1833 		*phy_ctrl |= MII_CR_SPEED_10;
1834 		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
1835 		DEBUGOUT("Forcing 10mb\n");
1836 	}
1837 
1838 	e1000_config_collision_dist_generic(hw);
1839 
1840 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1841 }
1842 
1843 /**
1844  *  e1000_set_d3_lplu_state_generic - Sets low power link up state for D3
1845  *  @hw: pointer to the HW structure
1846  *  @active: boolean used to enable/disable lplu
1847  *
1848  *  Success returns 0, Failure returns 1
1849  *
1850  *  The low power link up (lplu) state is set to the power management level D3
1851  *  and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
1852  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
1853  *  is used during Dx states where the power conservation is most important.
1854  *  During driver activity, SmartSpeed should be enabled so performance is
1855  *  maintained.
1856  **/
1857 s32 e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active)
1858 {
1859 	struct e1000_phy_info *phy = &hw->phy;
1860 	s32 ret_val = E1000_SUCCESS;
1861 	u16 data;
1862 
1863 	DEBUGFUNC("e1000_set_d3_lplu_state_generic");
1864 
1865 	if (!(hw->phy.ops.read_reg))
1866 		goto out;
1867 
1868 	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1869 	if (ret_val)
1870 		goto out;
1871 
1872 	if (!active) {
1873 		data &= ~IGP02E1000_PM_D3_LPLU;
1874 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1875 		                             data);
1876 		if (ret_val)
1877 			goto out;
1878 		/*
1879 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
1880 		 * during Dx states where the power conservation is most
1881 		 * important.  During driver activity we should enable
1882 		 * SmartSpeed, so performance is maintained.
1883 		 */
1884 		if (phy->smart_speed == e1000_smart_speed_on) {
1885 			ret_val = phy->ops.read_reg(hw,
1886 			                            IGP01E1000_PHY_PORT_CONFIG,
1887 			                            &data);
1888 			if (ret_val)
1889 				goto out;
1890 
1891 			data |= IGP01E1000_PSCFR_SMART_SPEED;
1892 			ret_val = phy->ops.write_reg(hw,
1893 			                             IGP01E1000_PHY_PORT_CONFIG,
1894 			                             data);
1895 			if (ret_val)
1896 				goto out;
1897 		} else if (phy->smart_speed == e1000_smart_speed_off) {
1898 			ret_val = phy->ops.read_reg(hw,
1899 			                             IGP01E1000_PHY_PORT_CONFIG,
1900 			                             &data);
1901 			if (ret_val)
1902 				goto out;
1903 
1904 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1905 			ret_val = phy->ops.write_reg(hw,
1906 			                             IGP01E1000_PHY_PORT_CONFIG,
1907 			                             data);
1908 			if (ret_val)
1909 				goto out;
1910 		}
1911 	} else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1912 	           (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1913 	           (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1914 		data |= IGP02E1000_PM_D3_LPLU;
1915 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1916 		                              data);
1917 		if (ret_val)
1918 			goto out;
1919 
1920 		/* When LPLU is enabled, we should disable SmartSpeed */
1921 		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1922 		                             &data);
1923 		if (ret_val)
1924 			goto out;
1925 
1926 		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1927 		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1928 		                              data);
1929 	}
1930 
1931 out:
1932 	return ret_val;
1933 }
1934 
1935 /**
1936  *  e1000_check_downshift_generic - Checks whether a downshift in speed occurred
1937  *  @hw: pointer to the HW structure
1938  *
1939  *  Success returns 0, Failure returns 1
1940  *
1941  *  A downshift is detected by querying the PHY link health.
1942  **/
1943 s32 e1000_check_downshift_generic(struct e1000_hw *hw)
1944 {
1945 	struct e1000_phy_info *phy = &hw->phy;
1946 	s32 ret_val;
1947 	u16 phy_data, offset, mask;
1948 
1949 	DEBUGFUNC("e1000_check_downshift_generic");
1950 
1951 	switch (phy->type) {
1952 	case e1000_phy_m88:
1953 	case e1000_phy_gg82563:
1954 	case e1000_phy_bm:
1955 	case e1000_phy_82578:
1956 		offset	= M88E1000_PHY_SPEC_STATUS;
1957 		mask	= M88E1000_PSSR_DOWNSHIFT;
1958 		break;
1959 	case e1000_phy_igp:
1960 	case e1000_phy_igp_2:
1961 	case e1000_phy_igp_3:
1962 		offset	= IGP01E1000_PHY_LINK_HEALTH;
1963 		mask	= IGP01E1000_PLHR_SS_DOWNGRADE;
1964 		break;
1965 	default:
1966 		/* speed downshift not supported */
1967 		phy->speed_downgraded = FALSE;
1968 		ret_val = E1000_SUCCESS;
1969 		goto out;
1970 	}
1971 
1972 	ret_val = phy->ops.read_reg(hw, offset, &phy_data);
1973 
1974 	if (!ret_val)
1975 		phy->speed_downgraded = (phy_data & mask) ? TRUE : FALSE;
1976 
1977 out:
1978 	return ret_val;
1979 }
1980 
1981 /**
1982  *  e1000_check_polarity_m88 - Checks the polarity.
1983  *  @hw: pointer to the HW structure
1984  *
1985  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1986  *
1987  *  Polarity is determined based on the PHY specific status register.
1988  **/
1989 s32 e1000_check_polarity_m88(struct e1000_hw *hw)
1990 {
1991 	struct e1000_phy_info *phy = &hw->phy;
1992 	s32 ret_val;
1993 	u16 data;
1994 
1995 	DEBUGFUNC("e1000_check_polarity_m88");
1996 
1997 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data);
1998 
1999 	if (!ret_val)
2000 		phy->cable_polarity = (data & M88E1000_PSSR_REV_POLARITY)
2001 		                      ? e1000_rev_polarity_reversed
2002 		                      : e1000_rev_polarity_normal;
2003 
2004 	return ret_val;
2005 }
2006 
2007 /**
2008  *  e1000_check_polarity_igp - Checks the polarity.
2009  *  @hw: pointer to the HW structure
2010  *
2011  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
2012  *
2013  *  Polarity is determined based on the PHY port status register, and the
2014  *  current speed (since there is no polarity at 100Mbps).
2015  **/
2016 s32 e1000_check_polarity_igp(struct e1000_hw *hw)
2017 {
2018 	struct e1000_phy_info *phy = &hw->phy;
2019 	s32 ret_val;
2020 	u16 data, offset, mask;
2021 
2022 	DEBUGFUNC("e1000_check_polarity_igp");
2023 
2024 	/*
2025 	 * Polarity is determined based on the speed of
2026 	 * our connection.
2027 	 */
2028 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
2029 	if (ret_val)
2030 		goto out;
2031 
2032 	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
2033 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
2034 		offset	= IGP01E1000_PHY_PCS_INIT_REG;
2035 		mask	= IGP01E1000_PHY_POLARITY_MASK;
2036 	} else {
2037 		/*
2038 		 * This really only applies to 10Mbps since
2039 		 * there is no polarity for 100Mbps (always 0).
2040 		 */
2041 		offset	= IGP01E1000_PHY_PORT_STATUS;
2042 		mask	= IGP01E1000_PSSR_POLARITY_REVERSED;
2043 	}
2044 
2045 	ret_val = phy->ops.read_reg(hw, offset, &data);
2046 
2047 	if (!ret_val)
2048 		phy->cable_polarity = (data & mask)
2049 		                      ? e1000_rev_polarity_reversed
2050 		                      : e1000_rev_polarity_normal;
2051 
2052 out:
2053 	return ret_val;
2054 }
2055 
2056 /**
2057  *  e1000_check_polarity_ife - Check cable polarity for IFE PHY
2058  *  @hw: pointer to the HW structure
2059  *
2060  *  Polarity is determined on the polarity reversal feature being enabled.
2061  **/
2062 s32 e1000_check_polarity_ife(struct e1000_hw *hw)
2063 {
2064 	struct e1000_phy_info *phy = &hw->phy;
2065 	s32 ret_val;
2066 	u16 phy_data, offset, mask;
2067 
2068 	DEBUGFUNC("e1000_check_polarity_ife");
2069 
2070 	/*
2071 	 * Polarity is determined based on the reversal feature being enabled.
2072 	 */
2073 	if (phy->polarity_correction) {
2074 		offset = IFE_PHY_EXTENDED_STATUS_CONTROL;
2075 		mask = IFE_PESC_POLARITY_REVERSED;
2076 	} else {
2077 		offset = IFE_PHY_SPECIAL_CONTROL;
2078 		mask = IFE_PSC_FORCE_POLARITY;
2079 	}
2080 
2081 	ret_val = phy->ops.read_reg(hw, offset, &phy_data);
2082 
2083 	if (!ret_val)
2084 		phy->cable_polarity = (phy_data & mask)
2085 		                       ? e1000_rev_polarity_reversed
2086 		                       : e1000_rev_polarity_normal;
2087 
2088 	return ret_val;
2089 }
2090 
2091 /**
2092  *  e1000_wait_autoneg_generic - Wait for auto-neg completion
2093  *  @hw: pointer to the HW structure
2094  *
2095  *  Waits for auto-negotiation to complete or for the auto-negotiation time
2096  *  limit to expire, which ever happens first.
2097  **/
2098 s32 e1000_wait_autoneg_generic(struct e1000_hw *hw)
2099 {
2100 	s32 ret_val = E1000_SUCCESS;
2101 	u16 i, phy_status;
2102 
2103 	DEBUGFUNC("e1000_wait_autoneg_generic");
2104 
2105 	if (!(hw->phy.ops.read_reg))
2106 		return E1000_SUCCESS;
2107 
2108 	/* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
2109 	for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
2110 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
2111 		if (ret_val)
2112 			break;
2113 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
2114 		if (ret_val)
2115 			break;
2116 		if (phy_status & MII_SR_AUTONEG_COMPLETE)
2117 			break;
2118 		msec_delay(100);
2119 	}
2120 
2121 	/*
2122 	 * PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
2123 	 * has completed.
2124 	 */
2125 	return ret_val;
2126 }
2127 
2128 /**
2129  *  e1000_phy_has_link_generic - Polls PHY for link
2130  *  @hw: pointer to the HW structure
2131  *  @iterations: number of times to poll for link
2132  *  @usec_interval: delay between polling attempts
2133  *  @success: pointer to whether polling was successful or not
2134  *
2135  *  Polls the PHY status register for link, 'iterations' number of times.
2136  **/
2137 s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
2138                                u32 usec_interval, bool *success)
2139 {
2140 	s32 ret_val = E1000_SUCCESS;
2141 	u16 i, phy_status;
2142 
2143 	DEBUGFUNC("e1000_phy_has_link_generic");
2144 
2145 	if (!(hw->phy.ops.read_reg))
2146 		return E1000_SUCCESS;
2147 
2148 	for (i = 0; i < iterations; i++) {
2149 		/*
2150 		 * Some PHYs require the PHY_STATUS register to be read
2151 		 * twice due to the link bit being sticky.  No harm doing
2152 		 * it across the board.
2153 		 */
2154 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
2155 		if (ret_val)
2156 			/*
2157 			 * If the first read fails, another entity may have
2158 			 * ownership of the resources, wait and try again to
2159 			 * see if they have relinquished the resources yet.
2160 			 */
2161 			usec_delay(usec_interval);
2162 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
2163 		if (ret_val)
2164 			break;
2165 		if (phy_status & MII_SR_LINK_STATUS)
2166 			break;
2167 		if (usec_interval >= 1000)
2168 			msec_delay_irq(usec_interval/1000);
2169 		else
2170 			usec_delay(usec_interval);
2171 	}
2172 
2173 	*success = (i < iterations) ? TRUE : FALSE;
2174 
2175 	return ret_val;
2176 }
2177 
2178 /**
2179  *  e1000_get_cable_length_m88 - Determine cable length for m88 PHY
2180  *  @hw: pointer to the HW structure
2181  *
2182  *  Reads the PHY specific status register to retrieve the cable length
2183  *  information.  The cable length is determined by averaging the minimum and
2184  *  maximum values to get the "average" cable length.  The m88 PHY has four
2185  *  possible cable length values, which are:
2186  *	Register Value		Cable Length
2187  *	0			< 50 meters
2188  *	1			50 - 80 meters
2189  *	2			80 - 110 meters
2190  *	3			110 - 140 meters
2191  *	4			> 140 meters
2192  **/
2193 s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
2194 {
2195 	struct e1000_phy_info *phy = &hw->phy;
2196 	s32 ret_val;
2197 	u16 phy_data, index;
2198 
2199 	DEBUGFUNC("e1000_get_cable_length_m88");
2200 
2201 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
2202 	if (ret_val)
2203 		goto out;
2204 
2205 	index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
2206 	        M88E1000_PSSR_CABLE_LENGTH_SHIFT;
2207 	if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
2208 		ret_val = -E1000_ERR_PHY;
2209 		goto out;
2210 	}
2211 
2212 	phy->min_cable_length = e1000_m88_cable_length_table[index];
2213 	phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
2214 
2215 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
2216 
2217 out:
2218 	return ret_val;
2219 }
2220 
2221 s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw)
2222 {
2223 	struct e1000_phy_info *phy = &hw->phy;
2224 	s32 ret_val;
2225 	u16 phy_data, phy_data2, index, default_page, is_cm;
2226 
2227 	DEBUGFUNC("e1000_get_cable_length_m88_gen2");
2228 
2229 	switch (hw->phy.id) {
2230 	case M88E1340M_E_PHY_ID:
2231 	case I347AT4_E_PHY_ID:
2232 		/* Remember the original page select and set it to 7 */
2233 		ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
2234 					    &default_page);
2235 		if (ret_val)
2236 			goto out;
2237 
2238 		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07);
2239 		if (ret_val)
2240 			goto out;
2241 
2242 		/* Get cable length from PHY Cable Diagnostics Control Reg */
2243 		ret_val = phy->ops.read_reg(hw, (I347AT4_PCDL + phy->addr),
2244 					    &phy_data);
2245 		if (ret_val)
2246 			goto out;
2247 
2248 		/* Check if the unit of cable length is meters or cm */
2249 		ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2);
2250 		if (ret_val)
2251 			goto out;
2252 
2253 		is_cm = !(phy_data & I347AT4_PCDC_CABLE_LENGTH_UNIT);
2254 
2255 		/* Populate the phy structure with cable length in meters */
2256 		phy->min_cable_length = phy_data / (is_cm ? 100 : 1);
2257 		phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
2258 		phy->cable_length = phy_data / (is_cm ? 100 : 1);
2259 
2260 		/* Reset the page selec	to its original value */
2261 		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
2262 					     default_page);
2263 		if (ret_val)
2264 			goto out;
2265 		break;
2266 	case M88E1112_E_PHY_ID:
2267 		/* Remember the original page select and set it to 5 */
2268 		ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
2269 					    &default_page);
2270 		if (ret_val)
2271 			goto out;
2272 
2273 		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05);
2274 		if (ret_val)
2275 			goto out;
2276 
2277 		ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE,
2278 					    &phy_data);
2279 		if (ret_val)
2280 			goto out;
2281 
2282 		index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
2283 			M88E1000_PSSR_CABLE_LENGTH_SHIFT;
2284 		if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
2285 			ret_val = -E1000_ERR_PHY;
2286 			goto out;
2287 		}
2288 
2289 		phy->min_cable_length = e1000_m88_cable_length_table[index];
2290 		phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
2291 
2292 		phy->cable_length = (phy->min_cable_length +
2293 				     phy->max_cable_length) / 2;
2294 
2295 		/* Reset the page select to its original value */
2296 		ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
2297 					     default_page);
2298 		if (ret_val)
2299 			goto out;
2300 
2301 		break;
2302 	default:
2303 		ret_val = -E1000_ERR_PHY;
2304 		goto out;
2305 	}
2306 
2307 out:
2308 	return ret_val;
2309 }
2310 
2311 /**
2312  *  e1000_get_cable_length_igp_2 - Determine cable length for igp2 PHY
2313  *  @hw: pointer to the HW structure
2314  *
2315  *  The automatic gain control (agc) normalizes the amplitude of the
2316  *  received signal, adjusting for the attenuation produced by the
2317  *  cable.  By reading the AGC registers, which represent the
2318  *  combination of coarse and fine gain value, the value can be put
2319  *  into a lookup table to obtain the approximate cable length
2320  *  for each channel.
2321  **/
2322 s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
2323 {
2324 	struct e1000_phy_info *phy = &hw->phy;
2325 	s32 ret_val = E1000_SUCCESS;
2326 	u16 phy_data, i, agc_value = 0;
2327 	u16 cur_agc_index, max_agc_index = 0;
2328 	u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
2329 	static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
2330 	       IGP02E1000_PHY_AGC_A,
2331 	       IGP02E1000_PHY_AGC_B,
2332 	       IGP02E1000_PHY_AGC_C,
2333 	       IGP02E1000_PHY_AGC_D
2334 	};
2335 
2336 	DEBUGFUNC("e1000_get_cable_length_igp_2");
2337 
2338 	/* Read the AGC registers for all channels */
2339 	for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
2340 		ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data);
2341 		if (ret_val)
2342 			goto out;
2343 
2344 		/*
2345 		 * Getting bits 15:9, which represent the combination of
2346 		 * coarse and fine gain values.  The result is a number
2347 		 * that can be put into the lookup table to obtain the
2348 		 * approximate cable length.
2349 		 */
2350 		cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
2351 		                IGP02E1000_AGC_LENGTH_MASK;
2352 
2353 		/* Array index bound check. */
2354 		if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) ||
2355 		    (cur_agc_index == 0)) {
2356 			ret_val = -E1000_ERR_PHY;
2357 			goto out;
2358 		}
2359 
2360 		/* Remove min & max AGC values from calculation. */
2361 		if (e1000_igp_2_cable_length_table[min_agc_index] >
2362 		    e1000_igp_2_cable_length_table[cur_agc_index])
2363 			min_agc_index = cur_agc_index;
2364 		if (e1000_igp_2_cable_length_table[max_agc_index] <
2365 		    e1000_igp_2_cable_length_table[cur_agc_index])
2366 			max_agc_index = cur_agc_index;
2367 
2368 		agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
2369 	}
2370 
2371 	agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
2372 	              e1000_igp_2_cable_length_table[max_agc_index]);
2373 	agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
2374 
2375 	/* Calculate cable length with the error range of +/- 10 meters. */
2376 	phy->min_cable_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
2377 	                         (agc_value - IGP02E1000_AGC_RANGE) : 0;
2378 	phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
2379 
2380 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
2381 
2382 out:
2383 	return ret_val;
2384 }
2385 
2386 /**
2387  *  e1000_get_phy_info_m88 - Retrieve PHY information
2388  *  @hw: pointer to the HW structure
2389  *
2390  *  Valid for only copper links.  Read the PHY status register (sticky read)
2391  *  to verify that link is up.  Read the PHY special control register to
2392  *  determine the polarity and 10base-T extended distance.  Read the PHY
2393  *  special status register to determine MDI/MDIx and current speed.  If
2394  *  speed is 1000, then determine cable length, local and remote receiver.
2395  **/
2396 s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
2397 {
2398 	struct e1000_phy_info *phy = &hw->phy;
2399 	s32  ret_val;
2400 	u16 phy_data;
2401 	bool link;
2402 
2403 	DEBUGFUNC("e1000_get_phy_info_m88");
2404 
2405 	if (phy->media_type != e1000_media_type_copper) {
2406 		DEBUGOUT("Phy info is only valid for copper media\n");
2407 		ret_val = -E1000_ERR_CONFIG;
2408 		goto out;
2409 	}
2410 
2411 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
2412 	if (ret_val)
2413 		goto out;
2414 
2415 	if (!link) {
2416 		DEBUGOUT("Phy info is only valid if link is up\n");
2417 		ret_val = -E1000_ERR_CONFIG;
2418 		goto out;
2419 	}
2420 
2421 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
2422 	if (ret_val)
2423 		goto out;
2424 
2425 	phy->polarity_correction = (phy_data & M88E1000_PSCR_POLARITY_REVERSAL)
2426 	                           ? TRUE : FALSE;
2427 
2428 	ret_val = e1000_check_polarity_m88(hw);
2429 	if (ret_val)
2430 		goto out;
2431 
2432 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
2433 	if (ret_val)
2434 		goto out;
2435 
2436 	phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX) ? TRUE : FALSE;
2437 
2438 	if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
2439 		ret_val = hw->phy.ops.get_cable_length(hw);
2440 		if (ret_val)
2441 			goto out;
2442 
2443 		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
2444 		if (ret_val)
2445 			goto out;
2446 
2447 		phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
2448 		                ? e1000_1000t_rx_status_ok
2449 		                : e1000_1000t_rx_status_not_ok;
2450 
2451 		phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
2452 		                 ? e1000_1000t_rx_status_ok
2453 		                 : e1000_1000t_rx_status_not_ok;
2454 	} else {
2455 		/* Set values to "undefined" */
2456 		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2457 		phy->local_rx = e1000_1000t_rx_status_undefined;
2458 		phy->remote_rx = e1000_1000t_rx_status_undefined;
2459 	}
2460 
2461 out:
2462 	return ret_val;
2463 }
2464 
2465 /**
2466  *  e1000_get_phy_info_igp - Retrieve igp PHY information
2467  *  @hw: pointer to the HW structure
2468  *
2469  *  Read PHY status to determine if link is up.  If link is up, then
2470  *  set/determine 10base-T extended distance and polarity correction.  Read
2471  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
2472  *  determine on the cable length, local and remote receiver.
2473  **/
2474 s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
2475 {
2476 	struct e1000_phy_info *phy = &hw->phy;
2477 	s32 ret_val;
2478 	u16 data;
2479 	bool link;
2480 
2481 	DEBUGFUNC("e1000_get_phy_info_igp");
2482 
2483 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
2484 	if (ret_val)
2485 		goto out;
2486 
2487 	if (!link) {
2488 		DEBUGOUT("Phy info is only valid if link is up\n");
2489 		ret_val = -E1000_ERR_CONFIG;
2490 		goto out;
2491 	}
2492 
2493 	phy->polarity_correction = TRUE;
2494 
2495 	ret_val = e1000_check_polarity_igp(hw);
2496 	if (ret_val)
2497 		goto out;
2498 
2499 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
2500 	if (ret_val)
2501 		goto out;
2502 
2503 	phy->is_mdix = (data & IGP01E1000_PSSR_MDIX) ? TRUE : FALSE;
2504 
2505 	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
2506 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
2507 		ret_val = phy->ops.get_cable_length(hw);
2508 		if (ret_val)
2509 			goto out;
2510 
2511 		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
2512 		if (ret_val)
2513 			goto out;
2514 
2515 		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
2516 		                ? e1000_1000t_rx_status_ok
2517 		                : e1000_1000t_rx_status_not_ok;
2518 
2519 		phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
2520 		                 ? e1000_1000t_rx_status_ok
2521 		                 : e1000_1000t_rx_status_not_ok;
2522 	} else {
2523 		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2524 		phy->local_rx = e1000_1000t_rx_status_undefined;
2525 		phy->remote_rx = e1000_1000t_rx_status_undefined;
2526 	}
2527 
2528 out:
2529 	return ret_val;
2530 }
2531 
2532 /**
2533  *  e1000_get_phy_info_ife - Retrieves various IFE PHY states
2534  *  @hw: pointer to the HW structure
2535  *
2536  *  Populates "phy" structure with various feature states.
2537  **/
2538 s32 e1000_get_phy_info_ife(struct e1000_hw *hw)
2539 {
2540 	struct e1000_phy_info *phy = &hw->phy;
2541 	s32 ret_val;
2542 	u16 data;
2543 	bool link;
2544 
2545 	DEBUGFUNC("e1000_get_phy_info_ife");
2546 
2547 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
2548 	if (ret_val)
2549 		goto out;
2550 
2551 	if (!link) {
2552 		DEBUGOUT("Phy info is only valid if link is up\n");
2553 		ret_val = -E1000_ERR_CONFIG;
2554 		goto out;
2555 	}
2556 
2557 	ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data);
2558 	if (ret_val)
2559 		goto out;
2560 	phy->polarity_correction = (data & IFE_PSC_AUTO_POLARITY_DISABLE)
2561 	                           ? FALSE : TRUE;
2562 
2563 	if (phy->polarity_correction) {
2564 		ret_val = e1000_check_polarity_ife(hw);
2565 		if (ret_val)
2566 			goto out;
2567 	} else {
2568 		/* Polarity is forced */
2569 		phy->cable_polarity = (data & IFE_PSC_FORCE_POLARITY)
2570 		                      ? e1000_rev_polarity_reversed
2571 		                      : e1000_rev_polarity_normal;
2572 	}
2573 
2574 	ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
2575 	if (ret_val)
2576 		goto out;
2577 
2578 	phy->is_mdix = (data & IFE_PMC_MDIX_STATUS) ? TRUE : FALSE;
2579 
2580 	/* The following parameters are undefined for 10/100 operation. */
2581 	phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2582 	phy->local_rx = e1000_1000t_rx_status_undefined;
2583 	phy->remote_rx = e1000_1000t_rx_status_undefined;
2584 
2585 out:
2586 	return ret_val;
2587 }
2588 
2589 /**
2590  *  e1000_phy_sw_reset_generic - PHY software reset
2591  *  @hw: pointer to the HW structure
2592  *
2593  *  Does a software reset of the PHY by reading the PHY control register and
2594  *  setting/write the control register reset bit to the PHY.
2595  **/
2596 s32 e1000_phy_sw_reset_generic(struct e1000_hw *hw)
2597 {
2598 	s32 ret_val = E1000_SUCCESS;
2599 	u16 phy_ctrl;
2600 
2601 	DEBUGFUNC("e1000_phy_sw_reset_generic");
2602 
2603 	if (!(hw->phy.ops.read_reg))
2604 		goto out;
2605 
2606 	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
2607 	if (ret_val)
2608 		goto out;
2609 
2610 	phy_ctrl |= MII_CR_RESET;
2611 	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
2612 	if (ret_val)
2613 		goto out;
2614 
2615 	usec_delay(1);
2616 
2617 out:
2618 	return ret_val;
2619 }
2620 
2621 /**
2622  *  e1000_phy_hw_reset_generic - PHY hardware reset
2623  *  @hw: pointer to the HW structure
2624  *
2625  *  Verify the reset block is not blocking us from resetting.  Acquire
2626  *  semaphore (if necessary) and read/set/write the device control reset
2627  *  bit in the PHY.  Wait the appropriate delay time for the device to
2628  *  reset and release the semaphore (if necessary).
2629  **/
2630 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
2631 {
2632 	struct e1000_phy_info *phy = &hw->phy;
2633 	s32 ret_val = E1000_SUCCESS;
2634 	u32 ctrl;
2635 
2636 	DEBUGFUNC("e1000_phy_hw_reset_generic");
2637 
2638 	ret_val = phy->ops.check_reset_block(hw);
2639 	if (ret_val) {
2640 		ret_val = E1000_SUCCESS;
2641 		goto out;
2642 	}
2643 
2644 	ret_val = phy->ops.acquire(hw);
2645 	if (ret_val)
2646 		goto out;
2647 
2648 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
2649 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PHY_RST);
2650 	E1000_WRITE_FLUSH(hw);
2651 
2652 	usec_delay(phy->reset_delay_us);
2653 
2654 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
2655 	E1000_WRITE_FLUSH(hw);
2656 
2657 	usec_delay(150);
2658 
2659 	phy->ops.release(hw);
2660 
2661 	ret_val = phy->ops.get_cfg_done(hw);
2662 
2663 out:
2664 	return ret_val;
2665 }
2666 
2667 /**
2668  *  e1000_get_cfg_done_generic - Generic configuration done
2669  *  @hw: pointer to the HW structure
2670  *
2671  *  Generic function to wait 10 milli-seconds for configuration to complete
2672  *  and return success.
2673  **/
2674 s32 e1000_get_cfg_done_generic(struct e1000_hw *hw)
2675 {
2676 	DEBUGFUNC("e1000_get_cfg_done_generic");
2677 
2678 	msec_delay_irq(10);
2679 
2680 	return E1000_SUCCESS;
2681 }
2682 
2683 /**
2684  *  e1000_phy_init_script_igp3 - Inits the IGP3 PHY
2685  *  @hw: pointer to the HW structure
2686  *
2687  *  Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
2688  **/
2689 s32 e1000_phy_init_script_igp3(struct e1000_hw *hw)
2690 {
2691 	DEBUGOUT("Running IGP 3 PHY init script\n");
2692 
2693 	/* PHY init IGP 3 */
2694 	/* Enable rise/fall, 10-mode work in class-A */
2695 	hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018);
2696 	/* Remove all caps from Replica path filter */
2697 	hw->phy.ops.write_reg(hw, 0x2F52, 0x0000);
2698 	/* Bias trimming for ADC, AFE and Driver (Default) */
2699 	hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24);
2700 	/* Increase Hybrid poly bias */
2701 	hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0);
2702 	/* Add 4% to Tx amplitude in Gig mode */
2703 	hw->phy.ops.write_reg(hw, 0x2010, 0x10B0);
2704 	/* Disable trimming (TTT) */
2705 	hw->phy.ops.write_reg(hw, 0x2011, 0x0000);
2706 	/* Poly DC correction to 94.6% + 2% for all channels */
2707 	hw->phy.ops.write_reg(hw, 0x20DD, 0x249A);
2708 	/* ABS DC correction to 95.9% */
2709 	hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3);
2710 	/* BG temp curve trim */
2711 	hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE);
2712 	/* Increasing ADC OPAMP stage 1 currents to max */
2713 	hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4);
2714 	/* Force 1000 ( required for enabling PHY regs configuration) */
2715 	hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
2716 	/* Set upd_freq to 6 */
2717 	hw->phy.ops.write_reg(hw, 0x1F30, 0x1606);
2718 	/* Disable NPDFE */
2719 	hw->phy.ops.write_reg(hw, 0x1F31, 0xB814);
2720 	/* Disable adaptive fixed FFE (Default) */
2721 	hw->phy.ops.write_reg(hw, 0x1F35, 0x002A);
2722 	/* Enable FFE hysteresis */
2723 	hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067);
2724 	/* Fixed FFE for short cable lengths */
2725 	hw->phy.ops.write_reg(hw, 0x1F54, 0x0065);
2726 	/* Fixed FFE for medium cable lengths */
2727 	hw->phy.ops.write_reg(hw, 0x1F55, 0x002A);
2728 	/* Fixed FFE for long cable lengths */
2729 	hw->phy.ops.write_reg(hw, 0x1F56, 0x002A);
2730 	/* Enable Adaptive Clip Threshold */
2731 	hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0);
2732 	/* AHT reset limit to 1 */
2733 	hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF);
2734 	/* Set AHT master delay to 127 msec */
2735 	hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC);
2736 	/* Set scan bits for AHT */
2737 	hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF);
2738 	/* Set AHT Preset bits */
2739 	hw->phy.ops.write_reg(hw, 0x1F79, 0x0210);
2740 	/* Change integ_factor of channel A to 3 */
2741 	hw->phy.ops.write_reg(hw, 0x1895, 0x0003);
2742 	/* Change prop_factor of channels BCD to 8 */
2743 	hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
2744 	/* Change cg_icount + enable integbp for channels BCD */
2745 	hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
2746 	/*
2747 	 * Change cg_icount + enable integbp + change prop_factor_master
2748 	 * to 8 for channel A
2749 	 */
2750 	hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
2751 	/* Disable AHT in Slave mode on channel A */
2752 	hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
2753 	/*
2754 	 * Enable LPLU and disable AN to 1000 in non-D0a states,
2755 	 * Enable SPD+B2B
2756 	 */
2757 	hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
2758 	/* Enable restart AN on an1000_dis change */
2759 	hw->phy.ops.write_reg(hw, 0x001B, 0x2080);
2760 	/* Enable wh_fifo read clock in 10/100 modes */
2761 	hw->phy.ops.write_reg(hw, 0x0014, 0x0045);
2762 	/* Restart AN, Speed selection is 1000 */
2763 	hw->phy.ops.write_reg(hw, 0x0000, 0x1340);
2764 
2765 	return E1000_SUCCESS;
2766 }
2767 
2768 /**
2769  *  e1000_get_phy_type_from_id - Get PHY type from id
2770  *  @phy_id: phy_id read from the phy
2771  *
2772  *  Returns the phy type from the id.
2773  **/
2774 enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
2775 {
2776 	enum e1000_phy_type phy_type = e1000_phy_unknown;
2777 
2778 	switch (phy_id) {
2779 	case M88E1000_I_PHY_ID:
2780 	case M88E1000_E_PHY_ID:
2781 	case M88E1111_I_PHY_ID:
2782 	case M88E1011_I_PHY_ID:
2783 	case I347AT4_E_PHY_ID:
2784 	case M88E1112_E_PHY_ID:
2785 	case M88E1340M_E_PHY_ID:
2786 		phy_type = e1000_phy_m88;
2787 		break;
2788 	case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */
2789 		phy_type = e1000_phy_igp_2;
2790 		break;
2791 	case GG82563_E_PHY_ID:
2792 		phy_type = e1000_phy_gg82563;
2793 		break;
2794 	case IGP03E1000_E_PHY_ID:
2795 		phy_type = e1000_phy_igp_3;
2796 		break;
2797 	case IFE_E_PHY_ID:
2798 	case IFE_PLUS_E_PHY_ID:
2799 	case IFE_C_E_PHY_ID:
2800 		phy_type = e1000_phy_ife;
2801 		break;
2802 	case BME1000_E_PHY_ID:
2803 	case BME1000_E_PHY_ID_R2:
2804 		phy_type = e1000_phy_bm;
2805 		break;
2806 	case I82578_E_PHY_ID:
2807 		phy_type = e1000_phy_82578;
2808 		break;
2809 	case I82577_E_PHY_ID:
2810 		phy_type = e1000_phy_82577;
2811 		break;
2812 	case I82579_E_PHY_ID:
2813 		phy_type = e1000_phy_82579;
2814 		break;
2815 	case I82580_I_PHY_ID:
2816 		phy_type = e1000_phy_82580;
2817 		break;
2818 	default:
2819 		phy_type = e1000_phy_unknown;
2820 		break;
2821 	}
2822 	return phy_type;
2823 }
2824 
2825 /**
2826  *  e1000_determine_phy_address - Determines PHY address.
2827  *  @hw: pointer to the HW structure
2828  *
2829  *  This uses a trial and error method to loop through possible PHY
2830  *  addresses. It tests each by reading the PHY ID registers and
2831  *  checking for a match.
2832  **/
2833 s32 e1000_determine_phy_address(struct e1000_hw *hw)
2834 {
2835 	s32 ret_val = -E1000_ERR_PHY_TYPE;
2836 	u32 phy_addr = 0;
2837 	u32 i;
2838 	enum e1000_phy_type phy_type = e1000_phy_unknown;
2839 
2840 	hw->phy.id = phy_type;
2841 
2842 	for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) {
2843 		hw->phy.addr = phy_addr;
2844 		i = 0;
2845 
2846 		do {
2847 			e1000_get_phy_id(hw);
2848 			phy_type = e1000_get_phy_type_from_id(hw->phy.id);
2849 
2850 			/*
2851 			 * If phy_type is valid, break - we found our
2852 			 * PHY address
2853 			 */
2854 			if (phy_type != e1000_phy_unknown) {
2855 				ret_val = E1000_SUCCESS;
2856 				goto out;
2857 			}
2858 			msec_delay(1);
2859 			i++;
2860 		} while (i < 10);
2861 	}
2862 
2863 out:
2864 	return ret_val;
2865 }
2866 
2867 /**
2868  *  e1000_get_phy_addr_for_bm_page - Retrieve PHY page address
2869  *  @page: page to access
2870  *
2871  *  Returns the phy address for the page requested.
2872  **/
2873 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg)
2874 {
2875 	u32 phy_addr = 2;
2876 
2877 	if ((page >= 768) || (page == 0 && reg == 25) || (reg == 31))
2878 		phy_addr = 1;
2879 
2880 	return phy_addr;
2881 }
2882 
2883 /**
2884  *  e1000_write_phy_reg_bm - Write BM PHY register
2885  *  @hw: pointer to the HW structure
2886  *  @offset: register offset to write to
2887  *  @data: data to write at register offset
2888  *
2889  *  Acquires semaphore, if necessary, then writes the data to PHY register
2890  *  at the offset.  Release any acquired semaphores before exiting.
2891  **/
2892 s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
2893 {
2894 	s32 ret_val;
2895 	u32 page = offset >> IGP_PAGE_SHIFT;
2896 
2897 	DEBUGFUNC("e1000_write_phy_reg_bm");
2898 
2899 	ret_val = hw->phy.ops.acquire(hw);
2900 	if (ret_val)
2901 		return ret_val;
2902 
2903 	/* Page 800 works differently than the rest so it has its own func */
2904 	if (page == BM_WUC_PAGE) {
2905 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
2906 		                                         FALSE);
2907 		goto out;
2908 	}
2909 
2910 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2911 
2912 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2913 		u32 page_shift, page_select;
2914 
2915 		/*
2916 		 * Page select is register 31 for phy address 1 and 22 for
2917 		 * phy address 2 and 3. Page select is shifted only for
2918 		 * phy address 1.
2919 		 */
2920 		if (hw->phy.addr == 1) {
2921 			page_shift = IGP_PAGE_SHIFT;
2922 			page_select = IGP01E1000_PHY_PAGE_SELECT;
2923 		} else {
2924 			page_shift = 0;
2925 			page_select = BM_PHY_PAGE_SELECT;
2926 		}
2927 
2928 		/* Page is shifted left, PHY expects (page x 32) */
2929 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
2930 		                                   (page << page_shift));
2931 		if (ret_val)
2932 			goto out;
2933 	}
2934 
2935 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2936 	                                   data);
2937 
2938 out:
2939 	hw->phy.ops.release(hw);
2940 	return ret_val;
2941 }
2942 
2943 /**
2944  *  e1000_read_phy_reg_bm - Read BM PHY register
2945  *  @hw: pointer to the HW structure
2946  *  @offset: register offset to be read
2947  *  @data: pointer to the read data
2948  *
2949  *  Acquires semaphore, if necessary, then reads the PHY register at offset
2950  *  and storing the retrieved information in data.  Release any acquired
2951  *  semaphores before exiting.
2952  **/
2953 s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
2954 {
2955 	s32 ret_val;
2956 	u32 page = offset >> IGP_PAGE_SHIFT;
2957 
2958 	DEBUGFUNC("e1000_read_phy_reg_bm");
2959 
2960 	ret_val = hw->phy.ops.acquire(hw);
2961 	if (ret_val)
2962 		return ret_val;
2963 
2964 	/* Page 800 works differently than the rest so it has its own func */
2965 	if (page == BM_WUC_PAGE) {
2966 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
2967 		                                         TRUE);
2968 		goto out;
2969 	}
2970 
2971 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2972 
2973 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2974 		u32 page_shift, page_select;
2975 
2976 		/*
2977 		 * Page select is register 31 for phy address 1 and 22 for
2978 		 * phy address 2 and 3. Page select is shifted only for
2979 		 * phy address 1.
2980 		 */
2981 		if (hw->phy.addr == 1) {
2982 			page_shift = IGP_PAGE_SHIFT;
2983 			page_select = IGP01E1000_PHY_PAGE_SELECT;
2984 		} else {
2985 			page_shift = 0;
2986 			page_select = BM_PHY_PAGE_SELECT;
2987 		}
2988 
2989 		/* Page is shifted left, PHY expects (page x 32) */
2990 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
2991 		                                   (page << page_shift));
2992 		if (ret_val)
2993 			goto out;
2994 	}
2995 
2996 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2997 	                                  data);
2998 out:
2999 	hw->phy.ops.release(hw);
3000 	return ret_val;
3001 }
3002 
3003 /**
3004  *  e1000_read_phy_reg_bm2 - Read BM PHY register
3005  *  @hw: pointer to the HW structure
3006  *  @offset: register offset to be read
3007  *  @data: pointer to the read data
3008  *
3009  *  Acquires semaphore, if necessary, then reads the PHY register at offset
3010  *  and storing the retrieved information in data.  Release any acquired
3011  *  semaphores before exiting.
3012  **/
3013 s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
3014 {
3015 	s32 ret_val;
3016 	u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
3017 
3018 	DEBUGFUNC("e1000_write_phy_reg_bm2");
3019 
3020 	ret_val = hw->phy.ops.acquire(hw);
3021 	if (ret_val)
3022 		return ret_val;
3023 
3024 	/* Page 800 works differently than the rest so it has its own func */
3025 	if (page == BM_WUC_PAGE) {
3026 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
3027 		                                         TRUE);
3028 		goto out;
3029 	}
3030 
3031 	hw->phy.addr = 1;
3032 
3033 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
3034 
3035 		/* Page is shifted left, PHY expects (page x 32) */
3036 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
3037 		                                   page);
3038 
3039 		if (ret_val)
3040 			goto out;
3041 	}
3042 
3043 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
3044 	                                  data);
3045 out:
3046 	hw->phy.ops.release(hw);
3047 	return ret_val;
3048 }
3049 
3050 /**
3051  *  e1000_write_phy_reg_bm2 - Write BM PHY register
3052  *  @hw: pointer to the HW structure
3053  *  @offset: register offset to write to
3054  *  @data: data to write at register offset
3055  *
3056  *  Acquires semaphore, if necessary, then writes the data to PHY register
3057  *  at the offset.  Release any acquired semaphores before exiting.
3058  **/
3059 s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
3060 {
3061 	s32 ret_val;
3062 	u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
3063 
3064 	DEBUGFUNC("e1000_write_phy_reg_bm2");
3065 
3066 	ret_val = hw->phy.ops.acquire(hw);
3067 	if (ret_val)
3068 		return ret_val;
3069 
3070 	/* Page 800 works differently than the rest so it has its own func */
3071 	if (page == BM_WUC_PAGE) {
3072 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
3073 		                                         FALSE);
3074 		goto out;
3075 	}
3076 
3077 	hw->phy.addr = 1;
3078 
3079 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
3080 		/* Page is shifted left, PHY expects (page x 32) */
3081 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
3082 		                                   page);
3083 
3084 		if (ret_val)
3085 			goto out;
3086 	}
3087 
3088 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
3089 	                                   data);
3090 
3091 out:
3092 	hw->phy.ops.release(hw);
3093 	return ret_val;
3094 }
3095 
3096 /**
3097  *  e1000_access_phy_wakeup_reg_bm - Read BM PHY wakeup register
3098  *  @hw: pointer to the HW structure
3099  *  @offset: register offset to be read or written
3100  *  @data: pointer to the data to read or write
3101  *  @read: determines if operation is read or write
3102  *
3103  *  Acquires semaphore, if necessary, then reads the PHY register at offset
3104  *  and storing the retrieved information in data.  Release any acquired
3105  *  semaphores before exiting. Note that procedure to read the wakeup
3106  *  registers are different. It works as such:
3107  *  1) Set page 769, register 17, bit 2 = 1
3108  *  2) Set page to 800 for host (801 if we were manageability)
3109  *  3) Write the address using the address opcode (0x11)
3110  *  4) Read or write the data using the data opcode (0x12)
3111  *  5) Restore 769_17.2 to its original value
3112  *
3113  *  Assumes semaphore already acquired.
3114  **/
3115 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
3116                                           u16 *data, bool read)
3117 {
3118 	s32 ret_val;
3119 	u16 reg = BM_PHY_REG_NUM(offset);
3120 	u16 phy_reg = 0;
3121 
3122 	DEBUGFUNC("e1000_access_phy_wakeup_reg_bm");
3123 
3124 	/* Gig must be disabled for MDIO accesses to page 800 */
3125 	if ((hw->mac.type == e1000_pchlan) &&
3126 	   (!(E1000_READ_REG(hw, E1000_PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE)))
3127 		DEBUGOUT("Attempting to access page 800 while gig enabled.\n");
3128 
3129 	/* All operations in this function are phy address 1 */
3130 	hw->phy.addr = 1;
3131 
3132 	/* Set page 769 */
3133 	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
3134 	                         (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
3135 
3136 	ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &phy_reg);
3137 	if (ret_val) {
3138 		DEBUGOUT("Could not read PHY page 769\n");
3139 		goto out;
3140 	}
3141 
3142 	/* First clear bit 4 to avoid a power state change */
3143 	phy_reg &= ~(BM_WUC_HOST_WU_BIT);
3144 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
3145 	if (ret_val) {
3146 		DEBUGOUT("Could not clear PHY page 769 bit 4\n");
3147 		goto out;
3148 	}
3149 
3150 	/* Write bit 2 = 1, and clear bit 4 to 769_17 */
3151 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG,
3152 	                                   phy_reg | BM_WUC_ENABLE_BIT);
3153 	if (ret_val) {
3154 		DEBUGOUT("Could not write PHY page 769 bit 2\n");
3155 		goto out;
3156 	}
3157 
3158 	/* Select page 800 */
3159 	ret_val = e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
3160 	                                   (BM_WUC_PAGE << IGP_PAGE_SHIFT));
3161 
3162 	/* Write the page 800 offset value using opcode 0x11 */
3163 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg);
3164 	if (ret_val) {
3165 		DEBUGOUT("Could not write address opcode to page 800\n");
3166 		goto out;
3167 	}
3168 
3169 	if (read) {
3170 	        /* Read the page 800 value using opcode 0x12 */
3171 		ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
3172 		                                  data);
3173 	} else {
3174 	        /* Write the page 800 value using opcode 0x12 */
3175 		ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
3176 		                                   *data);
3177 	}
3178 
3179 	if (ret_val) {
3180 		DEBUGOUT("Could not access data value from page 800\n");
3181 		goto out;
3182 	}
3183 
3184 	/*
3185 	 * Restore 769_17.2 to its original value
3186 	 * Set page 769
3187 	 */
3188 	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
3189 	                         (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
3190 
3191 	/* Clear 769_17.2 */
3192 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
3193 	if (ret_val) {
3194 		DEBUGOUT("Could not clear PHY page 769 bit 2\n");
3195 		goto out;
3196 	}
3197 
3198 out:
3199 	return ret_val;
3200 }
3201 
3202 /**
3203  * e1000_power_up_phy_copper - Restore copper link in case of PHY power down
3204  * @hw: pointer to the HW structure
3205  *
3206  * In the case of a PHY power down to save power, or to turn off link during a
3207  * driver unload, or wake on lan is not enabled, restore the link to previous
3208  * settings.
3209  **/
3210 void e1000_power_up_phy_copper(struct e1000_hw *hw)
3211 {
3212 	u16 mii_reg = 0;
3213 
3214 	/* The PHY will retain its settings across a power down/up cycle */
3215 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
3216 	mii_reg &= ~MII_CR_POWER_DOWN;
3217 	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
3218 }
3219 
3220 /**
3221  * e1000_power_down_phy_copper - Restore copper link in case of PHY power down
3222  * @hw: pointer to the HW structure
3223  *
3224  * In the case of a PHY power down to save power, or to turn off link during a
3225  * driver unload, or wake on lan is not enabled, restore the link to previous
3226  * settings.
3227  **/
3228 void e1000_power_down_phy_copper(struct e1000_hw *hw)
3229 {
3230 	u16 mii_reg = 0;
3231 
3232 	/* The PHY will retain its settings across a power down/up cycle */
3233 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
3234 	mii_reg |= MII_CR_POWER_DOWN;
3235 	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
3236 	msec_delay(1);
3237 }
3238 
3239 /**
3240  *  __e1000_read_phy_reg_hv -  Read HV PHY register
3241  *  @hw: pointer to the HW structure
3242  *  @offset: register offset to be read
3243  *  @data: pointer to the read data
3244  *  @locked: semaphore has already been acquired or not
3245  *
3246  *  Acquires semaphore, if necessary, then reads the PHY register at offset
3247  *  and stores the retrieved information in data.  Release any acquired
3248  *  semaphore before exiting.
3249  **/
3250 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data,
3251                                    bool locked)
3252 {
3253 	s32 ret_val;
3254 	u16 page = BM_PHY_REG_PAGE(offset);
3255 	u16 reg = BM_PHY_REG_NUM(offset);
3256 
3257 	DEBUGFUNC("__e1000_read_phy_reg_hv");
3258 
3259 	if (!locked) {
3260 		ret_val = hw->phy.ops.acquire(hw);
3261 		if (ret_val)
3262 			return ret_val;
3263 	}
3264 
3265 	/* Page 800 works differently than the rest so it has its own func */
3266 	if (page == BM_WUC_PAGE) {
3267 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
3268 		                                         data, TRUE);
3269 		goto out;
3270 	}
3271 
3272 	if (page > 0 && page < HV_INTC_FC_PAGE_START) {
3273 		ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
3274 		                                         data, TRUE);
3275 		goto out;
3276 	}
3277 
3278 	hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
3279 
3280 	if (page == HV_INTC_FC_PAGE_START)
3281 		page = 0;
3282 
3283 	if (reg > MAX_PHY_MULTI_PAGE_REG) {
3284 		u32 phy_addr = hw->phy.addr;
3285 
3286 		hw->phy.addr = 1;
3287 
3288 		/* Page is shifted left, PHY expects (page x 32) */
3289 		ret_val = e1000_write_phy_reg_mdic(hw,
3290 					     IGP01E1000_PHY_PAGE_SELECT,
3291 					     (page << IGP_PAGE_SHIFT));
3292 		hw->phy.addr = phy_addr;
3293 
3294 		if (ret_val)
3295 			goto out;
3296 	}
3297 
3298 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
3299 	                                  data);
3300 out:
3301 	if (!locked)
3302 		hw->phy.ops.release(hw);
3303 
3304 	return ret_val;
3305 }
3306 
3307 /**
3308  *  e1000_read_phy_reg_hv -  Read HV PHY register
3309  *  @hw: pointer to the HW structure
3310  *  @offset: register offset to be read
3311  *  @data: pointer to the read data
3312  *
3313  *  Acquires semaphore then reads the PHY register at offset and stores
3314  *  the retrieved information in data.  Release the acquired semaphore
3315  *  before exiting.
3316  **/
3317 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data)
3318 {
3319 	return __e1000_read_phy_reg_hv(hw, offset, data, FALSE);
3320 }
3321 
3322 /**
3323  *  e1000_read_phy_reg_hv_locked -  Read HV PHY register
3324  *  @hw: pointer to the HW structure
3325  *  @offset: register offset to be read
3326  *  @data: pointer to the read data
3327  *
3328  *  Reads the PHY register at offset and stores the retrieved information
3329  *  in data.  Assumes semaphore already acquired.
3330  **/
3331 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data)
3332 {
3333 	return __e1000_read_phy_reg_hv(hw, offset, data, TRUE);
3334 }
3335 
3336 /**
3337  *  __e1000_write_phy_reg_hv - Write HV PHY register
3338  *  @hw: pointer to the HW structure
3339  *  @offset: register offset to write to
3340  *  @data: data to write at register offset
3341  *  @locked: semaphore has already been acquired or not
3342  *
3343  *  Acquires semaphore, if necessary, then writes the data to PHY register
3344  *  at the offset.  Release any acquired semaphores before exiting.
3345  **/
3346 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data,
3347                                     bool locked)
3348 {
3349 	s32 ret_val;
3350 	u16 page = BM_PHY_REG_PAGE(offset);
3351 	u16 reg = BM_PHY_REG_NUM(offset);
3352 
3353 	DEBUGFUNC("__e1000_write_phy_reg_hv");
3354 
3355 	if (!locked) {
3356 		ret_val = hw->phy.ops.acquire(hw);
3357 		if (ret_val)
3358 			return ret_val;
3359 	}
3360 
3361 	/* Page 800 works differently than the rest so it has its own func */
3362 	if (page == BM_WUC_PAGE) {
3363 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
3364 		                                         &data, FALSE);
3365 		goto out;
3366 	}
3367 
3368 	if (page > 0 && page < HV_INTC_FC_PAGE_START) {
3369 		ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
3370 		                                         &data, FALSE);
3371 		goto out;
3372 	}
3373 
3374 	hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
3375 
3376 	if (page == HV_INTC_FC_PAGE_START)
3377 		page = 0;
3378 
3379 	/*
3380 	 * Workaround MDIO accesses being disabled after entering IEEE Power
3381 	 * Down (whenever bit 11 of the PHY Control register is set)
3382 	 */
3383 	if ((hw->phy.type == e1000_phy_82578) &&
3384 	    (hw->phy.revision >= 1) &&
3385 	    (hw->phy.addr == 2) &&
3386 	    ((MAX_PHY_REG_ADDRESS & reg) == 0) &&
3387 	    (data & (1 << 11))) {
3388 		u16 data2 = 0x7EFF;
3389 		ret_val = e1000_access_phy_debug_regs_hv(hw, (1 << 6) | 0x3,
3390 		                                         &data2, FALSE);
3391 		if (ret_val)
3392 			goto out;
3393 	}
3394 
3395 	if (reg > MAX_PHY_MULTI_PAGE_REG) {
3396 		u32 phy_addr = hw->phy.addr;
3397 
3398 		hw->phy.addr = 1;
3399 
3400 		/* Page is shifted left, PHY expects (page x 32) */
3401 		ret_val = e1000_write_phy_reg_mdic(hw,
3402 					     IGP01E1000_PHY_PAGE_SELECT,
3403 					     (page << IGP_PAGE_SHIFT));
3404 		hw->phy.addr = phy_addr;
3405 
3406 		if (ret_val)
3407 			goto out;
3408 	}
3409 
3410 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
3411 	                                  data);
3412 
3413 out:
3414 	if (!locked)
3415 		hw->phy.ops.release(hw);
3416 
3417 	return ret_val;
3418 }
3419 
3420 /**
3421  *  e1000_write_phy_reg_hv - Write HV PHY register
3422  *  @hw: pointer to the HW structure
3423  *  @offset: register offset to write to
3424  *  @data: data to write at register offset
3425  *
3426  *  Acquires semaphore then writes the data to PHY register at the offset.
3427  *  Release the acquired semaphores before exiting.
3428  **/
3429 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
3430 {
3431 	return __e1000_write_phy_reg_hv(hw, offset, data, FALSE);
3432 }
3433 
3434 /**
3435  *  e1000_write_phy_reg_hv_locked - Write HV PHY register
3436  *  @hw: pointer to the HW structure
3437  *  @offset: register offset to write to
3438  *  @data: data to write at register offset
3439  *
3440  *  Writes the data to PHY register at the offset.  Assumes semaphore
3441  *  already acquired.
3442  **/
3443 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data)
3444 {
3445 	return __e1000_write_phy_reg_hv(hw, offset, data, TRUE);
3446 }
3447 
3448 /**
3449  *  e1000_get_phy_addr_for_hv_page - Get PHY adrress based on page
3450  *  @page: page to be accessed
3451  **/
3452 static u32 e1000_get_phy_addr_for_hv_page(u32 page)
3453 {
3454 	u32 phy_addr = 2;
3455 
3456 	if (page >= HV_INTC_FC_PAGE_START)
3457 		phy_addr = 1;
3458 
3459 	return phy_addr;
3460 }
3461 
3462 /**
3463  *  e1000_access_phy_debug_regs_hv - Read HV PHY vendor specific high registers
3464  *  @hw: pointer to the HW structure
3465  *  @offset: register offset to be read or written
3466  *  @data: pointer to the data to be read or written
3467  *  @read: determines if operation is read or written
3468  *
3469  *  Reads the PHY register at offset and stores the retreived information
3470  *  in data.  Assumes semaphore already acquired.  Note that the procedure
3471  *  to read these regs uses the address port and data port to read/write.
3472  **/
3473 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
3474                                           u16 *data, bool read)
3475 {
3476 	s32 ret_val;
3477 	u32 addr_reg = 0;
3478 	u32 data_reg = 0;
3479 
3480 	DEBUGFUNC("e1000_access_phy_debug_regs_hv");
3481 
3482 	/* This takes care of the difference with desktop vs mobile phy */
3483 	addr_reg = (hw->phy.type == e1000_phy_82578) ?
3484 	           I82578_ADDR_REG : I82577_ADDR_REG;
3485 	data_reg = addr_reg + 1;
3486 
3487 	/* All operations in this function are phy address 2 */
3488 	hw->phy.addr = 2;
3489 
3490 	/* masking with 0x3F to remove the page from offset */
3491 	ret_val = e1000_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F);
3492 	if (ret_val) {
3493 		DEBUGOUT("Could not write PHY the HV address register\n");
3494 		goto out;
3495 	}
3496 
3497 	/* Read or write the data value next */
3498 	if (read)
3499 		ret_val = e1000_read_phy_reg_mdic(hw, data_reg, data);
3500 	else
3501 		ret_val = e1000_write_phy_reg_mdic(hw, data_reg, *data);
3502 
3503 	if (ret_val) {
3504 		DEBUGOUT("Could not read data value from HV data register\n");
3505 		goto out;
3506 	}
3507 
3508 out:
3509 	return ret_val;
3510 }
3511 
3512 /**
3513  *  e1000_link_stall_workaround_hv - Si workaround
3514  *  @hw: pointer to the HW structure
3515  *
3516  *  This function works around a Si bug where the link partner can get
3517  *  a link up indication before the PHY does.  If small packets are sent
3518  *  by the link partner they can be placed in the packet buffer without
3519  *  being properly accounted for by the PHY and will stall preventing
3520  *  further packets from being received.  The workaround is to clear the
3521  *  packet buffer after the PHY detects link up.
3522  **/
3523 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw)
3524 {
3525 	s32 ret_val = E1000_SUCCESS;
3526 	u16 data;
3527 
3528 	DEBUGFUNC("e1000_link_stall_workaround_hv");
3529 
3530 	if (hw->phy.type != e1000_phy_82578)
3531 		goto out;
3532 
3533 	/* Do not apply workaround if in PHY loopback bit 14 set */
3534 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &data);
3535 	if (data & PHY_CONTROL_LB)
3536 		goto out;
3537 
3538 	/* check if link is up and at 1Gbps */
3539 	ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data);
3540 	if (ret_val)
3541 		goto out;
3542 
3543 	data &= BM_CS_STATUS_LINK_UP |
3544 	        BM_CS_STATUS_RESOLVED |
3545 	        BM_CS_STATUS_SPEED_MASK;
3546 
3547 	if (data != (BM_CS_STATUS_LINK_UP |
3548 	             BM_CS_STATUS_RESOLVED |
3549 	             BM_CS_STATUS_SPEED_1000))
3550 		goto out;
3551 
3552 	msec_delay(200);
3553 
3554 	/* flush the packets in the fifo buffer */
3555 	ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL,
3556 	                                HV_MUX_DATA_CTRL_GEN_TO_MAC |
3557 	                                HV_MUX_DATA_CTRL_FORCE_SPEED);
3558 	if (ret_val)
3559 		goto out;
3560 
3561 	ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL,
3562 	                                HV_MUX_DATA_CTRL_GEN_TO_MAC);
3563 
3564 out:
3565 	return ret_val;
3566 }
3567 
3568 /**
3569  *  e1000_check_polarity_82577 - Checks the polarity.
3570  *  @hw: pointer to the HW structure
3571  *
3572  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
3573  *
3574  *  Polarity is determined based on the PHY specific status register.
3575  **/
3576 s32 e1000_check_polarity_82577(struct e1000_hw *hw)
3577 {
3578 	struct e1000_phy_info *phy = &hw->phy;
3579 	s32 ret_val;
3580 	u16 data;
3581 
3582 	DEBUGFUNC("e1000_check_polarity_82577");
3583 
3584 	ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data);
3585 
3586 	if (!ret_val)
3587 		phy->cable_polarity = (data & I82577_PHY_STATUS2_REV_POLARITY)
3588 		                      ? e1000_rev_polarity_reversed
3589 		                      : e1000_rev_polarity_normal;
3590 
3591 	return ret_val;
3592 }
3593 
3594 /**
3595  *  e1000_phy_force_speed_duplex_82577 - Force speed/duplex for I82577 PHY
3596  *  @hw: pointer to the HW structure
3597  *
3598  *  Calls the PHY setup function to force speed and duplex.
3599  **/
3600 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw)
3601 {
3602 	struct e1000_phy_info *phy = &hw->phy;
3603 	s32 ret_val;
3604 	u16 phy_data;
3605 	bool link;
3606 
3607 	DEBUGFUNC("e1000_phy_force_speed_duplex_82577");
3608 
3609 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
3610 	if (ret_val)
3611 		goto out;
3612 
3613 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
3614 
3615 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
3616 	if (ret_val)
3617 		goto out;
3618 
3619 	usec_delay(1);
3620 
3621 	if (phy->autoneg_wait_to_complete) {
3622 		DEBUGOUT("Waiting for forced speed/duplex link on 82577 phy\n");
3623 
3624 		ret_val = e1000_phy_has_link_generic(hw,
3625 		                                     PHY_FORCE_LIMIT,
3626 		                                     100000,
3627 		                                     &link);
3628 		if (ret_val)
3629 			goto out;
3630 
3631 		if (!link)
3632 			DEBUGOUT("Link taking longer than expected.\n");
3633 
3634 		/* Try once more */
3635 		ret_val = e1000_phy_has_link_generic(hw,
3636 		                                     PHY_FORCE_LIMIT,
3637 		                                     100000,
3638 		                                     &link);
3639 		if (ret_val)
3640 			goto out;
3641 	}
3642 
3643 out:
3644 	return ret_val;
3645 }
3646 
3647 /**
3648  *  e1000_get_phy_info_82577 - Retrieve I82577 PHY information
3649  *  @hw: pointer to the HW structure
3650  *
3651  *  Read PHY status to determine if link is up.  If link is up, then
3652  *  set/determine 10base-T extended distance and polarity correction.  Read
3653  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
3654  *  determine on the cable length, local and remote receiver.
3655  **/
3656 s32 e1000_get_phy_info_82577(struct e1000_hw *hw)
3657 {
3658 	struct e1000_phy_info *phy = &hw->phy;
3659 	s32 ret_val;
3660 	u16 data;
3661 	bool link;
3662 
3663 	DEBUGFUNC("e1000_get_phy_info_82577");
3664 
3665 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
3666 	if (ret_val)
3667 		goto out;
3668 
3669 	if (!link) {
3670 		DEBUGOUT("Phy info is only valid if link is up\n");
3671 		ret_val = -E1000_ERR_CONFIG;
3672 		goto out;
3673 	}
3674 
3675 	phy->polarity_correction = TRUE;
3676 
3677 	ret_val = e1000_check_polarity_82577(hw);
3678 	if (ret_val)
3679 		goto out;
3680 
3681 	ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data);
3682 	if (ret_val)
3683 		goto out;
3684 
3685 	phy->is_mdix = (data & I82577_PHY_STATUS2_MDIX) ? TRUE : FALSE;
3686 
3687 	if ((data & I82577_PHY_STATUS2_SPEED_MASK) ==
3688 	    I82577_PHY_STATUS2_SPEED_1000MBPS) {
3689 		ret_val = hw->phy.ops.get_cable_length(hw);
3690 		if (ret_val)
3691 			goto out;
3692 
3693 		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
3694 		if (ret_val)
3695 			goto out;
3696 
3697 		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
3698 		                ? e1000_1000t_rx_status_ok
3699 		                : e1000_1000t_rx_status_not_ok;
3700 
3701 		phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
3702 		                 ? e1000_1000t_rx_status_ok
3703 		                 : e1000_1000t_rx_status_not_ok;
3704 	} else {
3705 		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
3706 		phy->local_rx = e1000_1000t_rx_status_undefined;
3707 		phy->remote_rx = e1000_1000t_rx_status_undefined;
3708 	}
3709 
3710 out:
3711 	return ret_val;
3712 }
3713 
3714 /**
3715  *  e1000_get_cable_length_82577 - Determine cable length for 82577 PHY
3716  *  @hw: pointer to the HW structure
3717  *
3718  * Reads the diagnostic status register and verifies result is valid before
3719  * placing it in the phy_cable_length field.
3720  **/
3721 s32 e1000_get_cable_length_82577(struct e1000_hw *hw)
3722 {
3723 	struct e1000_phy_info *phy = &hw->phy;
3724 	s32 ret_val;
3725 	u16 phy_data, length;
3726 
3727 	DEBUGFUNC("e1000_get_cable_length_82577");
3728 
3729 	ret_val = phy->ops.read_reg(hw, I82577_PHY_DIAG_STATUS, &phy_data);
3730 	if (ret_val)
3731 		goto out;
3732 
3733 	length = (phy_data & I82577_DSTATUS_CABLE_LENGTH) >>
3734 	         I82577_DSTATUS_CABLE_LENGTH_SHIFT;
3735 
3736 	if (length == E1000_CABLE_LENGTH_UNDEFINED)
3737 		ret_val = -E1000_ERR_PHY;
3738 
3739 	phy->cable_length = length;
3740 
3741 out:
3742 	return ret_val;
3743 }
3744