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