]> CyberLeo.Net >> Repos - FreeBSD/stable/8.git/blob - sys/dev/ixgbe/ixgbe_phy.c
MFC r362623:
[FreeBSD/stable/8.git] / sys / dev / ixgbe / ixgbe_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 "ixgbe_api.h"
36 #include "ixgbe_common.h"
37 #include "ixgbe_phy.h"
38
39 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
40 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
42 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
43 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
44 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
45 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
46 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
48 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
49 static bool ixgbe_get_i2c_data(u32 *i2cctl);
50
51 /**
52  *  ixgbe_init_phy_ops_generic - Inits PHY function ptrs
53  *  @hw: pointer to the hardware structure
54  *
55  *  Initialize the function pointers.
56  **/
57 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
58 {
59         struct ixgbe_phy_info *phy = &hw->phy;
60
61         DEBUGFUNC("ixgbe_init_phy_ops_generic");
62
63         /* PHY */
64         phy->ops.identify = &ixgbe_identify_phy_generic;
65         phy->ops.reset = &ixgbe_reset_phy_generic;
66         phy->ops.read_reg = &ixgbe_read_phy_reg_generic;
67         phy->ops.write_reg = &ixgbe_write_phy_reg_generic;
68         phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
69         phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
70         phy->ops.check_link = NULL;
71         phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
72         phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
73         phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
74         phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
75         phy->ops.write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic;
76         phy->ops.i2c_bus_clear = &ixgbe_i2c_bus_clear;
77         phy->ops.identify_sfp = &ixgbe_identify_module_generic;
78         phy->sfp_type = ixgbe_sfp_type_unknown;
79         phy->ops.check_overtemp = &ixgbe_tn_check_overtemp;
80         return IXGBE_SUCCESS;
81 }
82
83 /**
84  *  ixgbe_identify_phy_generic - Get physical layer module
85  *  @hw: pointer to hardware structure
86  *
87  *  Determines the physical layer module found on the current adapter.
88  **/
89 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
90 {
91         s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
92         u32 phy_addr;
93         u16 ext_ability = 0;
94
95         DEBUGFUNC("ixgbe_identify_phy_generic");
96
97         if (hw->phy.type == ixgbe_phy_unknown) {
98                 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
99                         if (ixgbe_validate_phy_addr(hw, phy_addr)) {
100                                 hw->phy.addr = phy_addr;
101                                 ixgbe_get_phy_id(hw);
102                                 hw->phy.type =
103                                         ixgbe_get_phy_type_from_id(hw->phy.id);
104
105                                 if (hw->phy.type == ixgbe_phy_unknown) {
106                                         hw->phy.ops.read_reg(hw,
107                                                   IXGBE_MDIO_PHY_EXT_ABILITY,
108                                                   IXGBE_MDIO_PMA_PMD_DEV_TYPE,
109                                                   &ext_ability);
110                                         if (ext_ability &
111                                             (IXGBE_MDIO_PHY_10GBASET_ABILITY |
112                                              IXGBE_MDIO_PHY_1000BASET_ABILITY))
113                                                 hw->phy.type =
114                                                          ixgbe_phy_cu_unknown;
115                                         else
116                                                 hw->phy.type =
117                                                          ixgbe_phy_generic;
118                                 }
119
120                                 status = IXGBE_SUCCESS;
121                                 break;
122                         }
123                 }
124                 /* clear value if nothing found */
125                 if (status != IXGBE_SUCCESS)
126                         hw->phy.addr = 0;
127         } else {
128                 status = IXGBE_SUCCESS;
129         }
130
131         return status;
132 }
133
134 /**
135  *  ixgbe_validate_phy_addr - Determines phy address is valid
136  *  @hw: pointer to hardware structure
137  *
138  **/
139 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
140 {
141         u16 phy_id = 0;
142         bool valid = FALSE;
143
144         DEBUGFUNC("ixgbe_validate_phy_addr");
145
146         hw->phy.addr = phy_addr;
147         hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
148                              IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
149
150         if (phy_id != 0xFFFF && phy_id != 0x0)
151                 valid = TRUE;
152
153         return valid;
154 }
155
156 /**
157  *  ixgbe_get_phy_id - Get the phy type
158  *  @hw: pointer to hardware structure
159  *
160  **/
161 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
162 {
163         u32 status;
164         u16 phy_id_high = 0;
165         u16 phy_id_low = 0;
166
167         DEBUGFUNC("ixgbe_get_phy_id");
168
169         status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
170                                       IXGBE_MDIO_PMA_PMD_DEV_TYPE,
171                                       &phy_id_high);
172
173         if (status == IXGBE_SUCCESS) {
174                 hw->phy.id = (u32)(phy_id_high << 16);
175                 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW,
176                                               IXGBE_MDIO_PMA_PMD_DEV_TYPE,
177                                               &phy_id_low);
178                 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
179                 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
180         }
181         return status;
182 }
183
184 /**
185  *  ixgbe_get_phy_type_from_id - Get the phy type
186  *  @hw: pointer to hardware structure
187  *
188  **/
189 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
190 {
191         enum ixgbe_phy_type phy_type;
192
193         DEBUGFUNC("ixgbe_get_phy_type_from_id");
194
195         switch (phy_id) {
196         case TN1010_PHY_ID:
197                 phy_type = ixgbe_phy_tn;
198                 break;
199         case X540_PHY_ID:
200                 phy_type = ixgbe_phy_aq;
201                 break;
202         case QT2022_PHY_ID:
203                 phy_type = ixgbe_phy_qt;
204                 break;
205         case ATH_PHY_ID:
206                 phy_type = ixgbe_phy_nl;
207                 break;
208         default:
209                 phy_type = ixgbe_phy_unknown;
210                 break;
211         }
212
213         DEBUGOUT1("phy type found is %d\n", phy_type);
214         return phy_type;
215 }
216
217 /**
218  *  ixgbe_reset_phy_generic - Performs a PHY reset
219  *  @hw: pointer to hardware structure
220  **/
221 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
222 {
223         u32 i;
224         u16 ctrl = 0;
225         s32 status = IXGBE_SUCCESS;
226
227         DEBUGFUNC("ixgbe_reset_phy_generic");
228
229         if (hw->phy.type == ixgbe_phy_unknown)
230                 status = ixgbe_identify_phy_generic(hw);
231
232         if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none)
233                 goto out;
234
235         /* Don't reset PHY if it's shut down due to overtemp. */
236         if (!hw->phy.reset_if_overtemp &&
237             (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
238                 goto out;
239
240         /*
241          * Perform soft PHY reset to the PHY_XS.
242          * This will cause a soft reset to the PHY
243          */
244         hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
245                               IXGBE_MDIO_PHY_XS_DEV_TYPE,
246                               IXGBE_MDIO_PHY_XS_RESET);
247
248         /*
249          * Poll for reset bit to self-clear indicating reset is complete.
250          * Some PHYs could take up to 3 seconds to complete and need about
251          * 1.7 usec delay after the reset is complete.
252          */
253         for (i = 0; i < 30; i++) {
254                 msec_delay(100);
255                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
256                                      IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl);
257                 if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) {
258                         usec_delay(2);
259                         break;
260                 }
261         }
262
263         if (ctrl & IXGBE_MDIO_PHY_XS_RESET) {
264                 status = IXGBE_ERR_RESET_FAILED;
265                 DEBUGOUT("PHY reset polling failed to complete.\n");
266         }
267
268 out:
269         return status;
270 }
271
272 /**
273  *  ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
274  *  @hw: pointer to hardware structure
275  *  @reg_addr: 32 bit address of PHY register to read
276  *  @phy_data: Pointer to read data from PHY register
277  **/
278 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
279                                u32 device_type, u16 *phy_data)
280 {
281         u32 command;
282         u32 i;
283         u32 data;
284         s32 status = IXGBE_SUCCESS;
285         u16 gssr;
286
287         DEBUGFUNC("ixgbe_read_phy_reg_generic");
288
289         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
290                 gssr = IXGBE_GSSR_PHY1_SM;
291         else
292                 gssr = IXGBE_GSSR_PHY0_SM;
293
294         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
295                 status = IXGBE_ERR_SWFW_SYNC;
296
297         if (status == IXGBE_SUCCESS) {
298                 /* Setup and write the address cycle command */
299                 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
300                            (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
301                            (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
302                            (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
303
304                 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
305
306                 /*
307                  * Check every 10 usec to see if the address cycle completed.
308                  * The MDI Command bit will clear when the operation is
309                  * complete
310                  */
311                 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
312                         usec_delay(10);
313
314                         command = IXGBE_READ_REG(hw, IXGBE_MSCA);
315
316                         if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
317                                 break;
318                 }
319
320                 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
321                         DEBUGOUT("PHY address command did not complete.\n");
322                         status = IXGBE_ERR_PHY;
323                 }
324
325                 if (status == IXGBE_SUCCESS) {
326                         /*
327                          * Address cycle complete, setup and write the read
328                          * command
329                          */
330                         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
331                                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
332                                    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
333                                    (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
334
335                         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
336
337                         /*
338                          * Check every 10 usec to see if the address cycle
339                          * completed. The MDI Command bit will clear when the
340                          * operation is complete
341                          */
342                         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
343                                 usec_delay(10);
344
345                                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
346
347                                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
348                                         break;
349                         }
350
351                         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
352                                 DEBUGOUT("PHY read command didn't complete\n");
353                                 status = IXGBE_ERR_PHY;
354                         } else {
355                                 /*
356                                  * Read operation is complete.  Get the data
357                                  * from MSRWD
358                                  */
359                                 data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
360                                 data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
361                                 *phy_data = (u16)(data);
362                         }
363                 }
364
365                 hw->mac.ops.release_swfw_sync(hw, gssr);
366         }
367
368         return status;
369 }
370
371 /**
372  *  ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
373  *  @hw: pointer to hardware structure
374  *  @reg_addr: 32 bit PHY register to write
375  *  @device_type: 5 bit device type
376  *  @phy_data: Data to write to the PHY register
377  **/
378 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
379                                 u32 device_type, u16 phy_data)
380 {
381         u32 command;
382         u32 i;
383         s32 status = IXGBE_SUCCESS;
384         u16 gssr;
385
386         DEBUGFUNC("ixgbe_write_phy_reg_generic");
387
388         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
389                 gssr = IXGBE_GSSR_PHY1_SM;
390         else
391                 gssr = IXGBE_GSSR_PHY0_SM;
392
393         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
394                 status = IXGBE_ERR_SWFW_SYNC;
395
396         if (status == IXGBE_SUCCESS) {
397                 /* Put the data in the MDI single read and write data register*/
398                 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
399
400                 /* Setup and write the address cycle command */
401                 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
402                            (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
403                            (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
404                            (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
405
406                 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
407
408                 /*
409                  * Check every 10 usec to see if the address cycle completed.
410                  * The MDI Command bit will clear when the operation is
411                  * complete
412                  */
413                 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
414                         usec_delay(10);
415
416                         command = IXGBE_READ_REG(hw, IXGBE_MSCA);
417
418                         if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
419                                 break;
420                 }
421
422                 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
423                         DEBUGOUT("PHY address cmd didn't complete\n");
424                         status = IXGBE_ERR_PHY;
425                 }
426
427                 if (status == IXGBE_SUCCESS) {
428                         /*
429                          * Address cycle complete, setup and write the write
430                          * command
431                          */
432                         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
433                                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
434                                    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
435                                    (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
436
437                         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
438
439                         /*
440                          * Check every 10 usec to see if the address cycle
441                          * completed. The MDI Command bit will clear when the
442                          * operation is complete
443                          */
444                         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
445                                 usec_delay(10);
446
447                                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
448
449                                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
450                                         break;
451                         }
452
453                         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
454                                 DEBUGOUT("PHY address cmd didn't complete\n");
455                                 status = IXGBE_ERR_PHY;
456                         }
457                 }
458
459                 hw->mac.ops.release_swfw_sync(hw, gssr);
460         }
461
462         return status;
463 }
464
465 /**
466  *  ixgbe_setup_phy_link_generic - Set and restart autoneg
467  *  @hw: pointer to hardware structure
468  *
469  *  Restart autonegotiation and PHY and waits for completion.
470  **/
471 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
472 {
473         s32 status = IXGBE_SUCCESS;
474         u32 time_out;
475         u32 max_time_out = 10;
476         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
477         bool autoneg = FALSE;
478         ixgbe_link_speed speed;
479
480         DEBUGFUNC("ixgbe_setup_phy_link_generic");
481
482         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
483
484         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
485                 /* Set or unset auto-negotiation 10G advertisement */
486                 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
487                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
488                                      &autoneg_reg);
489
490                 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
491                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
492                         autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
493
494                 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
495                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
496                                       autoneg_reg);
497         }
498
499         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
500                 /* Set or unset auto-negotiation 1G advertisement */
501                 hw->phy.ops.read_reg(hw,
502                                      IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
503                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
504                                      &autoneg_reg);
505
506                 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
507                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
508                         autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
509
510                 hw->phy.ops.write_reg(hw,
511                                       IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
512                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
513                                       autoneg_reg);
514         }
515
516         if (speed & IXGBE_LINK_SPEED_100_FULL) {
517                 /* Set or unset auto-negotiation 100M advertisement */
518                 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
519                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
520                                      &autoneg_reg);
521
522                 autoneg_reg &= ~(IXGBE_MII_100BASE_T_ADVERTISE |
523                                  IXGBE_MII_100BASE_T_ADVERTISE_HALF);
524                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
525                         autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
526
527                 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
528                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
529                                       autoneg_reg);
530         }
531
532         /* Restart PHY autonegotiation and wait for completion */
533         hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
534                              IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
535
536         autoneg_reg |= IXGBE_MII_RESTART;
537
538         hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
539                               IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
540
541         /* Wait for autonegotiation to finish */
542         for (time_out = 0; time_out < max_time_out; time_out++) {
543                 usec_delay(10);
544                 /* Restart PHY autonegotiation and wait for completion */
545                 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
546                                               IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
547                                               &autoneg_reg);
548
549                 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
550                 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
551                         break;
552         }
553
554         if (time_out == max_time_out) {
555                 status = IXGBE_ERR_LINK_SETUP;
556                 DEBUGOUT("ixgbe_setup_phy_link_generic: time out");
557         }
558
559         return status;
560 }
561
562 /**
563  *  ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
564  *  @hw: pointer to hardware structure
565  *  @speed: new link speed
566  *  @autoneg: TRUE if autonegotiation enabled
567  **/
568 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
569                                        ixgbe_link_speed speed,
570                                        bool autoneg,
571                                        bool autoneg_wait_to_complete)
572 {
573         UNREFERENCED_2PARAMETER(autoneg, autoneg_wait_to_complete);
574
575         DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
576
577         /*
578          * Clear autoneg_advertised and set new values based on input link
579          * speed.
580          */
581         hw->phy.autoneg_advertised = 0;
582
583         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
584                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
585
586         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
587                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
588
589         if (speed & IXGBE_LINK_SPEED_100_FULL)
590                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
591
592         /* Setup link based on the new speed settings */
593         hw->phy.ops.setup_link(hw);
594
595         return IXGBE_SUCCESS;
596 }
597
598 /**
599  *  ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
600  *  @hw: pointer to hardware structure
601  *  @speed: pointer to link speed
602  *  @autoneg: boolean auto-negotiation value
603  *
604  *  Determines the link capabilities by reading the AUTOC register.
605  **/
606 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
607                                                ixgbe_link_speed *speed,
608                                                bool *autoneg)
609 {
610         s32 status = IXGBE_ERR_LINK_SETUP;
611         u16 speed_ability;
612
613         DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
614
615         *speed = 0;
616         *autoneg = TRUE;
617
618         status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY,
619                                       IXGBE_MDIO_PMA_PMD_DEV_TYPE,
620                                       &speed_ability);
621
622         if (status == IXGBE_SUCCESS) {
623                 if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G)
624                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
625                 if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G)
626                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
627                 if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M)
628                         *speed |= IXGBE_LINK_SPEED_100_FULL;
629         }
630
631         return status;
632 }
633
634 /**
635  *  ixgbe_check_phy_link_tnx - Determine link and speed status
636  *  @hw: pointer to hardware structure
637  *
638  *  Reads the VS1 register to determine if link is up and the current speed for
639  *  the PHY.
640  **/
641 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
642                              bool *link_up)
643 {
644         s32 status = IXGBE_SUCCESS;
645         u32 time_out;
646         u32 max_time_out = 10;
647         u16 phy_link = 0;
648         u16 phy_speed = 0;
649         u16 phy_data = 0;
650
651         DEBUGFUNC("ixgbe_check_phy_link_tnx");
652
653         /* Initialize speed and link to default case */
654         *link_up = FALSE;
655         *speed = IXGBE_LINK_SPEED_10GB_FULL;
656
657         /*
658          * Check current speed and link status of the PHY register.
659          * This is a vendor specific register and may have to
660          * be changed for other copper PHYs.
661          */
662         for (time_out = 0; time_out < max_time_out; time_out++) {
663                 usec_delay(10);
664                 status = hw->phy.ops.read_reg(hw,
665                                         IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS,
666                                         IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
667                                         &phy_data);
668                 phy_link = phy_data & IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
669                 phy_speed = phy_data &
670                                  IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
671                 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
672                         *link_up = TRUE;
673                         if (phy_speed ==
674                             IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
675                                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
676                         break;
677                 }
678         }
679
680         return status;
681 }
682
683 /**
684  *      ixgbe_setup_phy_link_tnx - Set and restart autoneg
685  *      @hw: pointer to hardware structure
686  *
687  *      Restart autonegotiation and PHY and waits for completion.
688  **/
689 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
690 {
691         s32 status = IXGBE_SUCCESS;
692         u32 time_out;
693         u32 max_time_out = 10;
694         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
695         bool autoneg = FALSE;
696         ixgbe_link_speed speed;
697
698         DEBUGFUNC("ixgbe_setup_phy_link_tnx");
699
700         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
701
702         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
703                 /* Set or unset auto-negotiation 10G advertisement */
704                 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
705                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
706                                      &autoneg_reg);
707
708                 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
709                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
710                         autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
711
712                 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
713                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
714                                       autoneg_reg);
715         }
716
717         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
718                 /* Set or unset auto-negotiation 1G advertisement */
719                 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
720                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
721                                      &autoneg_reg);
722
723                 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
724                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
725                         autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
726
727                 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
728                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
729                                       autoneg_reg);
730         }
731
732         if (speed & IXGBE_LINK_SPEED_100_FULL) {
733                 /* Set or unset auto-negotiation 100M advertisement */
734                 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
735                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
736                                      &autoneg_reg);
737
738                 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
739                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
740                         autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
741
742                 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
743                                       IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
744                                       autoneg_reg);
745         }
746
747         /* Restart PHY autonegotiation and wait for completion */
748         hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
749                              IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
750
751         autoneg_reg |= IXGBE_MII_RESTART;
752
753         hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
754                               IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
755
756         /* Wait for autonegotiation to finish */
757         for (time_out = 0; time_out < max_time_out; time_out++) {
758                 usec_delay(10);
759                 /* Restart PHY autonegotiation and wait for completion */
760                 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
761                                               IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
762                                               &autoneg_reg);
763
764                 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
765                 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
766                         break;
767         }
768
769         if (time_out == max_time_out) {
770                 status = IXGBE_ERR_LINK_SETUP;
771                 DEBUGOUT("ixgbe_setup_phy_link_tnx: time out");
772         }
773
774         return status;
775 }
776
777 /**
778  *  ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
779  *  @hw: pointer to hardware structure
780  *  @firmware_version: pointer to the PHY Firmware Version
781  **/
782 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
783                                        u16 *firmware_version)
784 {
785         s32 status = IXGBE_SUCCESS;
786
787         DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
788
789         status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
790                                       IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
791                                       firmware_version);
792
793         return status;
794 }
795
796 /**
797  *  ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
798  *  @hw: pointer to hardware structure
799  *  @firmware_version: pointer to the PHY Firmware Version
800  **/
801 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
802                                            u16 *firmware_version)
803 {
804         s32 status = IXGBE_SUCCESS;
805
806         DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
807
808         status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
809                                       IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
810                                       firmware_version);
811
812         return status;
813 }
814
815 /**
816  *  ixgbe_reset_phy_nl - Performs a PHY reset
817  *  @hw: pointer to hardware structure
818  **/
819 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
820 {
821         u16 phy_offset, control, eword, edata, block_crc;
822         bool end_data = FALSE;
823         u16 list_offset, data_offset;
824         u16 phy_data = 0;
825         s32 ret_val = IXGBE_SUCCESS;
826         u32 i;
827
828         DEBUGFUNC("ixgbe_reset_phy_nl");
829
830         hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
831                              IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
832
833         /* reset the PHY and poll for completion */
834         hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
835                               IXGBE_MDIO_PHY_XS_DEV_TYPE,
836                               (phy_data | IXGBE_MDIO_PHY_XS_RESET));
837
838         for (i = 0; i < 100; i++) {
839                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
840                                      IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
841                 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0)
842                         break;
843                 msec_delay(10);
844         }
845
846         if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) {
847                 DEBUGOUT("PHY reset did not complete.\n");
848                 ret_val = IXGBE_ERR_PHY;
849                 goto out;
850         }
851
852         /* Get init offsets */
853         ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
854                                                       &data_offset);
855         if (ret_val != IXGBE_SUCCESS)
856                 goto out;
857
858         ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
859         data_offset++;
860         while (!end_data) {
861                 /*
862                  * Read control word from PHY init contents offset
863                  */
864                 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
865                 control = (eword & IXGBE_CONTROL_MASK_NL) >>
866                            IXGBE_CONTROL_SHIFT_NL;
867                 edata = eword & IXGBE_DATA_MASK_NL;
868                 switch (control) {
869                 case IXGBE_DELAY_NL:
870                         data_offset++;
871                         DEBUGOUT1("DELAY: %d MS\n", edata);
872                         msec_delay(edata);
873                         break;
874                 case IXGBE_DATA_NL:
875                         DEBUGOUT("DATA:\n");
876                         data_offset++;
877                         hw->eeprom.ops.read(hw, data_offset++,
878                                             &phy_offset);
879                         for (i = 0; i < edata; i++) {
880                                 hw->eeprom.ops.read(hw, data_offset, &eword);
881                                 hw->phy.ops.write_reg(hw, phy_offset,
882                                                       IXGBE_TWINAX_DEV, eword);
883                                 DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword,
884                                           phy_offset);
885                                 data_offset++;
886                                 phy_offset++;
887                         }
888                         break;
889                 case IXGBE_CONTROL_NL:
890                         data_offset++;
891                         DEBUGOUT("CONTROL:\n");
892                         if (edata == IXGBE_CONTROL_EOL_NL) {
893                                 DEBUGOUT("EOL\n");
894                                 end_data = TRUE;
895                         } else if (edata == IXGBE_CONTROL_SOL_NL) {
896                                 DEBUGOUT("SOL\n");
897                         } else {
898                                 DEBUGOUT("Bad control value\n");
899                                 ret_val = IXGBE_ERR_PHY;
900                                 goto out;
901                         }
902                         break;
903                 default:
904                         DEBUGOUT("Bad control type\n");
905                         ret_val = IXGBE_ERR_PHY;
906                         goto out;
907                 }
908         }
909
910 out:
911         return ret_val;
912 }
913
914 /**
915  *  ixgbe_identify_module_generic - Identifies module type
916  *  @hw: pointer to hardware structure
917  *
918  *  Determines HW type and calls appropriate function.
919  **/
920 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
921 {
922         s32 status = IXGBE_ERR_SFP_NOT_PRESENT;
923
924         DEBUGFUNC("ixgbe_identify_module_generic");
925
926         switch (hw->mac.ops.get_media_type(hw)) {
927         case ixgbe_media_type_fiber:
928                 status = ixgbe_identify_sfp_module_generic(hw);
929                 break;
930
931
932         default:
933                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
934                 status = IXGBE_ERR_SFP_NOT_PRESENT;
935                 break;
936         }
937
938         return status;
939 }
940
941 /**
942  *  ixgbe_identify_sfp_module_generic - Identifies SFP modules
943  *  @hw: pointer to hardware structure
944  *
945  *  Searches for and identifies the SFP module and assigns appropriate PHY type.
946  **/
947 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
948 {
949         s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
950         u32 vendor_oui = 0;
951         enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
952         u8 identifier = 0;
953         u8 comp_codes_1g = 0;
954         u8 comp_codes_10g = 0;
955         u8 oui_bytes[3] = {0, 0, 0};
956         u8 cable_tech = 0;
957         u8 cable_spec = 0;
958         u16 enforce_sfp = 0;
959
960         DEBUGFUNC("ixgbe_identify_sfp_module_generic");
961
962         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
963                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
964                 status = IXGBE_ERR_SFP_NOT_PRESENT;
965                 goto out;
966         }
967
968         status = hw->phy.ops.read_i2c_eeprom(hw,
969                                              IXGBE_SFF_IDENTIFIER,
970                                              &identifier);
971
972         if (status == IXGBE_ERR_SWFW_SYNC ||
973             status == IXGBE_ERR_I2C ||
974             status == IXGBE_ERR_SFP_NOT_PRESENT)
975                 goto err_read_i2c_eeprom;
976
977         /* LAN ID is needed for sfp_type determination */
978         hw->mac.ops.set_lan_id(hw);
979
980         if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
981                 hw->phy.type = ixgbe_phy_sfp_unsupported;
982                 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
983         } else {
984                 status = hw->phy.ops.read_i2c_eeprom(hw,
985                                                      IXGBE_SFF_1GBE_COMP_CODES,
986                                                      &comp_codes_1g);
987
988                 if (status == IXGBE_ERR_SWFW_SYNC ||
989                     status == IXGBE_ERR_I2C ||
990                     status == IXGBE_ERR_SFP_NOT_PRESENT)
991                         goto err_read_i2c_eeprom;
992
993                 status = hw->phy.ops.read_i2c_eeprom(hw,
994                                                      IXGBE_SFF_10GBE_COMP_CODES,
995                                                      &comp_codes_10g);
996
997                 if (status == IXGBE_ERR_SWFW_SYNC ||
998                     status == IXGBE_ERR_I2C ||
999                     status == IXGBE_ERR_SFP_NOT_PRESENT)
1000                         goto err_read_i2c_eeprom;
1001                 status = hw->phy.ops.read_i2c_eeprom(hw,
1002                                                      IXGBE_SFF_CABLE_TECHNOLOGY,
1003                                                      &cable_tech);
1004
1005                 if (status == IXGBE_ERR_SWFW_SYNC ||
1006                     status == IXGBE_ERR_I2C ||
1007                     status == IXGBE_ERR_SFP_NOT_PRESENT)
1008                         goto err_read_i2c_eeprom;
1009
1010                  /* ID Module
1011                   * =========
1012                   * 0   SFP_DA_CU
1013                   * 1   SFP_SR
1014                   * 2   SFP_LR
1015                   * 3   SFP_DA_CORE0 - 82599-specific
1016                   * 4   SFP_DA_CORE1 - 82599-specific
1017                   * 5   SFP_SR/LR_CORE0 - 82599-specific
1018                   * 6   SFP_SR/LR_CORE1 - 82599-specific
1019                   * 7   SFP_act_lmt_DA_CORE0 - 82599-specific
1020                   * 8   SFP_act_lmt_DA_CORE1 - 82599-specific
1021                   * 9   SFP_1g_cu_CORE0 - 82599-specific
1022                   * 10  SFP_1g_cu_CORE1 - 82599-specific
1023                   * 11  SFP_1g_sx_CORE0 - 82599-specific
1024                   * 12  SFP_1g_sx_CORE1 - 82599-specific
1025                   */
1026                 if (hw->mac.type == ixgbe_mac_82598EB) {
1027                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1028                                 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1029                         else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1030                                 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1031                         else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1032                                 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1033                         else
1034                                 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1035                 } else if (hw->mac.type == ixgbe_mac_82599EB) {
1036                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1037                                 if (hw->bus.lan_id == 0)
1038                                         hw->phy.sfp_type =
1039                                                      ixgbe_sfp_type_da_cu_core0;
1040                                 else
1041                                         hw->phy.sfp_type =
1042                                                      ixgbe_sfp_type_da_cu_core1;
1043                         } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1044                                 hw->phy.ops.read_i2c_eeprom(
1045                                                 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1046                                                 &cable_spec);
1047                                 if (cable_spec &
1048                                     IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1049                                         if (hw->bus.lan_id == 0)
1050                                                 hw->phy.sfp_type =
1051                                                 ixgbe_sfp_type_da_act_lmt_core0;
1052                                         else
1053                                                 hw->phy.sfp_type =
1054                                                 ixgbe_sfp_type_da_act_lmt_core1;
1055                                 } else {
1056                                         hw->phy.sfp_type =
1057                                                         ixgbe_sfp_type_unknown;
1058                                 }
1059                         } else if (comp_codes_10g &
1060                                    (IXGBE_SFF_10GBASESR_CAPABLE |
1061                                     IXGBE_SFF_10GBASELR_CAPABLE)) {
1062                                 if (hw->bus.lan_id == 0)
1063                                         hw->phy.sfp_type =
1064                                                       ixgbe_sfp_type_srlr_core0;
1065                                 else
1066                                         hw->phy.sfp_type =
1067                                                       ixgbe_sfp_type_srlr_core1;
1068                         } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1069                                 if (hw->bus.lan_id == 0)
1070                                         hw->phy.sfp_type =
1071                                                 ixgbe_sfp_type_1g_cu_core0;
1072                                 else
1073                                         hw->phy.sfp_type =
1074                                                 ixgbe_sfp_type_1g_cu_core1;
1075                         } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1076                                 if (hw->bus.lan_id == 0)
1077                                         hw->phy.sfp_type =
1078                                                 ixgbe_sfp_type_1g_sx_core0;
1079                                 else
1080                                         hw->phy.sfp_type =
1081                                                 ixgbe_sfp_type_1g_sx_core1;
1082                         } else {
1083                                 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1084                         }
1085                 }
1086
1087                 if (hw->phy.sfp_type != stored_sfp_type)
1088                         hw->phy.sfp_setup_needed = TRUE;
1089
1090                 /* Determine if the SFP+ PHY is dual speed or not. */
1091                 hw->phy.multispeed_fiber = FALSE;
1092                 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1093                    (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1094                    ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1095                    (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1096                         hw->phy.multispeed_fiber = TRUE;
1097
1098                 /* Determine PHY vendor */
1099                 if (hw->phy.type != ixgbe_phy_nl) {
1100                         hw->phy.id = identifier;
1101                         status = hw->phy.ops.read_i2c_eeprom(hw,
1102                                                     IXGBE_SFF_VENDOR_OUI_BYTE0,
1103                                                     &oui_bytes[0]);
1104
1105                         if (status == IXGBE_ERR_SWFW_SYNC ||
1106                             status == IXGBE_ERR_I2C ||
1107                             status == IXGBE_ERR_SFP_NOT_PRESENT)
1108                                 goto err_read_i2c_eeprom;
1109
1110                         status = hw->phy.ops.read_i2c_eeprom(hw,
1111                                                     IXGBE_SFF_VENDOR_OUI_BYTE1,
1112                                                     &oui_bytes[1]);
1113
1114                         if (status == IXGBE_ERR_SWFW_SYNC ||
1115                             status == IXGBE_ERR_I2C ||
1116                             status == IXGBE_ERR_SFP_NOT_PRESENT)
1117                                 goto err_read_i2c_eeprom;
1118
1119                         status = hw->phy.ops.read_i2c_eeprom(hw,
1120                                                     IXGBE_SFF_VENDOR_OUI_BYTE2,
1121                                                     &oui_bytes[2]);
1122
1123                         if (status == IXGBE_ERR_SWFW_SYNC ||
1124                             status == IXGBE_ERR_I2C ||
1125                             status == IXGBE_ERR_SFP_NOT_PRESENT)
1126                                 goto err_read_i2c_eeprom;
1127
1128                         vendor_oui =
1129                           ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1130                            (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1131                            (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1132
1133                         switch (vendor_oui) {
1134                         case IXGBE_SFF_VENDOR_OUI_TYCO:
1135                                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1136                                         hw->phy.type =
1137                                                     ixgbe_phy_sfp_passive_tyco;
1138                                 break;
1139                         case IXGBE_SFF_VENDOR_OUI_FTL:
1140                                 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1141                                         hw->phy.type = ixgbe_phy_sfp_ftl_active;
1142                                 else
1143                                         hw->phy.type = ixgbe_phy_sfp_ftl;
1144                                 break;
1145                         case IXGBE_SFF_VENDOR_OUI_AVAGO:
1146                                 hw->phy.type = ixgbe_phy_sfp_avago;
1147                                 break;
1148                         case IXGBE_SFF_VENDOR_OUI_INTEL:
1149                                 hw->phy.type = ixgbe_phy_sfp_intel;
1150                                 break;
1151                         default:
1152                                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1153                                         hw->phy.type =
1154                                                  ixgbe_phy_sfp_passive_unknown;
1155                                 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1156                                         hw->phy.type =
1157                                                 ixgbe_phy_sfp_active_unknown;
1158                                 else
1159                                         hw->phy.type = ixgbe_phy_sfp_unknown;
1160                                 break;
1161                         }
1162                 }
1163
1164                 /* Allow any DA cable vendor */
1165                 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1166                     IXGBE_SFF_DA_ACTIVE_CABLE)) {
1167                         status = IXGBE_SUCCESS;
1168                         goto out;
1169                 }
1170
1171                 /* Verify supported 1G SFP modules */
1172                 if (comp_codes_10g == 0 &&
1173                     !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1174                       hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1175                       hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0  ||
1176                       hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1177                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1178                         status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1179                         goto out;
1180                 }
1181
1182                 /* Anything else 82598-based is supported */
1183                 if (hw->mac.type == ixgbe_mac_82598EB) {
1184                         status = IXGBE_SUCCESS;
1185                         goto out;
1186                 }
1187
1188                 ixgbe_get_device_caps(hw, &enforce_sfp);
1189                 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1190                     !((hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0) ||
1191                       (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1) ||
1192                       (hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0)  ||
1193                       (hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1))) {
1194                         /* Make sure we're a supported PHY type */
1195                         if (hw->phy.type == ixgbe_phy_sfp_intel) {
1196                                 status = IXGBE_SUCCESS;
1197                         } else {
1198                                 if (hw->allow_unsupported_sfp == TRUE) {
1199                                         EWARN(hw, "WARNING: Intel (R) Network "
1200                                               "Connections are quality tested "
1201                                               "using Intel (R) Ethernet Optics."
1202                                               " Using untested modules is not "
1203                                               "supported and may cause unstable"
1204                                               " operation or damage to the "
1205                                               "module or the adapter. Intel "
1206                                               "Corporation is not responsible "
1207                                               "for any harm caused by using "
1208                                               "untested modules.\n", status);
1209                                         status = IXGBE_SUCCESS;
1210                                 } else {
1211                                         DEBUGOUT("SFP+ module not supported\n");
1212                                         hw->phy.type =
1213                                                 ixgbe_phy_sfp_unsupported;
1214                                         status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1215                                 }
1216                         }
1217                 } else {
1218                         status = IXGBE_SUCCESS;
1219                 }
1220         }
1221
1222 out:
1223         return status;
1224
1225 err_read_i2c_eeprom:
1226         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1227         if (hw->phy.type != ixgbe_phy_nl) {
1228                 hw->phy.id = 0;
1229                 hw->phy.type = ixgbe_phy_unknown;
1230         }
1231         return IXGBE_ERR_SFP_NOT_PRESENT;
1232 }
1233
1234
1235
1236 /**
1237  *  ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1238  *  @hw: pointer to hardware structure
1239  *  @list_offset: offset to the SFP ID list
1240  *  @data_offset: offset to the SFP data block
1241  *
1242  *  Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1243  *  so it returns the offsets to the phy init sequence block.
1244  **/
1245 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1246                                         u16 *list_offset,
1247                                         u16 *data_offset)
1248 {
1249         u16 sfp_id;
1250         u16 sfp_type = hw->phy.sfp_type;
1251
1252         DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1253
1254         if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1255                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1256
1257         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1258                 return IXGBE_ERR_SFP_NOT_PRESENT;
1259
1260         if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1261             (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1262                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1263
1264         /*
1265          * Limiting active cables and 1G Phys must be initialized as
1266          * SR modules
1267          */
1268         if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1269             sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1270             sfp_type == ixgbe_sfp_type_1g_sx_core0)
1271                 sfp_type = ixgbe_sfp_type_srlr_core0;
1272         else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1273                  sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1274                  sfp_type == ixgbe_sfp_type_1g_sx_core1)
1275                 sfp_type = ixgbe_sfp_type_srlr_core1;
1276
1277         /* Read offset to PHY init contents */
1278         hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
1279
1280         if ((!*list_offset) || (*list_offset == 0xFFFF))
1281                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1282
1283         /* Shift offset to first ID word */
1284         (*list_offset)++;
1285
1286         /*
1287          * Find the matching SFP ID in the EEPROM
1288          * and program the init sequence
1289          */
1290         hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
1291
1292         while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1293                 if (sfp_id == sfp_type) {
1294                         (*list_offset)++;
1295                         hw->eeprom.ops.read(hw, *list_offset, data_offset);
1296                         if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1297                                 DEBUGOUT("SFP+ module not supported\n");
1298                                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1299                         } else {
1300                                 break;
1301                         }
1302                 } else {
1303                         (*list_offset) += 2;
1304                         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1305                                 return IXGBE_ERR_PHY;
1306                 }
1307         }
1308
1309         if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1310                 DEBUGOUT("No matching SFP+ module found\n");
1311                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1312         }
1313
1314         return IXGBE_SUCCESS;
1315 }
1316
1317 /**
1318  *  ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1319  *  @hw: pointer to hardware structure
1320  *  @byte_offset: EEPROM byte offset to read
1321  *  @eeprom_data: value read
1322  *
1323  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1324  **/
1325 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1326                                   u8 *eeprom_data)
1327 {
1328         DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1329
1330         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1331                                          IXGBE_I2C_EEPROM_DEV_ADDR,
1332                                          eeprom_data);
1333 }
1334
1335 /**
1336  *  ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1337  *  @hw: pointer to hardware structure
1338  *  @byte_offset: EEPROM byte offset to write
1339  *  @eeprom_data: value to write
1340  *
1341  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
1342  **/
1343 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1344                                    u8 eeprom_data)
1345 {
1346         DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1347
1348         return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1349                                           IXGBE_I2C_EEPROM_DEV_ADDR,
1350                                           eeprom_data);
1351 }
1352
1353 /**
1354  *  ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1355  *  @hw: pointer to hardware structure
1356  *  @byte_offset: byte offset to read
1357  *  @data: value read
1358  *
1359  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1360  *  a specified device address.
1361  **/
1362 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1363                                 u8 dev_addr, u8 *data)
1364 {
1365         s32 status = IXGBE_SUCCESS;
1366         u32 max_retry = 10;
1367         u32 retry = 0;
1368         u16 swfw_mask = 0;
1369         bool nack = 1;
1370         *data = 0;
1371
1372         DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1373
1374         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1375                 swfw_mask = IXGBE_GSSR_PHY1_SM;
1376         else
1377                 swfw_mask = IXGBE_GSSR_PHY0_SM;
1378
1379         do {
1380                 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
1381                     != IXGBE_SUCCESS) {
1382                         status = IXGBE_ERR_SWFW_SYNC;
1383                         goto read_byte_out;
1384                 }
1385
1386                 ixgbe_i2c_start(hw);
1387
1388                 /* Device Address and write indication */
1389                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1390                 if (status != IXGBE_SUCCESS)
1391                         goto fail;
1392
1393                 status = ixgbe_get_i2c_ack(hw);
1394                 if (status != IXGBE_SUCCESS)
1395                         goto fail;
1396
1397                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1398                 if (status != IXGBE_SUCCESS)
1399                         goto fail;
1400
1401                 status = ixgbe_get_i2c_ack(hw);
1402                 if (status != IXGBE_SUCCESS)
1403                         goto fail;
1404
1405                 ixgbe_i2c_start(hw);
1406
1407                 /* Device Address and read indication */
1408                 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1409                 if (status != IXGBE_SUCCESS)
1410                         goto fail;
1411
1412                 status = ixgbe_get_i2c_ack(hw);
1413                 if (status != IXGBE_SUCCESS)
1414                         goto fail;
1415
1416                 status = ixgbe_clock_in_i2c_byte(hw, data);
1417                 if (status != IXGBE_SUCCESS)
1418                         goto fail;
1419
1420                 status = ixgbe_clock_out_i2c_bit(hw, nack);
1421                 if (status != IXGBE_SUCCESS)
1422                         goto fail;
1423
1424                 ixgbe_i2c_stop(hw);
1425                 break;
1426
1427 fail:
1428                 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1429                 msec_delay(100);
1430                 ixgbe_i2c_bus_clear(hw);
1431                 retry++;
1432                 if (retry < max_retry)
1433                         DEBUGOUT("I2C byte read error - Retrying.\n");
1434                 else
1435                         DEBUGOUT("I2C byte read error.\n");
1436
1437         } while (retry < max_retry);
1438
1439         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1440
1441 read_byte_out:
1442         return status;
1443 }
1444
1445 /**
1446  *  ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1447  *  @hw: pointer to hardware structure
1448  *  @byte_offset: byte offset to write
1449  *  @data: value to write
1450  *
1451  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1452  *  a specified device address.
1453  **/
1454 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1455                                  u8 dev_addr, u8 data)
1456 {
1457         s32 status = IXGBE_SUCCESS;
1458         u32 max_retry = 1;
1459         u32 retry = 0;
1460         u16 swfw_mask = 0;
1461
1462         DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1463
1464         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1465                 swfw_mask = IXGBE_GSSR_PHY1_SM;
1466         else
1467                 swfw_mask = IXGBE_GSSR_PHY0_SM;
1468
1469         if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1470                 status = IXGBE_ERR_SWFW_SYNC;
1471                 goto write_byte_out;
1472         }
1473
1474         do {
1475                 ixgbe_i2c_start(hw);
1476
1477                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1478                 if (status != IXGBE_SUCCESS)
1479                         goto fail;
1480
1481                 status = ixgbe_get_i2c_ack(hw);
1482                 if (status != IXGBE_SUCCESS)
1483                         goto fail;
1484
1485                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1486                 if (status != IXGBE_SUCCESS)
1487                         goto fail;
1488
1489                 status = ixgbe_get_i2c_ack(hw);
1490                 if (status != IXGBE_SUCCESS)
1491                         goto fail;
1492
1493                 status = ixgbe_clock_out_i2c_byte(hw, data);
1494                 if (status != IXGBE_SUCCESS)
1495                         goto fail;
1496
1497                 status = ixgbe_get_i2c_ack(hw);
1498                 if (status != IXGBE_SUCCESS)
1499                         goto fail;
1500
1501                 ixgbe_i2c_stop(hw);
1502                 break;
1503
1504 fail:
1505                 ixgbe_i2c_bus_clear(hw);
1506                 retry++;
1507                 if (retry < max_retry)
1508                         DEBUGOUT("I2C byte write error - Retrying.\n");
1509                 else
1510                         DEBUGOUT("I2C byte write error.\n");
1511         } while (retry < max_retry);
1512
1513         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1514
1515 write_byte_out:
1516         return status;
1517 }
1518
1519 /**
1520  *  ixgbe_i2c_start - Sets I2C start condition
1521  *  @hw: pointer to hardware structure
1522  *
1523  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
1524  **/
1525 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1526 {
1527         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1528
1529         DEBUGFUNC("ixgbe_i2c_start");
1530
1531         /* Start condition must begin with data and clock high */
1532         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1533         ixgbe_raise_i2c_clk(hw, &i2cctl);
1534
1535         /* Setup time for start condition (4.7us) */
1536         usec_delay(IXGBE_I2C_T_SU_STA);
1537
1538         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1539
1540         /* Hold time for start condition (4us) */
1541         usec_delay(IXGBE_I2C_T_HD_STA);
1542
1543         ixgbe_lower_i2c_clk(hw, &i2cctl);
1544
1545         /* Minimum low period of clock is 4.7 us */
1546         usec_delay(IXGBE_I2C_T_LOW);
1547
1548 }
1549
1550 /**
1551  *  ixgbe_i2c_stop - Sets I2C stop condition
1552  *  @hw: pointer to hardware structure
1553  *
1554  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
1555  **/
1556 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1557 {
1558         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1559
1560         DEBUGFUNC("ixgbe_i2c_stop");
1561
1562         /* Stop condition must begin with data low and clock high */
1563         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1564         ixgbe_raise_i2c_clk(hw, &i2cctl);
1565
1566         /* Setup time for stop condition (4us) */
1567         usec_delay(IXGBE_I2C_T_SU_STO);
1568
1569         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1570
1571         /* bus free time between stop and start (4.7us)*/
1572         usec_delay(IXGBE_I2C_T_BUF);
1573 }
1574
1575 /**
1576  *  ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1577  *  @hw: pointer to hardware structure
1578  *  @data: data byte to clock in
1579  *
1580  *  Clocks in one byte data via I2C data/clock
1581  **/
1582 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1583 {
1584         s32 i;
1585         bool bit = 0;
1586
1587         DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1588
1589         for (i = 7; i >= 0; i--) {
1590                 ixgbe_clock_in_i2c_bit(hw, &bit);
1591                 *data |= bit << i;
1592         }
1593
1594         return IXGBE_SUCCESS;
1595 }
1596
1597 /**
1598  *  ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1599  *  @hw: pointer to hardware structure
1600  *  @data: data byte clocked out
1601  *
1602  *  Clocks out one byte data via I2C data/clock
1603  **/
1604 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1605 {
1606         s32 status = IXGBE_SUCCESS;
1607         s32 i;
1608         u32 i2cctl;
1609         bool bit = 0;
1610
1611         DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1612
1613         for (i = 7; i >= 0; i--) {
1614                 bit = (data >> i) & 0x1;
1615                 status = ixgbe_clock_out_i2c_bit(hw, bit);
1616
1617                 if (status != IXGBE_SUCCESS)
1618                         break;
1619         }
1620
1621         /* Release SDA line (set high) */
1622         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1623         i2cctl |= IXGBE_I2C_DATA_OUT;
1624         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1625         IXGBE_WRITE_FLUSH(hw);
1626
1627         return status;
1628 }
1629
1630 /**
1631  *  ixgbe_get_i2c_ack - Polls for I2C ACK
1632  *  @hw: pointer to hardware structure
1633  *
1634  *  Clocks in/out one bit via I2C data/clock
1635  **/
1636 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1637 {
1638         s32 status = IXGBE_SUCCESS;
1639         u32 i = 0;
1640         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1641         u32 timeout = 10;
1642         bool ack = 1;
1643
1644         DEBUGFUNC("ixgbe_get_i2c_ack");
1645
1646         ixgbe_raise_i2c_clk(hw, &i2cctl);
1647
1648
1649         /* Minimum high period of clock is 4us */
1650         usec_delay(IXGBE_I2C_T_HIGH);
1651
1652         /* Poll for ACK.  Note that ACK in I2C spec is
1653          * transition from 1 to 0 */
1654         for (i = 0; i < timeout; i++) {
1655                 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1656                 ack = ixgbe_get_i2c_data(&i2cctl);
1657
1658                 usec_delay(1);
1659                 if (ack == 0)
1660                         break;
1661         }
1662
1663         if (ack == 1) {
1664                 DEBUGOUT("I2C ack was not received.\n");
1665                 status = IXGBE_ERR_I2C;
1666         }
1667
1668         ixgbe_lower_i2c_clk(hw, &i2cctl);
1669
1670         /* Minimum low period of clock is 4.7 us */
1671         usec_delay(IXGBE_I2C_T_LOW);
1672
1673         return status;
1674 }
1675
1676 /**
1677  *  ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1678  *  @hw: pointer to hardware structure
1679  *  @data: read data value
1680  *
1681  *  Clocks in one bit via I2C data/clock
1682  **/
1683 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1684 {
1685         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1686
1687         DEBUGFUNC("ixgbe_clock_in_i2c_bit");
1688
1689         ixgbe_raise_i2c_clk(hw, &i2cctl);
1690
1691         /* Minimum high period of clock is 4us */
1692         usec_delay(IXGBE_I2C_T_HIGH);
1693
1694         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1695         *data = ixgbe_get_i2c_data(&i2cctl);
1696
1697         ixgbe_lower_i2c_clk(hw, &i2cctl);
1698
1699         /* Minimum low period of clock is 4.7 us */
1700         usec_delay(IXGBE_I2C_T_LOW);
1701
1702         return IXGBE_SUCCESS;
1703 }
1704
1705 /**
1706  *  ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1707  *  @hw: pointer to hardware structure
1708  *  @data: data value to write
1709  *
1710  *  Clocks out one bit via I2C data/clock
1711  **/
1712 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1713 {
1714         s32 status;
1715         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1716
1717         DEBUGFUNC("ixgbe_clock_out_i2c_bit");
1718
1719         status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1720         if (status == IXGBE_SUCCESS) {
1721                 ixgbe_raise_i2c_clk(hw, &i2cctl);
1722
1723                 /* Minimum high period of clock is 4us */
1724                 usec_delay(IXGBE_I2C_T_HIGH);
1725
1726                 ixgbe_lower_i2c_clk(hw, &i2cctl);
1727
1728                 /* Minimum low period of clock is 4.7 us.
1729                  * This also takes care of the data hold time.
1730                  */
1731                 usec_delay(IXGBE_I2C_T_LOW);
1732         } else {
1733                 status = IXGBE_ERR_I2C;
1734                 DEBUGOUT1("I2C data was not set to %X\n", data);
1735         }
1736
1737         return status;
1738 }
1739 /**
1740  *  ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1741  *  @hw: pointer to hardware structure
1742  *  @i2cctl: Current value of I2CCTL register
1743  *
1744  *  Raises the I2C clock line '0'->'1'
1745  **/
1746 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1747 {
1748         u32 i = 0;
1749         u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
1750         u32 i2cctl_r = 0;
1751
1752         DEBUGFUNC("ixgbe_raise_i2c_clk");
1753
1754         for (i = 0; i < timeout; i++) {
1755                 *i2cctl |= IXGBE_I2C_CLK_OUT;
1756
1757                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1758                 IXGBE_WRITE_FLUSH(hw);
1759                 /* SCL rise time (1000ns) */
1760                 usec_delay(IXGBE_I2C_T_RISE);
1761
1762                 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1763                 if (i2cctl_r & IXGBE_I2C_CLK_IN)
1764                         break;
1765         }
1766 }
1767
1768 /**
1769  *  ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1770  *  @hw: pointer to hardware structure
1771  *  @i2cctl: Current value of I2CCTL register
1772  *
1773  *  Lowers the I2C clock line '1'->'0'
1774  **/
1775 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1776 {
1777
1778         DEBUGFUNC("ixgbe_lower_i2c_clk");
1779
1780         *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1781
1782         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1783         IXGBE_WRITE_FLUSH(hw);
1784
1785         /* SCL fall time (300ns) */
1786         usec_delay(IXGBE_I2C_T_FALL);
1787 }
1788
1789 /**
1790  *  ixgbe_set_i2c_data - Sets the I2C data bit
1791  *  @hw: pointer to hardware structure
1792  *  @i2cctl: Current value of I2CCTL register
1793  *  @data: I2C data value (0 or 1) to set
1794  *
1795  *  Sets the I2C data bit
1796  **/
1797 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1798 {
1799         s32 status = IXGBE_SUCCESS;
1800
1801         DEBUGFUNC("ixgbe_set_i2c_data");
1802
1803         if (data)
1804                 *i2cctl |= IXGBE_I2C_DATA_OUT;
1805         else
1806                 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1807
1808         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1809         IXGBE_WRITE_FLUSH(hw);
1810
1811         /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1812         usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1813
1814         /* Verify data was set correctly */
1815         *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1816         if (data != ixgbe_get_i2c_data(i2cctl)) {
1817                 status = IXGBE_ERR_I2C;
1818                 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1819         }
1820
1821         return status;
1822 }
1823
1824 /**
1825  *  ixgbe_get_i2c_data - Reads the I2C SDA data bit
1826  *  @hw: pointer to hardware structure
1827  *  @i2cctl: Current value of I2CCTL register
1828  *
1829  *  Returns the I2C data bit value
1830  **/
1831 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1832 {
1833         bool data;
1834
1835         DEBUGFUNC("ixgbe_get_i2c_data");
1836
1837         if (*i2cctl & IXGBE_I2C_DATA_IN)
1838                 data = 1;
1839         else
1840                 data = 0;
1841
1842         return data;
1843 }
1844
1845 /**
1846  *  ixgbe_i2c_bus_clear - Clears the I2C bus
1847  *  @hw: pointer to hardware structure
1848  *
1849  *  Clears the I2C bus by sending nine clock pulses.
1850  *  Used when data line is stuck low.
1851  **/
1852 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1853 {
1854         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1855         u32 i;
1856
1857         DEBUGFUNC("ixgbe_i2c_bus_clear");
1858
1859         ixgbe_i2c_start(hw);
1860
1861         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1862
1863         for (i = 0; i < 9; i++) {
1864                 ixgbe_raise_i2c_clk(hw, &i2cctl);
1865
1866                 /* Min high period of clock is 4us */
1867                 usec_delay(IXGBE_I2C_T_HIGH);
1868
1869                 ixgbe_lower_i2c_clk(hw, &i2cctl);
1870
1871                 /* Min low period of clock is 4.7us*/
1872                 usec_delay(IXGBE_I2C_T_LOW);
1873         }
1874
1875         ixgbe_i2c_start(hw);
1876
1877         /* Put the i2c bus back to default state */
1878         ixgbe_i2c_stop(hw);
1879 }
1880
1881 /**
1882  *  ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
1883  *  @hw: pointer to hardware structure
1884  *
1885  *  Checks if the LASI temp alarm status was triggered due to overtemp
1886  **/
1887 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1888 {
1889         s32 status = IXGBE_SUCCESS;
1890         u16 phy_data = 0;
1891
1892         DEBUGFUNC("ixgbe_tn_check_overtemp");
1893
1894         if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1895                 goto out;
1896
1897         /* Check that the LASI temp alarm status was triggered */
1898         hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1899                              IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
1900
1901         if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1902                 goto out;
1903
1904         status = IXGBE_ERR_OVERTEMP;
1905 out:
1906         return status;
1907 }