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