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