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