xref: /dragonfly/sys/dev/netif/ig_hal/e1000_phy.c (revision e293de53)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2008, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 #include "e1000_api.h"
36 
37 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg);
38 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
39                                           u16 *data, bool read);
40 /* Cable length tables */
41 static const u16 e1000_m88_cable_length_table[] =
42 	{ 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
43 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \
44                 (sizeof(e1000_m88_cable_length_table) / \
45                  sizeof(e1000_m88_cable_length_table[0]))
46 
47 static const u16 e1000_igp_2_cable_length_table[] =
48     { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
49       0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
50       6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
51       21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
52       40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
53       60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
54       83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
55       104, 109, 114, 118, 121, 124};
56 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
57                 (sizeof(e1000_igp_2_cable_length_table) / \
58                  sizeof(e1000_igp_2_cable_length_table[0]))
59 
60 /**
61  *  e1000_init_phy_ops_generic - Initialize PHY function pointers
62  *  @hw: pointer to the HW structure
63  *
64  *  Setups up the function pointers to no-op functions
65  **/
66 void e1000_init_phy_ops_generic(struct e1000_hw *hw)
67 {
68 	struct e1000_phy_info *phy = &hw->phy;
69 	DEBUGFUNC("e1000_init_phy_ops_generic");
70 
71 	/* Initialize function pointers */
72 	phy->ops.init_params = e1000_null_ops_generic;
73 	phy->ops.acquire = e1000_null_ops_generic;
74 	phy->ops.check_polarity = e1000_null_ops_generic;
75 	phy->ops.check_reset_block = e1000_null_ops_generic;
76 	phy->ops.commit = e1000_null_ops_generic;
77 	phy->ops.force_speed_duplex = e1000_null_ops_generic;
78 	phy->ops.get_cfg_done = e1000_null_ops_generic;
79 	phy->ops.get_cable_length = e1000_null_ops_generic;
80 	phy->ops.get_info = e1000_null_ops_generic;
81 	phy->ops.read_reg = e1000_null_read_reg;
82 	phy->ops.release = e1000_null_phy_generic;
83 	phy->ops.reset = e1000_null_ops_generic;
84 	phy->ops.set_d0_lplu_state = e1000_null_lplu_state;
85 	phy->ops.set_d3_lplu_state = e1000_null_lplu_state;
86 	phy->ops.write_reg = e1000_null_write_reg;
87 	phy->ops.power_up = e1000_null_phy_generic;
88 	phy->ops.power_down = e1000_null_phy_generic;
89 	phy->ops.cfg_on_link_up = e1000_null_ops_generic;
90 }
91 
92 /**
93  *  e1000_null_read_reg - No-op function, return 0
94  *  @hw: pointer to the HW structure
95  **/
96 s32 e1000_null_read_reg(struct e1000_hw *hw, u32 offset, u16 *data)
97 {
98 	DEBUGFUNC("e1000_null_read_reg");
99 	return E1000_SUCCESS;
100 }
101 
102 /**
103  *  e1000_null_phy_generic - No-op function, return void
104  *  @hw: pointer to the HW structure
105  **/
106 void e1000_null_phy_generic(struct e1000_hw *hw)
107 {
108 	DEBUGFUNC("e1000_null_phy_generic");
109 	return;
110 }
111 
112 /**
113  *  e1000_null_lplu_state - No-op function, return 0
114  *  @hw: pointer to the HW structure
115  **/
116 s32 e1000_null_lplu_state(struct e1000_hw *hw, bool active)
117 {
118 	DEBUGFUNC("e1000_null_lplu_state");
119 	return E1000_SUCCESS;
120 }
121 
122 /**
123  *  e1000_null_write_reg - No-op function, return 0
124  *  @hw: pointer to the HW structure
125  **/
126 s32 e1000_null_write_reg(struct e1000_hw *hw, u32 offset, u16 data)
127 {
128 	DEBUGFUNC("e1000_null_write_reg");
129 	return E1000_SUCCESS;
130 }
131 
132 /**
133  *  e1000_check_reset_block_generic - Check if PHY reset is blocked
134  *  @hw: pointer to the HW structure
135  *
136  *  Read the PHY management control register and check whether a PHY reset
137  *  is blocked.  If a reset is not blocked return E1000_SUCCESS, otherwise
138  *  return E1000_BLK_PHY_RESET (12).
139  **/
140 s32 e1000_check_reset_block_generic(struct e1000_hw *hw)
141 {
142 	u32 manc;
143 
144 	DEBUGFUNC("e1000_check_reset_block");
145 
146 	manc = E1000_READ_REG(hw, E1000_MANC);
147 
148 	return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
149 	       E1000_BLK_PHY_RESET : E1000_SUCCESS;
150 }
151 
152 /**
153  *  e1000_get_phy_id - Retrieve the PHY ID and revision
154  *  @hw: pointer to the HW structure
155  *
156  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
157  *  revision in the hardware structure.
158  **/
159 s32 e1000_get_phy_id(struct e1000_hw *hw)
160 {
161 	struct e1000_phy_info *phy = &hw->phy;
162 	s32 ret_val = E1000_SUCCESS;
163 	u16 phy_id;
164 
165 	DEBUGFUNC("e1000_get_phy_id");
166 
167 	if (!(phy->ops.read_reg))
168 		goto out;
169 
170 	ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
171 	if (ret_val)
172 		goto out;
173 
174 	phy->id = (u32)(phy_id << 16);
175 	usec_delay(20);
176 	ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
177 	if (ret_val)
178 		goto out;
179 
180 	phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
181 	phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
182 
183 out:
184 	return ret_val;
185 }
186 
187 /**
188  *  e1000_phy_reset_dsp_generic - Reset PHY DSP
189  *  @hw: pointer to the HW structure
190  *
191  *  Reset the digital signal processor.
192  **/
193 s32 e1000_phy_reset_dsp_generic(struct e1000_hw *hw)
194 {
195 	s32 ret_val = E1000_SUCCESS;
196 
197 	DEBUGFUNC("e1000_phy_reset_dsp_generic");
198 
199 	if (!(hw->phy.ops.write_reg))
200 		goto out;
201 
202 	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
203 	if (ret_val)
204 		goto out;
205 
206 	ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0);
207 
208 out:
209 	return ret_val;
210 }
211 
212 /**
213  *  e1000_read_phy_reg_mdic - Read MDI control register
214  *  @hw: pointer to the HW structure
215  *  @offset: register offset to be read
216  *  @data: pointer to the read data
217  *
218  *  Reads the MDI control register in the PHY at offset and stores the
219  *  information read to data.
220  **/
221 s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
222 {
223 	struct e1000_phy_info *phy = &hw->phy;
224 	u32 i, mdic = 0;
225 	s32 ret_val = E1000_SUCCESS;
226 
227 	DEBUGFUNC("e1000_read_phy_reg_mdic");
228 
229 	/*
230 	 * Set up Op-code, Phy Address, and register offset in the MDI
231 	 * Control register.  The MAC will take care of interfacing with the
232 	 * PHY to retrieve the desired data.
233 	 */
234 	mdic = ((offset << E1000_MDIC_REG_SHIFT) |
235 	        (phy->addr << E1000_MDIC_PHY_SHIFT) |
236 	        (E1000_MDIC_OP_READ));
237 
238 	E1000_WRITE_REG(hw, E1000_MDIC, mdic);
239 
240 	/*
241 	 * Poll the ready bit to see if the MDI read completed
242 	 * Increasing the time out as testing showed failures with
243 	 * the lower time out
244 	 */
245 	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
246 		usec_delay(50);
247 		mdic = E1000_READ_REG(hw, E1000_MDIC);
248 		if (mdic & E1000_MDIC_READY)
249 			break;
250 	}
251 	if (!(mdic & E1000_MDIC_READY)) {
252 		DEBUGOUT("MDI Read did not complete\n");
253 		ret_val = -E1000_ERR_PHY;
254 		goto out;
255 	}
256 	if (mdic & E1000_MDIC_ERROR) {
257 		DEBUGOUT("MDI Error\n");
258 		ret_val = -E1000_ERR_PHY;
259 		goto out;
260 	}
261 	*data = (u16) mdic;
262 
263 out:
264 	return ret_val;
265 }
266 
267 /**
268  *  e1000_write_phy_reg_mdic - Write MDI control register
269  *  @hw: pointer to the HW structure
270  *  @offset: register offset to write to
271  *  @data: data to write to register at offset
272  *
273  *  Writes data to MDI control register in the PHY at offset.
274  **/
275 s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
276 {
277 	struct e1000_phy_info *phy = &hw->phy;
278 	u32 i, mdic = 0;
279 	s32 ret_val = E1000_SUCCESS;
280 
281 	DEBUGFUNC("e1000_write_phy_reg_mdic");
282 
283 	/*
284 	 * Set up Op-code, Phy Address, and register offset in the MDI
285 	 * Control register.  The MAC will take care of interfacing with the
286 	 * PHY to retrieve the desired data.
287 	 */
288 	mdic = (((u32)data) |
289 	        (offset << E1000_MDIC_REG_SHIFT) |
290 	        (phy->addr << E1000_MDIC_PHY_SHIFT) |
291 	        (E1000_MDIC_OP_WRITE));
292 
293 	E1000_WRITE_REG(hw, E1000_MDIC, mdic);
294 
295 	/*
296 	 * Poll the ready bit to see if the MDI read completed
297 	 * Increasing the time out as testing showed failures with
298 	 * the lower time out
299 	 */
300 	for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
301 		usec_delay(50);
302 		mdic = E1000_READ_REG(hw, E1000_MDIC);
303 		if (mdic & E1000_MDIC_READY)
304 			break;
305 	}
306 	if (!(mdic & E1000_MDIC_READY)) {
307 		DEBUGOUT("MDI Write did not complete\n");
308 		ret_val = -E1000_ERR_PHY;
309 		goto out;
310 	}
311 	if (mdic & E1000_MDIC_ERROR) {
312 		DEBUGOUT("MDI Error\n");
313 		ret_val = -E1000_ERR_PHY;
314 		goto out;
315 	}
316 
317 out:
318 	return ret_val;
319 }
320 
321 /**
322  *  e1000_read_phy_reg_m88 - Read m88 PHY register
323  *  @hw: pointer to the HW structure
324  *  @offset: register offset to be read
325  *  @data: pointer to the read data
326  *
327  *  Acquires semaphore, if necessary, then reads the PHY register at offset
328  *  and storing the retrieved information in data.  Release any acquired
329  *  semaphores before exiting.
330  **/
331 s32 e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data)
332 {
333 	s32 ret_val = E1000_SUCCESS;
334 
335 	DEBUGFUNC("e1000_read_phy_reg_m88");
336 
337 	if (!(hw->phy.ops.acquire))
338 		goto out;
339 
340 	ret_val = hw->phy.ops.acquire(hw);
341 	if (ret_val)
342 		goto out;
343 
344 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
345 	                                  data);
346 
347 	hw->phy.ops.release(hw);
348 
349 out:
350 	return ret_val;
351 }
352 
353 /**
354  *  e1000_write_phy_reg_m88 - Write m88 PHY register
355  *  @hw: pointer to the HW structure
356  *  @offset: register offset to write to
357  *  @data: data to write at register offset
358  *
359  *  Acquires semaphore, if necessary, then writes the data to PHY register
360  *  at the offset.  Release any acquired semaphores before exiting.
361  **/
362 s32 e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data)
363 {
364 	s32 ret_val = E1000_SUCCESS;
365 
366 	DEBUGFUNC("e1000_write_phy_reg_m88");
367 
368 	if (!(hw->phy.ops.acquire))
369 		goto out;
370 
371 	ret_val = hw->phy.ops.acquire(hw);
372 	if (ret_val)
373 		goto out;
374 
375 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
376 	                                   data);
377 
378 	hw->phy.ops.release(hw);
379 
380 out:
381 	return ret_val;
382 }
383 
384 /**
385  *  e1000_read_phy_reg_igp - Read igp PHY register
386  *  @hw: pointer to the HW structure
387  *  @offset: register offset to be read
388  *  @data: pointer to the read data
389  *
390  *  Acquires semaphore, if necessary, then reads the PHY register at offset
391  *  and storing the retrieved information in data.  Release any acquired
392  *  semaphores before exiting.
393  **/
394 s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
395 {
396 	s32 ret_val = E1000_SUCCESS;
397 
398 	DEBUGFUNC("e1000_read_phy_reg_igp");
399 
400 	if (!(hw->phy.ops.acquire))
401 		goto out;
402 
403 	ret_val = hw->phy.ops.acquire(hw);
404 	if (ret_val)
405 		goto out;
406 
407 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
408 		ret_val = e1000_write_phy_reg_mdic(hw,
409 		                                   IGP01E1000_PHY_PAGE_SELECT,
410 		                                   (u16)offset);
411 		if (ret_val) {
412 			hw->phy.ops.release(hw);
413 			goto out;
414 		}
415 	}
416 
417 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
418 	                                  data);
419 
420 	hw->phy.ops.release(hw);
421 
422 out:
423 	return ret_val;
424 }
425 
426 /**
427  *  e1000_write_phy_reg_igp - Write igp PHY register
428  *  @hw: pointer to the HW structure
429  *  @offset: register offset to write to
430  *  @data: data to write at register offset
431  *
432  *  Acquires semaphore, if necessary, then writes the data to PHY register
433  *  at the offset.  Release any acquired semaphores before exiting.
434  **/
435 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
436 {
437 	s32 ret_val = E1000_SUCCESS;
438 
439 	DEBUGFUNC("e1000_write_phy_reg_igp");
440 
441 	if (!(hw->phy.ops.acquire))
442 		goto out;
443 
444 	ret_val = hw->phy.ops.acquire(hw);
445 	if (ret_val)
446 		goto out;
447 
448 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
449 		ret_val = e1000_write_phy_reg_mdic(hw,
450 		                                   IGP01E1000_PHY_PAGE_SELECT,
451 		                                   (u16)offset);
452 		if (ret_val) {
453 			hw->phy.ops.release(hw);
454 			goto out;
455 		}
456 	}
457 
458 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
459 	                                   data);
460 
461 	hw->phy.ops.release(hw);
462 
463 out:
464 	return ret_val;
465 }
466 
467 /**
468  *  e1000_read_kmrn_reg_generic - Read kumeran register
469  *  @hw: pointer to the HW structure
470  *  @offset: register offset to be read
471  *  @data: pointer to the read data
472  *
473  *  Acquires semaphore, if necessary.  Then reads the PHY register at offset
474  *  using the kumeran interface.  The information retrieved is stored in data.
475  *  Release any acquired semaphores before exiting.
476  **/
477 s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
478 {
479 	u32 kmrnctrlsta;
480 	s32 ret_val = E1000_SUCCESS;
481 
482 	DEBUGFUNC("e1000_read_kmrn_reg_generic");
483 
484 	if (!(hw->phy.ops.acquire))
485 		goto out;
486 
487 	ret_val = hw->phy.ops.acquire(hw);
488 	if (ret_val)
489 		goto out;
490 
491 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
492 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
493 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
494 
495 	usec_delay(2);
496 
497 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
498 	*data = (u16)kmrnctrlsta;
499 
500 	hw->phy.ops.release(hw);
501 
502 out:
503 	return ret_val;
504 }
505 
506 /**
507  *  e1000_write_kmrn_reg_generic - Write kumeran register
508  *  @hw: pointer to the HW structure
509  *  @offset: register offset to write to
510  *  @data: data to write at register offset
511  *
512  *  Acquires semaphore, if necessary.  Then write the data to PHY register
513  *  at the offset using the kumeran interface.  Release any acquired semaphores
514  *  before exiting.
515  **/
516 s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data)
517 {
518 	u32 kmrnctrlsta;
519 	s32 ret_val = E1000_SUCCESS;
520 
521 	DEBUGFUNC("e1000_write_kmrn_reg_generic");
522 
523 	if (!(hw->phy.ops.acquire))
524 		goto out;
525 
526 	ret_val = hw->phy.ops.acquire(hw);
527 	if (ret_val)
528 		goto out;
529 
530 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
531 	               E1000_KMRNCTRLSTA_OFFSET) | data;
532 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
533 
534 	usec_delay(2);
535 	hw->phy.ops.release(hw);
536 
537 out:
538 	return ret_val;
539 }
540 
541 /**
542  *  e1000_copper_link_setup_m88 - Setup m88 PHY's for copper link
543  *  @hw: pointer to the HW structure
544  *
545  *  Sets up MDI/MDI-X and polarity for m88 PHY's.  If necessary, transmit clock
546  *  and downshift values are set also.
547  **/
548 s32 e1000_copper_link_setup_m88(struct e1000_hw *hw)
549 {
550 	struct e1000_phy_info *phy = &hw->phy;
551 	s32 ret_val;
552 	u16 phy_data;
553 
554 	DEBUGFUNC("e1000_copper_link_setup_m88");
555 
556 	if (phy->reset_disable) {
557 		ret_val = E1000_SUCCESS;
558 		goto out;
559 	}
560 
561 	/* Enable CRS on TX. This must be set for half-duplex operation. */
562 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
563 	if (ret_val)
564 		goto out;
565 
566 	/* For newer PHYs this bit is downshift enable */
567 	if (phy->type == e1000_phy_m88)
568 		phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
569 
570 	/*
571 	 * Options:
572 	 *   MDI/MDI-X = 0 (default)
573 	 *   0 - Auto for all speeds
574 	 *   1 - MDI mode
575 	 *   2 - MDI-X mode
576 	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
577 	 */
578 	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
579 
580 	switch (phy->mdix) {
581 	case 1:
582 		phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
583 		break;
584 	case 2:
585 		phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
586 		break;
587 	case 3:
588 		phy_data |= M88E1000_PSCR_AUTO_X_1000T;
589 		break;
590 	case 0:
591 	default:
592 		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
593 		break;
594 	}
595 
596 	/*
597 	 * Options:
598 	 *   disable_polarity_correction = 0 (default)
599 	 *       Automatic Correction for Reversed Cable Polarity
600 	 *   0 - Disabled
601 	 *   1 - Enabled
602 	 */
603 	phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
604 	if (phy->disable_polarity_correction == 1)
605 		phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
606 
607 	/* Enable downshift on BM (disabled by default) */
608 	if (phy->type == e1000_phy_bm)
609 		phy_data |= BME1000_PSCR_ENABLE_DOWNSHIFT;
610 
611 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
612 	if (ret_val)
613 		goto out;
614 
615 	if ((phy->type == e1000_phy_m88) &&
616 	    (phy->revision < E1000_REVISION_4) &&
617 	    (phy->id != BME1000_E_PHY_ID_R2)) {
618 		/*
619 		 * Force TX_CLK in the Extended PHY Specific Control Register
620 		 * to 25MHz clock.
621 		 */
622 		ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
623 		                             &phy_data);
624 		if (ret_val)
625 			goto out;
626 
627 		phy_data |= M88E1000_EPSCR_TX_CLK_25;
628 
629 		if ((phy->revision == E1000_REVISION_2) &&
630 		    (phy->id == M88E1111_I_PHY_ID)) {
631 			/* 82573L PHY - set the downshift counter to 5x. */
632 			phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
633 			phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
634 		} else {
635 			/* Configure Master and Slave downshift values */
636 			phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
637 			             M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
638 			phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
639 			             M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
640 		}
641 		ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
642 		                             phy_data);
643 		if (ret_val)
644 			goto out;
645 	}
646 
647 	if ((phy->type == e1000_phy_bm) && (phy->id == BME1000_E_PHY_ID_R2)) {
648 		/* Set PHY page 0, register 29 to 0x0003 */
649 		ret_val = phy->ops.write_reg(hw, 29, 0x0003);
650 		if (ret_val)
651 			goto out;
652 
653 		/* Set PHY page 0, register 30 to 0x0000 */
654 		ret_val = phy->ops.write_reg(hw, 30, 0x0000);
655 		if (ret_val)
656 			goto out;
657 	}
658 
659 	/* Commit the changes. */
660 	ret_val = phy->ops.commit(hw);
661 	if (ret_val) {
662 		DEBUGOUT("Error committing the PHY changes\n");
663 		goto out;
664 	}
665 
666 out:
667 	return ret_val;
668 }
669 
670 /**
671  *  e1000_copper_link_setup_igp - Setup igp PHY's for copper link
672  *  @hw: pointer to the HW structure
673  *
674  *  Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
675  *  igp PHY's.
676  **/
677 s32 e1000_copper_link_setup_igp(struct e1000_hw *hw)
678 {
679 	struct e1000_phy_info *phy = &hw->phy;
680 	s32 ret_val;
681 	u16 data;
682 
683 	DEBUGFUNC("e1000_copper_link_setup_igp");
684 
685 	if (phy->reset_disable) {
686 		ret_val = E1000_SUCCESS;
687 		goto out;
688 	}
689 
690 	ret_val = hw->phy.ops.reset(hw);
691 	if (ret_val) {
692 		DEBUGOUT("Error resetting the PHY.\n");
693 		goto out;
694 	}
695 
696 	/*
697 	 * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
698 	 * timeout issues when LFS is enabled.
699 	 */
700 	msec_delay(100);
701 
702 	/*
703 	 * The NVM settings will configure LPLU in D3 for
704 	 * non-IGP1 PHYs.
705 	 */
706 	if (phy->type == e1000_phy_igp) {
707 		/* disable lplu d3 during driver init */
708 		ret_val = hw->phy.ops.set_d3_lplu_state(hw, FALSE);
709 		if (ret_val) {
710 			DEBUGOUT("Error Disabling LPLU D3\n");
711 			goto out;
712 		}
713 	}
714 
715 	/* disable lplu d0 during driver init */
716 	if (hw->phy.ops.set_d0_lplu_state) {
717 		ret_val = hw->phy.ops.set_d0_lplu_state(hw, FALSE);
718 		if (ret_val) {
719 			DEBUGOUT("Error Disabling LPLU D0\n");
720 			goto out;
721 		}
722 	}
723 	/* Configure mdi-mdix settings */
724 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data);
725 	if (ret_val)
726 		goto out;
727 
728 	data &= ~IGP01E1000_PSCR_AUTO_MDIX;
729 
730 	switch (phy->mdix) {
731 	case 1:
732 		data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
733 		break;
734 	case 2:
735 		data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
736 		break;
737 	case 0:
738 	default:
739 		data |= IGP01E1000_PSCR_AUTO_MDIX;
740 		break;
741 	}
742 	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data);
743 	if (ret_val)
744 		goto out;
745 
746 	/* set auto-master slave resolution settings */
747 	if (hw->mac.autoneg) {
748 		/*
749 		 * when autonegotiation advertisement is only 1000Mbps then we
750 		 * should disable SmartSpeed and enable Auto MasterSlave
751 		 * resolution as hardware default.
752 		 */
753 		if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
754 			/* Disable SmartSpeed */
755 			ret_val = phy->ops.read_reg(hw,
756 			                             IGP01E1000_PHY_PORT_CONFIG,
757 			                             &data);
758 			if (ret_val)
759 				goto out;
760 
761 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
762 			ret_val = phy->ops.write_reg(hw,
763 			                             IGP01E1000_PHY_PORT_CONFIG,
764 			                             data);
765 			if (ret_val)
766 				goto out;
767 
768 			/* Set auto Master/Slave resolution process */
769 			ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
770 			if (ret_val)
771 				goto out;
772 
773 			data &= ~CR_1000T_MS_ENABLE;
774 			ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
775 			if (ret_val)
776 				goto out;
777 		}
778 
779 		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
780 		if (ret_val)
781 			goto out;
782 
783 		/* load defaults for future use */
784 		phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
785 			((data & CR_1000T_MS_VALUE) ?
786 			e1000_ms_force_master :
787 			e1000_ms_force_slave) :
788 			e1000_ms_auto;
789 
790 		switch (phy->ms_type) {
791 		case e1000_ms_force_master:
792 			data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
793 			break;
794 		case e1000_ms_force_slave:
795 			data |= CR_1000T_MS_ENABLE;
796 			data &= ~(CR_1000T_MS_VALUE);
797 			break;
798 		case e1000_ms_auto:
799 			data &= ~CR_1000T_MS_ENABLE;
800 		default:
801 			break;
802 		}
803 		ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
804 		if (ret_val)
805 			goto out;
806 	}
807 
808 out:
809 	return ret_val;
810 }
811 
812 /**
813  *  e1000_copper_link_autoneg - Setup/Enable autoneg for copper link
814  *  @hw: pointer to the HW structure
815  *
816  *  Performs initial bounds checking on autoneg advertisement parameter, then
817  *  configure to advertise the full capability.  Setup the PHY to autoneg
818  *  and restart the negotiation process between the link partner.  If
819  *  autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
820  **/
821 s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
822 {
823 	struct e1000_phy_info *phy = &hw->phy;
824 	s32 ret_val;
825 	u16 phy_ctrl;
826 
827 	DEBUGFUNC("e1000_copper_link_autoneg");
828 
829 	/*
830 	 * Perform some bounds checking on the autoneg advertisement
831 	 * parameter.
832 	 */
833 	phy->autoneg_advertised &= phy->autoneg_mask;
834 
835 	/*
836 	 * If autoneg_advertised is zero, we assume it was not defaulted
837 	 * by the calling code so we set to advertise full capability.
838 	 */
839 	if (phy->autoneg_advertised == 0)
840 		phy->autoneg_advertised = phy->autoneg_mask;
841 
842 	DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
843 	ret_val = e1000_phy_setup_autoneg(hw);
844 	if (ret_val) {
845 		DEBUGOUT("Error Setting up Auto-Negotiation\n");
846 		goto out;
847 	}
848 	DEBUGOUT("Restarting Auto-Neg\n");
849 
850 	/*
851 	 * Restart auto-negotiation by setting the Auto Neg Enable bit and
852 	 * the Auto Neg Restart bit in the PHY control register.
853 	 */
854 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
855 	if (ret_val)
856 		goto out;
857 
858 	phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
859 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
860 	if (ret_val)
861 		goto out;
862 
863 	/*
864 	 * Does the user want to wait for Auto-Neg to complete here, or
865 	 * check at a later time (for example, callback routine).
866 	 */
867 	if (phy->autoneg_wait_to_complete) {
868 		ret_val = hw->mac.ops.wait_autoneg(hw);
869 		if (ret_val) {
870 			DEBUGOUT("Error while waiting for "
871 			         "autoneg to complete\n");
872 			goto out;
873 		}
874 	}
875 
876 	hw->mac.get_link_status = TRUE;
877 
878 out:
879 	return ret_val;
880 }
881 
882 /**
883  *  e1000_phy_setup_autoneg - Configure PHY for auto-negotiation
884  *  @hw: pointer to the HW structure
885  *
886  *  Reads the MII auto-neg advertisement register and/or the 1000T control
887  *  register and if the PHY is already setup for auto-negotiation, then
888  *  return successful.  Otherwise, setup advertisement and flow control to
889  *  the appropriate values for the wanted auto-negotiation.
890  **/
891 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
892 {
893 	struct e1000_phy_info *phy = &hw->phy;
894 	s32 ret_val;
895 	u16 mii_autoneg_adv_reg;
896 	u16 mii_1000t_ctrl_reg = 0;
897 
898 	DEBUGFUNC("e1000_phy_setup_autoneg");
899 
900 	phy->autoneg_advertised &= phy->autoneg_mask;
901 
902 	/* Read the MII Auto-Neg Advertisement Register (Address 4). */
903 	ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
904 	if (ret_val)
905 		goto out;
906 
907 	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
908 		/* Read the MII 1000Base-T Control Register (Address 9). */
909 		ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL,
910 		                            &mii_1000t_ctrl_reg);
911 		if (ret_val)
912 			goto out;
913 	}
914 
915 	/*
916 	 * Need to parse both autoneg_advertised and fc and set up
917 	 * the appropriate PHY registers.  First we will parse for
918 	 * autoneg_advertised software override.  Since we can advertise
919 	 * a plethora of combinations, we need to check each bit
920 	 * individually.
921 	 */
922 
923 	/*
924 	 * First we clear all the 10/100 mb speed bits in the Auto-Neg
925 	 * Advertisement Register (Address 4) and the 1000 mb speed bits in
926 	 * the  1000Base-T Control Register (Address 9).
927 	 */
928 	mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
929 	                         NWAY_AR_100TX_HD_CAPS |
930 	                         NWAY_AR_10T_FD_CAPS   |
931 	                         NWAY_AR_10T_HD_CAPS);
932 	mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
933 
934 	DEBUGOUT1("autoneg_advertised %x\n", phy->autoneg_advertised);
935 
936 	/* Do we want to advertise 10 Mb Half Duplex? */
937 	if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
938 		DEBUGOUT("Advertise 10mb Half duplex\n");
939 		mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
940 	}
941 
942 	/* Do we want to advertise 10 Mb Full Duplex? */
943 	if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
944 		DEBUGOUT("Advertise 10mb Full duplex\n");
945 		mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
946 	}
947 
948 	/* Do we want to advertise 100 Mb Half Duplex? */
949 	if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
950 		DEBUGOUT("Advertise 100mb Half duplex\n");
951 		mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
952 	}
953 
954 	/* Do we want to advertise 100 Mb Full Duplex? */
955 	if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
956 		DEBUGOUT("Advertise 100mb Full duplex\n");
957 		mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
958 	}
959 
960 	/* We do not allow the Phy to advertise 1000 Mb Half Duplex */
961 	if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
962 		DEBUGOUT("Advertise 1000mb Half duplex request denied!\n");
963 
964 	/* Do we want to advertise 1000 Mb Full Duplex? */
965 	if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
966 		DEBUGOUT("Advertise 1000mb Full duplex\n");
967 		mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
968 	}
969 
970 	/*
971 	 * Check for a software override of the flow control settings, and
972 	 * setup the PHY advertisement registers accordingly.  If
973 	 * auto-negotiation is enabled, then software will have to set the
974 	 * "PAUSE" bits to the correct value in the Auto-Negotiation
975 	 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
976 	 * negotiation.
977 	 *
978 	 * The possible values of the "fc" parameter are:
979 	 *      0:  Flow control is completely disabled
980 	 *      1:  Rx flow control is enabled (we can receive pause frames
981 	 *          but not send pause frames).
982 	 *      2:  Tx flow control is enabled (we can send pause frames
983 	 *          but we do not support receiving pause frames).
984 	 *      3:  Both Rx and Tx flow control (symmetric) are enabled.
985 	 *  other:  No software override.  The flow control configuration
986 	 *          in the EEPROM is used.
987 	 */
988 	switch (hw->fc.current_mode) {
989 	case e1000_fc_none:
990 		/*
991 		 * Flow control (Rx & Tx) is completely disabled by a
992 		 * software over-ride.
993 		 */
994 		mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
995 		break;
996 	case e1000_fc_rx_pause:
997 		/*
998 		 * Rx Flow control is enabled, and Tx Flow control is
999 		 * disabled, by a software over-ride.
1000 		 *
1001 		 * Since there really isn't a way to advertise that we are
1002 		 * capable of Rx Pause ONLY, we will advertise that we
1003 		 * support both symmetric and asymmetric Rx PAUSE.  Later
1004 		 * (in e1000_config_fc_after_link_up) we will disable the
1005 		 * hw's ability to send PAUSE frames.
1006 		 */
1007 		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1008 		break;
1009 	case e1000_fc_tx_pause:
1010 		/*
1011 		 * Tx Flow control is enabled, and Rx Flow control is
1012 		 * disabled, by a software over-ride.
1013 		 */
1014 		mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
1015 		mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
1016 		break;
1017 	case e1000_fc_full:
1018 		/*
1019 		 * Flow control (both Rx and Tx) is enabled by a software
1020 		 * over-ride.
1021 		 */
1022 		mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1023 		break;
1024 	default:
1025 		DEBUGOUT("Flow control param set incorrectly\n");
1026 		ret_val = -E1000_ERR_CONFIG;
1027 		goto out;
1028 	}
1029 
1030 	ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
1031 	if (ret_val)
1032 		goto out;
1033 
1034 	DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
1035 
1036 	if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
1037 		ret_val = phy->ops.write_reg(hw,
1038 		                              PHY_1000T_CTRL,
1039 		                              mii_1000t_ctrl_reg);
1040 		if (ret_val)
1041 			goto out;
1042 	}
1043 
1044 out:
1045 	return ret_val;
1046 }
1047 
1048 /**
1049  *  e1000_setup_copper_link_generic - Configure copper link settings
1050  *  @hw: pointer to the HW structure
1051  *
1052  *  Calls the appropriate function to configure the link for auto-neg or forced
1053  *  speed and duplex.  Then we check for link, once link is established calls
1054  *  to configure collision distance and flow control are called.  If link is
1055  *  not established, we return -E1000_ERR_PHY (-2).
1056  **/
1057 s32 e1000_setup_copper_link_generic(struct e1000_hw *hw)
1058 {
1059 	s32 ret_val;
1060 	bool link;
1061 
1062 	DEBUGFUNC("e1000_setup_copper_link_generic");
1063 
1064 	if (hw->mac.autoneg) {
1065 		/*
1066 		 * Setup autoneg and flow control advertisement and perform
1067 		 * autonegotiation.
1068 		 */
1069 		ret_val = e1000_copper_link_autoneg(hw);
1070 		if (ret_val)
1071 			goto out;
1072 	} else {
1073 		/*
1074 		 * PHY will be set to 10H, 10F, 100H or 100F
1075 		 * depending on user settings.
1076 		 */
1077 		DEBUGOUT("Forcing Speed and Duplex\n");
1078 		ret_val = hw->phy.ops.force_speed_duplex(hw);
1079 		if (ret_val) {
1080 			DEBUGOUT("Error Forcing Speed and Duplex\n");
1081 			goto out;
1082 		}
1083 	}
1084 
1085 	/*
1086 	 * Check link status. Wait up to 100 microseconds for link to become
1087 	 * valid.
1088 	 */
1089 	ret_val = e1000_phy_has_link_generic(hw,
1090 	                                     COPPER_LINK_UP_LIMIT,
1091 	                                     10,
1092 	                                     &link);
1093 	if (ret_val)
1094 		goto out;
1095 
1096 	if (link) {
1097 		DEBUGOUT("Valid link established!!!\n");
1098 		e1000_config_collision_dist_generic(hw);
1099 		ret_val = e1000_config_fc_after_link_up_generic(hw);
1100 	} else {
1101 		DEBUGOUT("Unable to establish link!!!\n");
1102 	}
1103 
1104 out:
1105 	return ret_val;
1106 }
1107 
1108 /**
1109  *  e1000_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
1110  *  @hw: pointer to the HW structure
1111  *
1112  *  Calls the PHY setup function to force speed and duplex.  Clears the
1113  *  auto-crossover to force MDI manually.  Waits for link and returns
1114  *  successful if link up is successful, else -E1000_ERR_PHY (-2).
1115  **/
1116 s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw)
1117 {
1118 	struct e1000_phy_info *phy = &hw->phy;
1119 	s32 ret_val;
1120 	u16 phy_data;
1121 	bool link;
1122 
1123 	DEBUGFUNC("e1000_phy_force_speed_duplex_igp");
1124 
1125 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1126 	if (ret_val)
1127 		goto out;
1128 
1129 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
1130 
1131 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1132 	if (ret_val)
1133 		goto out;
1134 
1135 	/*
1136 	 * Clear Auto-Crossover to force MDI manually.  IGP requires MDI
1137 	 * forced whenever speed and duplex are forced.
1138 	 */
1139 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1140 	if (ret_val)
1141 		goto out;
1142 
1143 	phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1144 	phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1145 
1146 	ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1147 	if (ret_val)
1148 		goto out;
1149 
1150 	DEBUGOUT1("IGP PSCR: %X\n", phy_data);
1151 
1152 	usec_delay(1);
1153 
1154 	if (phy->autoneg_wait_to_complete) {
1155 		DEBUGOUT("Waiting for forced speed/duplex link on IGP phy.\n");
1156 
1157 		ret_val = e1000_phy_has_link_generic(hw,
1158 		                                     PHY_FORCE_LIMIT,
1159 		                                     100000,
1160 		                                     &link);
1161 		if (ret_val)
1162 			goto out;
1163 
1164 		if (!link)
1165 			DEBUGOUT("Link taking longer than expected.\n");
1166 
1167 		/* Try once more */
1168 		ret_val = e1000_phy_has_link_generic(hw,
1169 		                                     PHY_FORCE_LIMIT,
1170 		                                     100000,
1171 		                                     &link);
1172 		if (ret_val)
1173 			goto out;
1174 	}
1175 
1176 out:
1177 	return ret_val;
1178 }
1179 
1180 /**
1181  *  e1000_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
1182  *  @hw: pointer to the HW structure
1183  *
1184  *  Calls the PHY setup function to force speed and duplex.  Clears the
1185  *  auto-crossover to force MDI manually.  Resets the PHY to commit the
1186  *  changes.  If time expires while waiting for link up, we reset the DSP.
1187  *  After reset, TX_CLK and CRS on Tx must be set.  Return successful upon
1188  *  successful completion, else return corresponding error code.
1189  **/
1190 s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
1191 {
1192 	struct e1000_phy_info *phy = &hw->phy;
1193 	s32 ret_val;
1194 	u16 phy_data;
1195 	bool link;
1196 
1197 	DEBUGFUNC("e1000_phy_force_speed_duplex_m88");
1198 
1199 	/*
1200 	 * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
1201 	 * forced whenever speed and duplex are forced.
1202 	 */
1203 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1204 	if (ret_val)
1205 		goto out;
1206 
1207 	phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1208 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1209 	if (ret_val)
1210 		goto out;
1211 
1212 	DEBUGOUT1("M88E1000 PSCR: %X\n", phy_data);
1213 
1214 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1215 	if (ret_val)
1216 		goto out;
1217 
1218 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
1219 
1220 	ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1221 	if (ret_val)
1222 		goto out;
1223 
1224 	/* Reset the phy to commit changes. */
1225 	ret_val = hw->phy.ops.commit(hw);
1226 	if (ret_val)
1227 		goto out;
1228 
1229 	if (phy->autoneg_wait_to_complete) {
1230 		DEBUGOUT("Waiting for forced speed/duplex link on M88 phy.\n");
1231 
1232 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1233 		                                     100000, &link);
1234 		if (ret_val)
1235 			goto out;
1236 
1237 		if (!link) {
1238 			/*
1239 			 * We didn't get link.
1240 			 * Reset the DSP and cross our fingers.
1241 			 */
1242 			ret_val = phy->ops.write_reg(hw,
1243 			                              M88E1000_PHY_PAGE_SELECT,
1244 			                              0x001d);
1245 			if (ret_val)
1246 				goto out;
1247 			ret_val = e1000_phy_reset_dsp_generic(hw);
1248 			if (ret_val)
1249 				goto out;
1250 		}
1251 
1252 		/* Try once more */
1253 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1254 		                                     100000, &link);
1255 		if (ret_val)
1256 			goto out;
1257 	}
1258 
1259 	ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1260 	if (ret_val)
1261 		goto out;
1262 
1263 	/*
1264 	 * Resetting the phy means we need to re-force TX_CLK in the
1265 	 * Extended PHY Specific Control Register to 25MHz clock from
1266 	 * the reset value of 2.5MHz.
1267 	 */
1268 	phy_data |= M88E1000_EPSCR_TX_CLK_25;
1269 	ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1270 	if (ret_val)
1271 		goto out;
1272 
1273 	/*
1274 	 * In addition, we must re-enable CRS on Tx for both half and full
1275 	 * duplex.
1276 	 */
1277 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1278 	if (ret_val)
1279 		goto out;
1280 
1281 	phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1282 	ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1283 
1284 out:
1285 	return ret_val;
1286 }
1287 
1288 /**
1289  *  e1000_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
1290  *  @hw: pointer to the HW structure
1291  *  @phy_ctrl: pointer to current value of PHY_CONTROL
1292  *
1293  *  Forces speed and duplex on the PHY by doing the following: disable flow
1294  *  control, force speed/duplex on the MAC, disable auto speed detection,
1295  *  disable auto-negotiation, configure duplex, configure speed, configure
1296  *  the collision distance, write configuration to CTRL register.  The
1297  *  caller must write to the PHY_CONTROL register for these settings to
1298  *  take affect.
1299  **/
1300 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl)
1301 {
1302 	struct e1000_mac_info *mac = &hw->mac;
1303 	u32 ctrl;
1304 
1305 	DEBUGFUNC("e1000_phy_force_speed_duplex_setup");
1306 
1307 	/* Turn off flow control when forcing speed/duplex */
1308 	hw->fc.current_mode = e1000_fc_none;
1309 
1310 	/* Force speed/duplex on the mac */
1311 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1312 	ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1313 	ctrl &= ~E1000_CTRL_SPD_SEL;
1314 
1315 	/* Disable Auto Speed Detection */
1316 	ctrl &= ~E1000_CTRL_ASDE;
1317 
1318 	/* Disable autoneg on the phy */
1319 	*phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
1320 
1321 	/* Forcing Full or Half Duplex? */
1322 	if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
1323 		ctrl &= ~E1000_CTRL_FD;
1324 		*phy_ctrl &= ~MII_CR_FULL_DUPLEX;
1325 		DEBUGOUT("Half Duplex\n");
1326 	} else {
1327 		ctrl |= E1000_CTRL_FD;
1328 		*phy_ctrl |= MII_CR_FULL_DUPLEX;
1329 		DEBUGOUT("Full Duplex\n");
1330 	}
1331 
1332 	/* Forcing 10mb or 100mb? */
1333 	if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
1334 		ctrl |= E1000_CTRL_SPD_100;
1335 		*phy_ctrl |= MII_CR_SPEED_100;
1336 		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
1337 		DEBUGOUT("Forcing 100mb\n");
1338 	} else {
1339 		ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1340 		*phy_ctrl |= MII_CR_SPEED_10;
1341 		*phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
1342 		DEBUGOUT("Forcing 10mb\n");
1343 	}
1344 
1345 	e1000_config_collision_dist_generic(hw);
1346 
1347 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1348 }
1349 
1350 /**
1351  *  e1000_set_d3_lplu_state_generic - Sets low power link up state for D3
1352  *  @hw: pointer to the HW structure
1353  *  @active: boolean used to enable/disable lplu
1354  *
1355  *  Success returns 0, Failure returns 1
1356  *
1357  *  The low power link up (lplu) state is set to the power management level D3
1358  *  and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
1359  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
1360  *  is used during Dx states where the power conservation is most important.
1361  *  During driver activity, SmartSpeed should be enabled so performance is
1362  *  maintained.
1363  **/
1364 s32 e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active)
1365 {
1366 	struct e1000_phy_info *phy = &hw->phy;
1367 	s32 ret_val = E1000_SUCCESS;
1368 	u16 data;
1369 
1370 	DEBUGFUNC("e1000_set_d3_lplu_state_generic");
1371 
1372 	if (!(hw->phy.ops.read_reg))
1373 		goto out;
1374 
1375 	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1376 	if (ret_val)
1377 		goto out;
1378 
1379 	if (!active) {
1380 		data &= ~IGP02E1000_PM_D3_LPLU;
1381 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1382 		                             data);
1383 		if (ret_val)
1384 			goto out;
1385 		/*
1386 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
1387 		 * during Dx states where the power conservation is most
1388 		 * important.  During driver activity we should enable
1389 		 * SmartSpeed, so performance is maintained.
1390 		 */
1391 		if (phy->smart_speed == e1000_smart_speed_on) {
1392 			ret_val = phy->ops.read_reg(hw,
1393 			                            IGP01E1000_PHY_PORT_CONFIG,
1394 			                            &data);
1395 			if (ret_val)
1396 				goto out;
1397 
1398 			data |= IGP01E1000_PSCFR_SMART_SPEED;
1399 			ret_val = phy->ops.write_reg(hw,
1400 			                             IGP01E1000_PHY_PORT_CONFIG,
1401 			                             data);
1402 			if (ret_val)
1403 				goto out;
1404 		} else if (phy->smart_speed == e1000_smart_speed_off) {
1405 			ret_val = phy->ops.read_reg(hw,
1406 			                             IGP01E1000_PHY_PORT_CONFIG,
1407 			                             &data);
1408 			if (ret_val)
1409 				goto out;
1410 
1411 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1412 			ret_val = phy->ops.write_reg(hw,
1413 			                             IGP01E1000_PHY_PORT_CONFIG,
1414 			                             data);
1415 			if (ret_val)
1416 				goto out;
1417 		}
1418 	} else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1419 	           (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1420 	           (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1421 		data |= IGP02E1000_PM_D3_LPLU;
1422 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1423 		                              data);
1424 		if (ret_val)
1425 			goto out;
1426 
1427 		/* When LPLU is enabled, we should disable SmartSpeed */
1428 		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1429 		                             &data);
1430 		if (ret_val)
1431 			goto out;
1432 
1433 		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1434 		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1435 		                              data);
1436 	}
1437 
1438 out:
1439 	return ret_val;
1440 }
1441 
1442 /**
1443  *  e1000_check_downshift_generic - Checks whether a downshift in speed occurred
1444  *  @hw: pointer to the HW structure
1445  *
1446  *  Success returns 0, Failure returns 1
1447  *
1448  *  A downshift is detected by querying the PHY link health.
1449  **/
1450 s32 e1000_check_downshift_generic(struct e1000_hw *hw)
1451 {
1452 	struct e1000_phy_info *phy = &hw->phy;
1453 	s32 ret_val;
1454 	u16 phy_data, offset, mask;
1455 
1456 	DEBUGFUNC("e1000_check_downshift_generic");
1457 
1458 	switch (phy->type) {
1459 	case e1000_phy_m88:
1460 	case e1000_phy_gg82563:
1461 	case e1000_phy_bm:
1462 		offset	= M88E1000_PHY_SPEC_STATUS;
1463 		mask	= M88E1000_PSSR_DOWNSHIFT;
1464 		break;
1465 	case e1000_phy_igp_2:
1466 	case e1000_phy_igp:
1467 	case e1000_phy_igp_3:
1468 		offset	= IGP01E1000_PHY_LINK_HEALTH;
1469 		mask	= IGP01E1000_PLHR_SS_DOWNGRADE;
1470 		break;
1471 	default:
1472 		/* speed downshift not supported */
1473 		phy->speed_downgraded = FALSE;
1474 		ret_val = E1000_SUCCESS;
1475 		goto out;
1476 	}
1477 
1478 	ret_val = phy->ops.read_reg(hw, offset, &phy_data);
1479 
1480 	if (!ret_val)
1481 		phy->speed_downgraded = (phy_data & mask) ? TRUE : FALSE;
1482 
1483 out:
1484 	return ret_val;
1485 }
1486 
1487 /**
1488  *  e1000_check_polarity_m88 - Checks the polarity.
1489  *  @hw: pointer to the HW structure
1490  *
1491  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1492  *
1493  *  Polarity is determined based on the PHY specific status register.
1494  **/
1495 s32 e1000_check_polarity_m88(struct e1000_hw *hw)
1496 {
1497 	struct e1000_phy_info *phy = &hw->phy;
1498 	s32 ret_val;
1499 	u16 data;
1500 
1501 	DEBUGFUNC("e1000_check_polarity_m88");
1502 
1503 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data);
1504 
1505 	if (!ret_val)
1506 		phy->cable_polarity = (data & M88E1000_PSSR_REV_POLARITY)
1507 		                      ? e1000_rev_polarity_reversed
1508 		                      : e1000_rev_polarity_normal;
1509 
1510 	return ret_val;
1511 }
1512 
1513 /**
1514  *  e1000_check_polarity_igp - Checks the polarity.
1515  *  @hw: pointer to the HW structure
1516  *
1517  *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1518  *
1519  *  Polarity is determined based on the PHY port status register, and the
1520  *  current speed (since there is no polarity at 100Mbps).
1521  **/
1522 s32 e1000_check_polarity_igp(struct e1000_hw *hw)
1523 {
1524 	struct e1000_phy_info *phy = &hw->phy;
1525 	s32 ret_val;
1526 	u16 data, offset, mask;
1527 
1528 	DEBUGFUNC("e1000_check_polarity_igp");
1529 
1530 	/*
1531 	 * Polarity is determined based on the speed of
1532 	 * our connection.
1533 	 */
1534 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
1535 	if (ret_val)
1536 		goto out;
1537 
1538 	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
1539 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
1540 		offset	= IGP01E1000_PHY_PCS_INIT_REG;
1541 		mask	= IGP01E1000_PHY_POLARITY_MASK;
1542 	} else {
1543 		/*
1544 		 * This really only applies to 10Mbps since
1545 		 * there is no polarity for 100Mbps (always 0).
1546 		 */
1547 		offset	= IGP01E1000_PHY_PORT_STATUS;
1548 		mask	= IGP01E1000_PSSR_POLARITY_REVERSED;
1549 	}
1550 
1551 	ret_val = phy->ops.read_reg(hw, offset, &data);
1552 
1553 	if (!ret_val)
1554 		phy->cable_polarity = (data & mask)
1555 		                      ? e1000_rev_polarity_reversed
1556 		                      : e1000_rev_polarity_normal;
1557 
1558 out:
1559 	return ret_val;
1560 }
1561 
1562 /**
1563  *  e1000_wait_autoneg_generic - Wait for auto-neg completion
1564  *  @hw: pointer to the HW structure
1565  *
1566  *  Waits for auto-negotiation to complete or for the auto-negotiation time
1567  *  limit to expire, which ever happens first.
1568  **/
1569 s32 e1000_wait_autoneg_generic(struct e1000_hw *hw)
1570 {
1571 	s32 ret_val = E1000_SUCCESS;
1572 	u16 i, phy_status;
1573 
1574 	DEBUGFUNC("e1000_wait_autoneg_generic");
1575 
1576 	if (!(hw->phy.ops.read_reg))
1577 		return E1000_SUCCESS;
1578 
1579 	/* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
1580 	for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
1581 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1582 		if (ret_val)
1583 			break;
1584 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1585 		if (ret_val)
1586 			break;
1587 		if (phy_status & MII_SR_AUTONEG_COMPLETE)
1588 			break;
1589 		msec_delay(100);
1590 	}
1591 
1592 	/*
1593 	 * PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
1594 	 * has completed.
1595 	 */
1596 	return ret_val;
1597 }
1598 
1599 /**
1600  *  e1000_phy_has_link_generic - Polls PHY for link
1601  *  @hw: pointer to the HW structure
1602  *  @iterations: number of times to poll for link
1603  *  @usec_interval: delay between polling attempts
1604  *  @success: pointer to whether polling was successful or not
1605  *
1606  *  Polls the PHY status register for link, 'iterations' number of times.
1607  **/
1608 s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
1609                                u32 usec_interval, bool *success)
1610 {
1611 	s32 ret_val = E1000_SUCCESS;
1612 	u16 i, phy_status;
1613 
1614 	DEBUGFUNC("e1000_phy_has_link_generic");
1615 
1616 	if (!(hw->phy.ops.read_reg))
1617 		return E1000_SUCCESS;
1618 
1619 	for (i = 0; i < iterations; i++) {
1620 		/*
1621 		 * Some PHYs require the PHY_STATUS register to be read
1622 		 * twice due to the link bit being sticky.  No harm doing
1623 		 * it across the board.
1624 		 */
1625 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1626 		if (ret_val)
1627 			break;
1628 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1629 		if (ret_val)
1630 			break;
1631 		if (phy_status & MII_SR_LINK_STATUS)
1632 			break;
1633 		if (usec_interval >= 1000)
1634 			msec_delay_irq(usec_interval/1000);
1635 		else
1636 			usec_delay(usec_interval);
1637 	}
1638 
1639 	*success = (i < iterations) ? TRUE : FALSE;
1640 
1641 	return ret_val;
1642 }
1643 
1644 /**
1645  *  e1000_get_cable_length_m88 - Determine cable length for m88 PHY
1646  *  @hw: pointer to the HW structure
1647  *
1648  *  Reads the PHY specific status register to retrieve the cable length
1649  *  information.  The cable length is determined by averaging the minimum and
1650  *  maximum values to get the "average" cable length.  The m88 PHY has four
1651  *  possible cable length values, which are:
1652  *	Register Value		Cable Length
1653  *	0			< 50 meters
1654  *	1			50 - 80 meters
1655  *	2			80 - 110 meters
1656  *	3			110 - 140 meters
1657  *	4			> 140 meters
1658  **/
1659 s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
1660 {
1661 	struct e1000_phy_info *phy = &hw->phy;
1662 	s32 ret_val;
1663 	u16 phy_data, index;
1664 
1665 	DEBUGFUNC("e1000_get_cable_length_m88");
1666 
1667 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1668 	if (ret_val)
1669 		goto out;
1670 
1671 	index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
1672 	        M88E1000_PSSR_CABLE_LENGTH_SHIFT;
1673 	if (index < M88E1000_CABLE_LENGTH_TABLE_SIZE + 1) {
1674 		phy->min_cable_length = e1000_m88_cable_length_table[index];
1675 		phy->max_cable_length = e1000_m88_cable_length_table[index+1];
1676 
1677 		phy->cable_length = (phy->min_cable_length +
1678 		                     phy->max_cable_length) / 2;
1679 	} else {
1680 		ret_val = E1000_ERR_PHY;
1681 	}
1682 
1683 out:
1684 	return ret_val;
1685 }
1686 
1687 /**
1688  *  e1000_get_cable_length_igp_2 - Determine cable length for igp2 PHY
1689  *  @hw: pointer to the HW structure
1690  *
1691  *  The automatic gain control (agc) normalizes the amplitude of the
1692  *  received signal, adjusting for the attenuation produced by the
1693  *  cable.  By reading the AGC registers, which represent the
1694  *  combination of coarse and fine gain value, the value can be put
1695  *  into a lookup table to obtain the approximate cable length
1696  *  for each channel.
1697  **/
1698 s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
1699 {
1700 	struct e1000_phy_info *phy = &hw->phy;
1701 	s32 ret_val = E1000_SUCCESS;
1702 	u16 phy_data, i, agc_value = 0;
1703 	u16 cur_agc_index, max_agc_index = 0;
1704 	u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
1705 	u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] =
1706 	                                                 {IGP02E1000_PHY_AGC_A,
1707 	                                                  IGP02E1000_PHY_AGC_B,
1708 	                                                  IGP02E1000_PHY_AGC_C,
1709 	                                                  IGP02E1000_PHY_AGC_D};
1710 
1711 	DEBUGFUNC("e1000_get_cable_length_igp_2");
1712 
1713 	/* Read the AGC registers for all channels */
1714 	for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
1715 		ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data);
1716 		if (ret_val)
1717 			goto out;
1718 
1719 		/*
1720 		 * Getting bits 15:9, which represent the combination of
1721 		 * coarse and fine gain values.  The result is a number
1722 		 * that can be put into the lookup table to obtain the
1723 		 * approximate cable length.
1724 		 */
1725 		cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
1726 		                IGP02E1000_AGC_LENGTH_MASK;
1727 
1728 		/* Array index bound check. */
1729 		if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) ||
1730 		    (cur_agc_index == 0)) {
1731 			ret_val = -E1000_ERR_PHY;
1732 			goto out;
1733 		}
1734 
1735 		/* Remove min & max AGC values from calculation. */
1736 		if (e1000_igp_2_cable_length_table[min_agc_index] >
1737 		    e1000_igp_2_cable_length_table[cur_agc_index])
1738 			min_agc_index = cur_agc_index;
1739 		if (e1000_igp_2_cable_length_table[max_agc_index] <
1740 		    e1000_igp_2_cable_length_table[cur_agc_index])
1741 			max_agc_index = cur_agc_index;
1742 
1743 		agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
1744 	}
1745 
1746 	agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
1747 	              e1000_igp_2_cable_length_table[max_agc_index]);
1748 	agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
1749 
1750 	/* Calculate cable length with the error range of +/- 10 meters. */
1751 	phy->min_cable_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
1752 	                         (agc_value - IGP02E1000_AGC_RANGE) : 0;
1753 	phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
1754 
1755 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
1756 
1757 out:
1758 	return ret_val;
1759 }
1760 
1761 /**
1762  *  e1000_get_phy_info_m88 - Retrieve PHY information
1763  *  @hw: pointer to the HW structure
1764  *
1765  *  Valid for only copper links.  Read the PHY status register (sticky read)
1766  *  to verify that link is up.  Read the PHY special control register to
1767  *  determine the polarity and 10base-T extended distance.  Read the PHY
1768  *  special status register to determine MDI/MDIx and current speed.  If
1769  *  speed is 1000, then determine cable length, local and remote receiver.
1770  **/
1771 s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
1772 {
1773 	struct e1000_phy_info *phy = &hw->phy;
1774 	s32  ret_val;
1775 	u16 phy_data;
1776 	bool link;
1777 
1778 	DEBUGFUNC("e1000_get_phy_info_m88");
1779 
1780 	if (hw->phy.media_type != e1000_media_type_copper) {
1781 		DEBUGOUT("Phy info is only valid for copper media\n");
1782 		ret_val = -E1000_ERR_CONFIG;
1783 		goto out;
1784 	}
1785 
1786 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
1787 	if (ret_val)
1788 		goto out;
1789 
1790 	if (!link) {
1791 		DEBUGOUT("Phy info is only valid if link is up\n");
1792 		ret_val = -E1000_ERR_CONFIG;
1793 		goto out;
1794 	}
1795 
1796 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1797 	if (ret_val)
1798 		goto out;
1799 
1800 	phy->polarity_correction = (phy_data & M88E1000_PSCR_POLARITY_REVERSAL)
1801 	                           ? TRUE : FALSE;
1802 
1803 	ret_val = e1000_check_polarity_m88(hw);
1804 	if (ret_val)
1805 		goto out;
1806 
1807 	ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1808 	if (ret_val)
1809 		goto out;
1810 
1811 	phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX) ? TRUE : FALSE;
1812 
1813 	if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
1814 		ret_val = hw->phy.ops.get_cable_length(hw);
1815 		if (ret_val)
1816 			goto out;
1817 
1818 		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
1819 		if (ret_val)
1820 			goto out;
1821 
1822 		phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
1823 		                ? e1000_1000t_rx_status_ok
1824 		                : e1000_1000t_rx_status_not_ok;
1825 
1826 		phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
1827 		                 ? e1000_1000t_rx_status_ok
1828 		                 : e1000_1000t_rx_status_not_ok;
1829 	} else {
1830 		/* Set values to "undefined" */
1831 		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
1832 		phy->local_rx = e1000_1000t_rx_status_undefined;
1833 		phy->remote_rx = e1000_1000t_rx_status_undefined;
1834 	}
1835 
1836 out:
1837 	return ret_val;
1838 }
1839 
1840 /**
1841  *  e1000_get_phy_info_igp - Retrieve igp PHY information
1842  *  @hw: pointer to the HW structure
1843  *
1844  *  Read PHY status to determine if link is up.  If link is up, then
1845  *  set/determine 10base-T extended distance and polarity correction.  Read
1846  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
1847  *  determine on the cable length, local and remote receiver.
1848  **/
1849 s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
1850 {
1851 	struct e1000_phy_info *phy = &hw->phy;
1852 	s32 ret_val;
1853 	u16 data;
1854 	bool link;
1855 
1856 	DEBUGFUNC("e1000_get_phy_info_igp");
1857 
1858 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
1859 	if (ret_val)
1860 		goto out;
1861 
1862 	if (!link) {
1863 		DEBUGOUT("Phy info is only valid if link is up\n");
1864 		ret_val = -E1000_ERR_CONFIG;
1865 		goto out;
1866 	}
1867 
1868 	phy->polarity_correction = TRUE;
1869 
1870 	ret_val = e1000_check_polarity_igp(hw);
1871 	if (ret_val)
1872 		goto out;
1873 
1874 	ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
1875 	if (ret_val)
1876 		goto out;
1877 
1878 	phy->is_mdix = (data & IGP01E1000_PSSR_MDIX) ? TRUE : FALSE;
1879 
1880 	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
1881 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
1882 		ret_val = hw->phy.ops.get_cable_length(hw);
1883 		if (ret_val)
1884 			goto out;
1885 
1886 		ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
1887 		if (ret_val)
1888 			goto out;
1889 
1890 		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
1891 		                ? e1000_1000t_rx_status_ok
1892 		                : e1000_1000t_rx_status_not_ok;
1893 
1894 		phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
1895 		                 ? e1000_1000t_rx_status_ok
1896 		                 : e1000_1000t_rx_status_not_ok;
1897 	} else {
1898 		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
1899 		phy->local_rx = e1000_1000t_rx_status_undefined;
1900 		phy->remote_rx = e1000_1000t_rx_status_undefined;
1901 	}
1902 
1903 out:
1904 	return ret_val;
1905 }
1906 
1907 /**
1908  *  e1000_phy_sw_reset_generic - PHY software reset
1909  *  @hw: pointer to the HW structure
1910  *
1911  *  Does a software reset of the PHY by reading the PHY control register and
1912  *  setting/write the control register reset bit to the PHY.
1913  **/
1914 s32 e1000_phy_sw_reset_generic(struct e1000_hw *hw)
1915 {
1916 	s32 ret_val = E1000_SUCCESS;
1917 	u16 phy_ctrl;
1918 
1919 	DEBUGFUNC("e1000_phy_sw_reset_generic");
1920 
1921 	if (!(hw->phy.ops.read_reg))
1922 		goto out;
1923 
1924 	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
1925 	if (ret_val)
1926 		goto out;
1927 
1928 	phy_ctrl |= MII_CR_RESET;
1929 	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
1930 	if (ret_val)
1931 		goto out;
1932 
1933 	usec_delay(1);
1934 
1935 out:
1936 	return ret_val;
1937 }
1938 
1939 /**
1940  *  e1000_phy_hw_reset_generic - PHY hardware reset
1941  *  @hw: pointer to the HW structure
1942  *
1943  *  Verify the reset block is not blocking us from resetting.  Acquire
1944  *  semaphore (if necessary) and read/set/write the device control reset
1945  *  bit in the PHY.  Wait the appropriate delay time for the device to
1946  *  reset and release the semaphore (if necessary).
1947  **/
1948 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
1949 {
1950 	struct e1000_phy_info *phy = &hw->phy;
1951 	s32 ret_val = E1000_SUCCESS;
1952 	u32 ctrl;
1953 
1954 	DEBUGFUNC("e1000_phy_hw_reset_generic");
1955 
1956 	ret_val = phy->ops.check_reset_block(hw);
1957 	if (ret_val) {
1958 		ret_val = E1000_SUCCESS;
1959 		goto out;
1960 	}
1961 
1962 	ret_val = phy->ops.acquire(hw);
1963 	if (ret_val)
1964 		goto out;
1965 
1966 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1967 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PHY_RST);
1968 	E1000_WRITE_FLUSH(hw);
1969 
1970 	usec_delay(phy->reset_delay_us);
1971 
1972 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1973 	E1000_WRITE_FLUSH(hw);
1974 
1975 	usec_delay(150);
1976 
1977 	phy->ops.release(hw);
1978 
1979 	ret_val = phy->ops.get_cfg_done(hw);
1980 
1981 out:
1982 	return ret_val;
1983 }
1984 
1985 /**
1986  *  e1000_get_cfg_done_generic - Generic configuration done
1987  *  @hw: pointer to the HW structure
1988  *
1989  *  Generic function to wait 10 milli-seconds for configuration to complete
1990  *  and return success.
1991  **/
1992 s32 e1000_get_cfg_done_generic(struct e1000_hw *hw)
1993 {
1994 	DEBUGFUNC("e1000_get_cfg_done_generic");
1995 
1996 	msec_delay_irq(10);
1997 
1998 	return E1000_SUCCESS;
1999 }
2000 
2001 /**
2002  *  e1000_phy_init_script_igp3 - Inits the IGP3 PHY
2003  *  @hw: pointer to the HW structure
2004  *
2005  *  Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
2006  **/
2007 s32 e1000_phy_init_script_igp3(struct e1000_hw *hw)
2008 {
2009 	DEBUGOUT("Running IGP 3 PHY init script\n");
2010 
2011 	/* PHY init IGP 3 */
2012 	/* Enable rise/fall, 10-mode work in class-A */
2013 	hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018);
2014 	/* Remove all caps from Replica path filter */
2015 	hw->phy.ops.write_reg(hw, 0x2F52, 0x0000);
2016 	/* Bias trimming for ADC, AFE and Driver (Default) */
2017 	hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24);
2018 	/* Increase Hybrid poly bias */
2019 	hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0);
2020 	/* Add 4% to Tx amplitude in Gig mode */
2021 	hw->phy.ops.write_reg(hw, 0x2010, 0x10B0);
2022 	/* Disable trimming (TTT) */
2023 	hw->phy.ops.write_reg(hw, 0x2011, 0x0000);
2024 	/* Poly DC correction to 94.6% + 2% for all channels */
2025 	hw->phy.ops.write_reg(hw, 0x20DD, 0x249A);
2026 	/* ABS DC correction to 95.9% */
2027 	hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3);
2028 	/* BG temp curve trim */
2029 	hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE);
2030 	/* Increasing ADC OPAMP stage 1 currents to max */
2031 	hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4);
2032 	/* Force 1000 ( required for enabling PHY regs configuration) */
2033 	hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
2034 	/* Set upd_freq to 6 */
2035 	hw->phy.ops.write_reg(hw, 0x1F30, 0x1606);
2036 	/* Disable NPDFE */
2037 	hw->phy.ops.write_reg(hw, 0x1F31, 0xB814);
2038 	/* Disable adaptive fixed FFE (Default) */
2039 	hw->phy.ops.write_reg(hw, 0x1F35, 0x002A);
2040 	/* Enable FFE hysteresis */
2041 	hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067);
2042 	/* Fixed FFE for short cable lengths */
2043 	hw->phy.ops.write_reg(hw, 0x1F54, 0x0065);
2044 	/* Fixed FFE for medium cable lengths */
2045 	hw->phy.ops.write_reg(hw, 0x1F55, 0x002A);
2046 	/* Fixed FFE for long cable lengths */
2047 	hw->phy.ops.write_reg(hw, 0x1F56, 0x002A);
2048 	/* Enable Adaptive Clip Threshold */
2049 	hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0);
2050 	/* AHT reset limit to 1 */
2051 	hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF);
2052 	/* Set AHT master delay to 127 msec */
2053 	hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC);
2054 	/* Set scan bits for AHT */
2055 	hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF);
2056 	/* Set AHT Preset bits */
2057 	hw->phy.ops.write_reg(hw, 0x1F79, 0x0210);
2058 	/* Change integ_factor of channel A to 3 */
2059 	hw->phy.ops.write_reg(hw, 0x1895, 0x0003);
2060 	/* Change prop_factor of channels BCD to 8 */
2061 	hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
2062 	/* Change cg_icount + enable integbp for channels BCD */
2063 	hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
2064 	/*
2065 	 * Change cg_icount + enable integbp + change prop_factor_master
2066 	 * to 8 for channel A
2067 	 */
2068 	hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
2069 	/* Disable AHT in Slave mode on channel A */
2070 	hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
2071 	/*
2072 	 * Enable LPLU and disable AN to 1000 in non-D0a states,
2073 	 * Enable SPD+B2B
2074 	 */
2075 	hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
2076 	/* Enable restart AN on an1000_dis change */
2077 	hw->phy.ops.write_reg(hw, 0x001B, 0x2080);
2078 	/* Enable wh_fifo read clock in 10/100 modes */
2079 	hw->phy.ops.write_reg(hw, 0x0014, 0x0045);
2080 	/* Restart AN, Speed selection is 1000 */
2081 	hw->phy.ops.write_reg(hw, 0x0000, 0x1340);
2082 
2083 	return E1000_SUCCESS;
2084 }
2085 
2086 /**
2087  *  e1000_get_phy_type_from_id - Get PHY type from id
2088  *  @phy_id: phy_id read from the phy
2089  *
2090  *  Returns the phy type from the id.
2091  **/
2092 enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
2093 {
2094 	enum e1000_phy_type phy_type = e1000_phy_unknown;
2095 
2096 	switch (phy_id)	{
2097 	case M88E1000_I_PHY_ID:
2098 	case M88E1000_E_PHY_ID:
2099 	case M88E1111_I_PHY_ID:
2100 	case M88E1011_I_PHY_ID:
2101 		phy_type = e1000_phy_m88;
2102 		break;
2103 	case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */
2104 		phy_type = e1000_phy_igp_2;
2105 		break;
2106 	case GG82563_E_PHY_ID:
2107 		phy_type = e1000_phy_gg82563;
2108 		break;
2109 	case IGP03E1000_E_PHY_ID:
2110 		phy_type = e1000_phy_igp_3;
2111 		break;
2112 	case IFE_E_PHY_ID:
2113 	case IFE_PLUS_E_PHY_ID:
2114 	case IFE_C_E_PHY_ID:
2115 		phy_type = e1000_phy_ife;
2116 		break;
2117 	case BME1000_E_PHY_ID:
2118 	case BME1000_E_PHY_ID_R2:
2119 		phy_type = e1000_phy_bm;
2120 		break;
2121 	default:
2122 		phy_type = e1000_phy_unknown;
2123 		break;
2124 	}
2125 	return phy_type;
2126 }
2127 
2128 /**
2129  *  e1000_determine_phy_address - Determines PHY address.
2130  *  @hw: pointer to the HW structure
2131  *
2132  *  This uses a trial and error method to loop through possible PHY
2133  *  addresses. It tests each by reading the PHY ID registers and
2134  *  checking for a match.
2135  **/
2136 s32 e1000_determine_phy_address(struct e1000_hw *hw)
2137 {
2138 	s32 ret_val = -E1000_ERR_PHY_TYPE;
2139 	u32 phy_addr = 0;
2140 	u32 i;
2141 	enum e1000_phy_type phy_type = e1000_phy_unknown;
2142 
2143 	for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) {
2144 		hw->phy.addr = phy_addr;
2145 		i = 0;
2146 
2147 		do {
2148 			e1000_get_phy_id(hw);
2149 			phy_type = e1000_get_phy_type_from_id(hw->phy.id);
2150 
2151 			/*
2152 			 * If phy_type is valid, break - we found our
2153 			 * PHY address
2154 			 */
2155 			if (phy_type  != e1000_phy_unknown) {
2156 				ret_val = E1000_SUCCESS;
2157 				goto out;
2158 			}
2159 			msec_delay(1);
2160 			i++;
2161 		} while (i < 10);
2162 	}
2163 
2164 out:
2165 	return ret_val;
2166 }
2167 
2168 /**
2169  *  e1000_get_phy_addr_for_bm_page - Retrieve PHY page address
2170  *  @page: page to access
2171  *
2172  *  Returns the phy address for the page requested.
2173  **/
2174 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg)
2175 {
2176 	u32 phy_addr = 2;
2177 
2178 	if ((page >= 768) || (page == 0 && reg == 25) || (reg == 31))
2179 		phy_addr = 1;
2180 
2181 	return phy_addr;
2182 }
2183 
2184 /**
2185  *  e1000_write_phy_reg_bm - Write BM PHY register
2186  *  @hw: pointer to the HW structure
2187  *  @offset: register offset to write to
2188  *  @data: data to write at register offset
2189  *
2190  *  Acquires semaphore, if necessary, then writes the data to PHY register
2191  *  at the offset.  Release any acquired semaphores before exiting.
2192  **/
2193 s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
2194 {
2195 	s32 ret_val;
2196 	u32 page_select = 0;
2197 	u32 page = offset >> IGP_PAGE_SHIFT;
2198 	u32 page_shift = 0;
2199 
2200 	DEBUGFUNC("e1000_write_phy_reg_bm");
2201 
2202 	/* Page 800 works differently than the rest so it has its own func */
2203 	if (page == BM_WUC_PAGE) {
2204 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
2205 		                                         FALSE);
2206 		goto out;
2207 	}
2208 
2209 	ret_val = hw->phy.ops.acquire(hw);
2210 	if (ret_val)
2211 		goto out;
2212 
2213 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2214 
2215 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2216 		/*
2217 		 * Page select is register 31 for phy address 1 and 22 for
2218 		 * phy address 2 and 3. Page select is shifted only for
2219 		 * phy address 1.
2220 		 */
2221 		if (hw->phy.addr == 1) {
2222 			page_shift = IGP_PAGE_SHIFT;
2223 			page_select = IGP01E1000_PHY_PAGE_SELECT;
2224 		} else {
2225 			page_shift = 0;
2226 			page_select = BM_PHY_PAGE_SELECT;
2227 		}
2228 
2229 		/* Page is shifted left, PHY expects (page x 32) */
2230 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
2231 		                                   (page << page_shift));
2232 		if (ret_val) {
2233 			hw->phy.ops.release(hw);
2234 			goto out;
2235 		}
2236 	}
2237 
2238 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2239 	                                   data);
2240 
2241 	hw->phy.ops.release(hw);
2242 
2243 out:
2244 	return ret_val;
2245 }
2246 
2247 /**
2248  *  e1000_read_phy_reg_bm - Read BM PHY register
2249  *  @hw: pointer to the HW structure
2250  *  @offset: register offset to be read
2251  *  @data: pointer to the read data
2252  *
2253  *  Acquires semaphore, if necessary, then reads the PHY register at offset
2254  *  and storing the retrieved information in data.  Release any acquired
2255  *  semaphores before exiting.
2256  **/
2257 s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
2258 {
2259 	s32 ret_val;
2260 	u32 page_select = 0;
2261 	u32 page = offset >> IGP_PAGE_SHIFT;
2262 	u32 page_shift = 0;
2263 
2264 	DEBUGFUNC("e1000_read_phy_reg_bm");
2265 
2266 	/* Page 800 works differently than the rest so it has its own func */
2267 	if (page == BM_WUC_PAGE) {
2268 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
2269 		                                         TRUE);
2270 		goto out;
2271 	}
2272 
2273 	ret_val = hw->phy.ops.acquire(hw);
2274 	if (ret_val)
2275 		goto out;
2276 
2277 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2278 
2279 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2280 		/*
2281 		 * Page select is register 31 for phy address 1 and 22 for
2282 		 * phy address 2 and 3. Page select is shifted only for
2283 		 * phy address 1.
2284 		 */
2285 		if (hw->phy.addr == 1) {
2286 			page_shift = IGP_PAGE_SHIFT;
2287 			page_select = IGP01E1000_PHY_PAGE_SELECT;
2288 		} else {
2289 			page_shift = 0;
2290 			page_select = BM_PHY_PAGE_SELECT;
2291 		}
2292 
2293 		/* Page is shifted left, PHY expects (page x 32) */
2294 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
2295 		                                   (page << page_shift));
2296 		if (ret_val) {
2297 			hw->phy.ops.release(hw);
2298 			goto out;
2299 		}
2300 	}
2301 
2302 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2303 	                                  data);
2304 	hw->phy.ops.release(hw);
2305 
2306 out:
2307 	return ret_val;
2308 }
2309 
2310 /**
2311  *  e1000_read_phy_reg_bm2 - Read BM PHY register
2312  *  @hw: pointer to the HW structure
2313  *  @offset: register offset to be read
2314  *  @data: pointer to the read data
2315  *
2316  *  Acquires semaphore, if necessary, then reads the PHY register at offset
2317  *  and storing the retrieved information in data.  Release any acquired
2318  *  semaphores before exiting.
2319  **/
2320 s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
2321 {
2322 	s32 ret_val;
2323 	u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
2324 
2325 	DEBUGFUNC("e1000_write_phy_reg_bm2");
2326 
2327 	/* Page 800 works differently than the rest so it has its own func */
2328 	if (page == BM_WUC_PAGE) {
2329 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
2330 		                                         TRUE);
2331 		goto out;
2332 	}
2333 
2334 	ret_val = hw->phy.ops.acquire(hw);
2335 	if (ret_val)
2336 		goto out;
2337 
2338 	hw->phy.addr = 1;
2339 
2340 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2341 
2342 		/* Page is shifted left, PHY expects (page x 32) */
2343 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
2344 		                                   page);
2345 
2346 		if (ret_val) {
2347 			hw->phy.ops.release(hw);
2348 			goto out;
2349 		}
2350 	}
2351 
2352 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2353 	                                  data);
2354 	hw->phy.ops.release(hw);
2355 
2356 out:
2357 	return ret_val;
2358 }
2359 
2360 /**
2361  *  e1000_write_phy_reg_bm2 - Write BM PHY register
2362  *  @hw: pointer to the HW structure
2363  *  @offset: register offset to write to
2364  *  @data: data to write at register offset
2365  *
2366  *  Acquires semaphore, if necessary, then writes the data to PHY register
2367  *  at the offset.  Release any acquired semaphores before exiting.
2368  **/
2369 s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
2370 {
2371 	s32 ret_val;
2372 	u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
2373 
2374 	DEBUGFUNC("e1000_write_phy_reg_bm2");
2375 
2376 	/* Page 800 works differently than the rest so it has its own func */
2377 	if (page == BM_WUC_PAGE) {
2378 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
2379 		                                         FALSE);
2380 		goto out;
2381 	}
2382 
2383 	ret_val = hw->phy.ops.acquire(hw);
2384 	if (ret_val)
2385 		goto out;
2386 
2387 	hw->phy.addr = 1;
2388 
2389 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
2390 		/* Page is shifted left, PHY expects (page x 32) */
2391 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
2392 		                                   page);
2393 
2394 		if (ret_val) {
2395 			hw->phy.ops.release(hw);
2396 			goto out;
2397 		}
2398 	}
2399 
2400 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2401 	                                   data);
2402 
2403 	hw->phy.ops.release(hw);
2404 
2405 out:
2406 	return ret_val;
2407 }
2408 
2409 /**
2410  *  e1000_access_phy_wakeup_reg_bm - Read BM PHY wakeup register
2411  *  @hw: pointer to the HW structure
2412  *  @offset: register offset to be read or written
2413  *  @data: pointer to the data to read or write
2414  *  @read: determines if operation is read or write
2415  *
2416  *  Acquires semaphore, if necessary, then reads the PHY register at offset
2417  *  and storing the retrieved information in data.  Release any acquired
2418  *  semaphores before exiting. Note that procedure to read the wakeup
2419  *  registers are different. It works as such:
2420  *  1) Set page 769, register 17, bit 2 = 1
2421  *  2) Set page to 800 for host (801 if we were manageability)
2422  *  3) Write the address using the address opcode (0x11)
2423  *  4) Read or write the data using the data opcode (0x12)
2424  *  5) Restore 769_17.2 to its original value
2425  **/
2426 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
2427                                           u16 *data, bool read)
2428 {
2429 	s32 ret_val;
2430 	u16 reg = ((u16)offset);
2431 	u16 phy_reg = 0;
2432 	u8  phy_acquired = 1;
2433 
2434 	DEBUGFUNC("e1000_read_phy_wakeup_reg_bm");
2435 
2436 	ret_val = hw->phy.ops.acquire(hw);
2437 	if (ret_val) {
2438 		DEBUGOUT("Could not acquire PHY\n");
2439 		phy_acquired = 0;
2440 		goto out;
2441 	}
2442 
2443 	/* All operations in this function are phy address 1 */
2444 	hw->phy.addr = 1;
2445 
2446 	/* Set page 769 */
2447 	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
2448 	                         (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
2449 
2450 	ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &phy_reg);
2451 	if (ret_val) {
2452 		DEBUGOUT("Could not read PHY page 769\n");
2453 		goto out;
2454 	}
2455 
2456 	/* First clear bit 4 to avoid a power state change */
2457 	phy_reg &= ~(BM_WUC_HOST_WU_BIT);
2458 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
2459 	if (ret_val) {
2460 		DEBUGOUT("Could not clear PHY page 769 bit 4\n");
2461 		goto out;
2462 	}
2463 
2464 	/* Write bit 2 = 1, and clear bit 4 to 769_17 */
2465 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG,
2466 	                                   phy_reg | BM_WUC_ENABLE_BIT);
2467 	if (ret_val) {
2468 		DEBUGOUT("Could not write PHY page 769 bit 2\n");
2469 		goto out;
2470 	}
2471 
2472 	/* Select page 800 */
2473 	ret_val = e1000_write_phy_reg_mdic(hw,
2474 	                                   IGP01E1000_PHY_PAGE_SELECT,
2475 	                                   (BM_WUC_PAGE << IGP_PAGE_SHIFT));
2476 
2477 	/* Write the page 800 offset value using opcode 0x11 */
2478 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg);
2479 	if (ret_val) {
2480 		DEBUGOUT("Could not write address opcode to page 800\n");
2481 		goto out;
2482 	}
2483 
2484 	if (read) {
2485 	        /* Read the page 800 value using opcode 0x12 */
2486 		ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
2487 							data);
2488 	} else {
2489 	        /* Read the page 800 value using opcode 0x12 */
2490 		ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
2491 							*data);
2492 	}
2493 
2494 	if (ret_val) {
2495 		DEBUGOUT("Could not read data value from page 800\n");
2496 		goto out;
2497 	}
2498 
2499 	/*
2500 	 * Restore 769_17.2 to its original value
2501 	 * Set page 769
2502 	 */
2503 	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
2504 	                         (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
2505 
2506 	/* Clear 769_17.2 */
2507 	ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
2508 	if (ret_val) {
2509 		DEBUGOUT("Could not clear PHY page 769 bit 2\n");
2510 		goto out;
2511 	}
2512 
2513 out:
2514 	if (phy_acquired == 1)
2515 		hw->phy.ops.release(hw);
2516 	return ret_val;
2517 }
2518 
2519 /**
2520  * e1000_power_up_phy_copper - Restore copper link in case of PHY power down
2521  * @hw: pointer to the HW structure
2522  *
2523  * In the case of a PHY power down to save power, or to turn off link during a
2524  * driver unload, or wake on lan is not enabled, restore the link to previous
2525  * settings.
2526  **/
2527 void e1000_power_up_phy_copper(struct e1000_hw *hw)
2528 {
2529 	u16 mii_reg = 0;
2530 
2531 	/* The PHY will retain its settings across a power down/up cycle */
2532 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
2533 	mii_reg &= ~MII_CR_POWER_DOWN;
2534 	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
2535 }
2536 
2537 /**
2538  * e1000_power_down_phy_copper - Restore copper link in case of PHY power down
2539  * @hw: pointer to the HW structure
2540  *
2541  * In the case of a PHY power down to save power, or to turn off link during a
2542  * driver unload, or wake on lan is not enabled, restore the link to previous
2543  * settings.
2544  **/
2545 void e1000_power_down_phy_copper(struct e1000_hw *hw)
2546 {
2547 	u16 mii_reg = 0;
2548 
2549 	/* The PHY will retain its settings across a power down/up cycle */
2550 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
2551 	mii_reg |= MII_CR_POWER_DOWN;
2552 	hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
2553 	msec_delay(1);
2554 }
2555