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