]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - sys/dev/ixgbe/ixgbe_phy.c
MFC of the ixgbe driver. Including revisions:
[FreeBSD/stable/9.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                   */
1024                 if (hw->mac.type == ixgbe_mac_82598EB) {
1025                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1026                                 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1027                         else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1028                                 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1029                         else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1030                                 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1031                         else
1032                                 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1033                 } else if (hw->mac.type == ixgbe_mac_82599EB) {
1034                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1035                                 if (hw->bus.lan_id == 0)
1036                                         hw->phy.sfp_type =
1037                                                      ixgbe_sfp_type_da_cu_core0;
1038                                 else
1039                                         hw->phy.sfp_type =
1040                                                      ixgbe_sfp_type_da_cu_core1;
1041                         } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1042                                 hw->phy.ops.read_i2c_eeprom(
1043                                                 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1044                                                 &cable_spec);
1045                                 if (cable_spec &
1046                                     IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1047                                         if (hw->bus.lan_id == 0)
1048                                                 hw->phy.sfp_type =
1049                                                 ixgbe_sfp_type_da_act_lmt_core0;
1050                                         else
1051                                                 hw->phy.sfp_type =
1052                                                 ixgbe_sfp_type_da_act_lmt_core1;
1053                                 } else {
1054                                         hw->phy.sfp_type =
1055                                                         ixgbe_sfp_type_unknown;
1056                                 }
1057                         } else if (comp_codes_10g &
1058                                    (IXGBE_SFF_10GBASESR_CAPABLE |
1059                                     IXGBE_SFF_10GBASELR_CAPABLE)) {
1060                                 if (hw->bus.lan_id == 0)
1061                                         hw->phy.sfp_type =
1062                                                       ixgbe_sfp_type_srlr_core0;
1063                                 else
1064                                         hw->phy.sfp_type =
1065                                                       ixgbe_sfp_type_srlr_core1;
1066                         } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1067                                 if (hw->bus.lan_id == 0)
1068                                         hw->phy.sfp_type =
1069                                                 ixgbe_sfp_type_1g_cu_core0;
1070                                 else
1071                                         hw->phy.sfp_type =
1072                                                 ixgbe_sfp_type_1g_cu_core1;
1073                         } else {
1074                                 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1075                         }
1076                 }
1077
1078                 if (hw->phy.sfp_type != stored_sfp_type)
1079                         hw->phy.sfp_setup_needed = TRUE;
1080
1081                 /* Determine if the SFP+ PHY is dual speed or not. */
1082                 hw->phy.multispeed_fiber = FALSE;
1083                 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1084                    (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1085                    ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1086                    (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1087                         hw->phy.multispeed_fiber = TRUE;
1088
1089                 /* Determine PHY vendor */
1090                 if (hw->phy.type != ixgbe_phy_nl) {
1091                         hw->phy.id = identifier;
1092                         status = hw->phy.ops.read_i2c_eeprom(hw,
1093                                                     IXGBE_SFF_VENDOR_OUI_BYTE0,
1094                                                     &oui_bytes[0]);
1095
1096                         if (status == IXGBE_ERR_SWFW_SYNC ||
1097                             status == IXGBE_ERR_I2C ||
1098                             status == IXGBE_ERR_SFP_NOT_PRESENT)
1099                                 goto err_read_i2c_eeprom;
1100
1101                         status = hw->phy.ops.read_i2c_eeprom(hw,
1102                                                     IXGBE_SFF_VENDOR_OUI_BYTE1,
1103                                                     &oui_bytes[1]);
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_BYTE2,
1112                                                     &oui_bytes[2]);
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                         vendor_oui =
1120                           ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1121                            (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1122                            (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1123
1124                         switch (vendor_oui) {
1125                         case IXGBE_SFF_VENDOR_OUI_TYCO:
1126                                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1127                                         hw->phy.type =
1128                                                     ixgbe_phy_sfp_passive_tyco;
1129                                 break;
1130                         case IXGBE_SFF_VENDOR_OUI_FTL:
1131                                 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1132                                         hw->phy.type = ixgbe_phy_sfp_ftl_active;
1133                                 else
1134                                         hw->phy.type = ixgbe_phy_sfp_ftl;
1135                                 break;
1136                         case IXGBE_SFF_VENDOR_OUI_AVAGO:
1137                                 hw->phy.type = ixgbe_phy_sfp_avago;
1138                                 break;
1139                         case IXGBE_SFF_VENDOR_OUI_INTEL:
1140                                 hw->phy.type = ixgbe_phy_sfp_intel;
1141                                 break;
1142                         default:
1143                                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1144                                         hw->phy.type =
1145                                                  ixgbe_phy_sfp_passive_unknown;
1146                                 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1147                                         hw->phy.type =
1148                                                 ixgbe_phy_sfp_active_unknown;
1149                                 else
1150                                         hw->phy.type = ixgbe_phy_sfp_unknown;
1151                                 break;
1152                         }
1153                 }
1154
1155                 /* Allow any DA cable vendor */
1156                 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1157                     IXGBE_SFF_DA_ACTIVE_CABLE)) {
1158                         status = IXGBE_SUCCESS;
1159                         goto out;
1160                 }
1161
1162                 /* Verify supported 1G SFP modules */
1163                 if (comp_codes_10g == 0 &&
1164                     !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1165                       hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0)) {
1166                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1167                         status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1168                         goto out;
1169                 }
1170
1171                 /* Anything else 82598-based is supported */
1172                 if (hw->mac.type == ixgbe_mac_82598EB) {
1173                         status = IXGBE_SUCCESS;
1174                         goto out;
1175                 }
1176
1177                 ixgbe_get_device_caps(hw, &enforce_sfp);
1178                 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1179                     !((hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0) ||
1180                       (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1))) {
1181                         /* Make sure we're a supported PHY type */
1182                         if (hw->phy.type == ixgbe_phy_sfp_intel) {
1183                                 status = IXGBE_SUCCESS;
1184                         } else {
1185                                 DEBUGOUT("SFP+ module not supported\n");
1186                                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1187                                 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1188                         }
1189                 } else {
1190                         status = IXGBE_SUCCESS;
1191                 }
1192         }
1193
1194 out:
1195         return status;
1196
1197 err_read_i2c_eeprom:
1198         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1199         if (hw->phy.type != ixgbe_phy_nl) {
1200                 hw->phy.id = 0;
1201                 hw->phy.type = ixgbe_phy_unknown;
1202         }
1203         return IXGBE_ERR_SFP_NOT_PRESENT;
1204 }
1205
1206
1207
1208 /**
1209  *  ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1210  *  @hw: pointer to hardware structure
1211  *  @list_offset: offset to the SFP ID list
1212  *  @data_offset: offset to the SFP data block
1213  *
1214  *  Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1215  *  so it returns the offsets to the phy init sequence block.
1216  **/
1217 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1218                                         u16 *list_offset,
1219                                         u16 *data_offset)
1220 {
1221         u16 sfp_id;
1222         u16 sfp_type = hw->phy.sfp_type;
1223
1224         DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1225
1226         if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1227                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1228
1229         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1230                 return IXGBE_ERR_SFP_NOT_PRESENT;
1231
1232         if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1233             (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1234                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1235
1236         /*
1237          * Limiting active cables and 1G Phys must be initialized as
1238          * SR modules
1239          */
1240         if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1241             sfp_type == ixgbe_sfp_type_1g_cu_core0)
1242                 sfp_type = ixgbe_sfp_type_srlr_core0;
1243         else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1244                  sfp_type == ixgbe_sfp_type_1g_cu_core1)
1245                 sfp_type = ixgbe_sfp_type_srlr_core1;
1246
1247         /* Read offset to PHY init contents */
1248         hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
1249
1250         if ((!*list_offset) || (*list_offset == 0xFFFF))
1251                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1252
1253         /* Shift offset to first ID word */
1254         (*list_offset)++;
1255
1256         /*
1257          * Find the matching SFP ID in the EEPROM
1258          * and program the init sequence
1259          */
1260         hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
1261
1262         while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1263                 if (sfp_id == sfp_type) {
1264                         (*list_offset)++;
1265                         hw->eeprom.ops.read(hw, *list_offset, data_offset);
1266                         if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1267                                 DEBUGOUT("SFP+ module not supported\n");
1268                                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1269                         } else {
1270                                 break;
1271                         }
1272                 } else {
1273                         (*list_offset) += 2;
1274                         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1275                                 return IXGBE_ERR_PHY;
1276                 }
1277         }
1278
1279         if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1280                 DEBUGOUT("No matching SFP+ module found\n");
1281                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1282         }
1283
1284         return IXGBE_SUCCESS;
1285 }
1286
1287 /**
1288  *  ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1289  *  @hw: pointer to hardware structure
1290  *  @byte_offset: EEPROM byte offset to read
1291  *  @eeprom_data: value read
1292  *
1293  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1294  **/
1295 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1296                                   u8 *eeprom_data)
1297 {
1298         DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1299
1300         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1301                                          IXGBE_I2C_EEPROM_DEV_ADDR,
1302                                          eeprom_data);
1303 }
1304
1305 /**
1306  *  ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1307  *  @hw: pointer to hardware structure
1308  *  @byte_offset: EEPROM byte offset to write
1309  *  @eeprom_data: value to write
1310  *
1311  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
1312  **/
1313 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1314                                    u8 eeprom_data)
1315 {
1316         DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1317
1318         return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1319                                           IXGBE_I2C_EEPROM_DEV_ADDR,
1320                                           eeprom_data);
1321 }
1322
1323 /**
1324  *  ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1325  *  @hw: pointer to hardware structure
1326  *  @byte_offset: byte offset to read
1327  *  @data: value read
1328  *
1329  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1330  *  a specified device address.
1331  **/
1332 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1333                                 u8 dev_addr, u8 *data)
1334 {
1335         s32 status = IXGBE_SUCCESS;
1336         u32 max_retry = 10;
1337         u32 retry = 0;
1338         u16 swfw_mask = 0;
1339         bool nack = 1;
1340         *data = 0;
1341
1342         DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1343
1344         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1345                 swfw_mask = IXGBE_GSSR_PHY1_SM;
1346         else
1347                 swfw_mask = IXGBE_GSSR_PHY0_SM;
1348
1349         do {
1350                 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
1351                     != IXGBE_SUCCESS) {
1352                         status = IXGBE_ERR_SWFW_SYNC;
1353                         goto read_byte_out;
1354                 }
1355
1356                 ixgbe_i2c_start(hw);
1357
1358                 /* Device Address and write indication */
1359                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1360                 if (status != IXGBE_SUCCESS)
1361                         goto fail;
1362
1363                 status = ixgbe_get_i2c_ack(hw);
1364                 if (status != IXGBE_SUCCESS)
1365                         goto fail;
1366
1367                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1368                 if (status != IXGBE_SUCCESS)
1369                         goto fail;
1370
1371                 status = ixgbe_get_i2c_ack(hw);
1372                 if (status != IXGBE_SUCCESS)
1373                         goto fail;
1374
1375                 ixgbe_i2c_start(hw);
1376
1377                 /* Device Address and read indication */
1378                 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1379                 if (status != IXGBE_SUCCESS)
1380                         goto fail;
1381
1382                 status = ixgbe_get_i2c_ack(hw);
1383                 if (status != IXGBE_SUCCESS)
1384                         goto fail;
1385
1386                 status = ixgbe_clock_in_i2c_byte(hw, data);
1387                 if (status != IXGBE_SUCCESS)
1388                         goto fail;
1389
1390                 status = ixgbe_clock_out_i2c_bit(hw, nack);
1391                 if (status != IXGBE_SUCCESS)
1392                         goto fail;
1393
1394                 ixgbe_i2c_stop(hw);
1395                 break;
1396
1397 fail:
1398                 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1399                 msec_delay(100);
1400                 ixgbe_i2c_bus_clear(hw);
1401                 retry++;
1402                 if (retry < max_retry)
1403                         DEBUGOUT("I2C byte read error - Retrying.\n");
1404                 else
1405                         DEBUGOUT("I2C byte read error.\n");
1406
1407         } while (retry < max_retry);
1408
1409         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1410
1411 read_byte_out:
1412         return status;
1413 }
1414
1415 /**
1416  *  ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1417  *  @hw: pointer to hardware structure
1418  *  @byte_offset: byte offset to write
1419  *  @data: value to write
1420  *
1421  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1422  *  a specified device address.
1423  **/
1424 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1425                                  u8 dev_addr, u8 data)
1426 {
1427         s32 status = IXGBE_SUCCESS;
1428         u32 max_retry = 1;
1429         u32 retry = 0;
1430         u16 swfw_mask = 0;
1431
1432         DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1433
1434         if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1435                 swfw_mask = IXGBE_GSSR_PHY1_SM;
1436         else
1437                 swfw_mask = IXGBE_GSSR_PHY0_SM;
1438
1439         if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1440                 status = IXGBE_ERR_SWFW_SYNC;
1441                 goto write_byte_out;
1442         }
1443
1444         do {
1445                 ixgbe_i2c_start(hw);
1446
1447                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1448                 if (status != IXGBE_SUCCESS)
1449                         goto fail;
1450
1451                 status = ixgbe_get_i2c_ack(hw);
1452                 if (status != IXGBE_SUCCESS)
1453                         goto fail;
1454
1455                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1456                 if (status != IXGBE_SUCCESS)
1457                         goto fail;
1458
1459                 status = ixgbe_get_i2c_ack(hw);
1460                 if (status != IXGBE_SUCCESS)
1461                         goto fail;
1462
1463                 status = ixgbe_clock_out_i2c_byte(hw, data);
1464                 if (status != IXGBE_SUCCESS)
1465                         goto fail;
1466
1467                 status = ixgbe_get_i2c_ack(hw);
1468                 if (status != IXGBE_SUCCESS)
1469                         goto fail;
1470
1471                 ixgbe_i2c_stop(hw);
1472                 break;
1473
1474 fail:
1475                 ixgbe_i2c_bus_clear(hw);
1476                 retry++;
1477                 if (retry < max_retry)
1478                         DEBUGOUT("I2C byte write error - Retrying.\n");
1479                 else
1480                         DEBUGOUT("I2C byte write error.\n");
1481         } while (retry < max_retry);
1482
1483         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1484
1485 write_byte_out:
1486         return status;
1487 }
1488
1489 /**
1490  *  ixgbe_i2c_start - Sets I2C start condition
1491  *  @hw: pointer to hardware structure
1492  *
1493  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
1494  **/
1495 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1496 {
1497         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1498
1499         DEBUGFUNC("ixgbe_i2c_start");
1500
1501         /* Start condition must begin with data and clock high */
1502         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1503         ixgbe_raise_i2c_clk(hw, &i2cctl);
1504
1505         /* Setup time for start condition (4.7us) */
1506         usec_delay(IXGBE_I2C_T_SU_STA);
1507
1508         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1509
1510         /* Hold time for start condition (4us) */
1511         usec_delay(IXGBE_I2C_T_HD_STA);
1512
1513         ixgbe_lower_i2c_clk(hw, &i2cctl);
1514
1515         /* Minimum low period of clock is 4.7 us */
1516         usec_delay(IXGBE_I2C_T_LOW);
1517
1518 }
1519
1520 /**
1521  *  ixgbe_i2c_stop - Sets I2C stop condition
1522  *  @hw: pointer to hardware structure
1523  *
1524  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
1525  **/
1526 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1527 {
1528         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1529
1530         DEBUGFUNC("ixgbe_i2c_stop");
1531
1532         /* Stop condition must begin with data low and clock high */
1533         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1534         ixgbe_raise_i2c_clk(hw, &i2cctl);
1535
1536         /* Setup time for stop condition (4us) */
1537         usec_delay(IXGBE_I2C_T_SU_STO);
1538
1539         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1540
1541         /* bus free time between stop and start (4.7us)*/
1542         usec_delay(IXGBE_I2C_T_BUF);
1543 }
1544
1545 /**
1546  *  ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1547  *  @hw: pointer to hardware structure
1548  *  @data: data byte to clock in
1549  *
1550  *  Clocks in one byte data via I2C data/clock
1551  **/
1552 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1553 {
1554         s32 i;
1555         bool bit = 0;
1556
1557         DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1558
1559         for (i = 7; i >= 0; i--) {
1560                 ixgbe_clock_in_i2c_bit(hw, &bit);
1561                 *data |= bit << i;
1562         }
1563
1564         return IXGBE_SUCCESS;
1565 }
1566
1567 /**
1568  *  ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1569  *  @hw: pointer to hardware structure
1570  *  @data: data byte clocked out
1571  *
1572  *  Clocks out one byte data via I2C data/clock
1573  **/
1574 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1575 {
1576         s32 status = IXGBE_SUCCESS;
1577         s32 i;
1578         u32 i2cctl;
1579         bool bit = 0;
1580
1581         DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1582
1583         for (i = 7; i >= 0; i--) {
1584                 bit = (data >> i) & 0x1;
1585                 status = ixgbe_clock_out_i2c_bit(hw, bit);
1586
1587                 if (status != IXGBE_SUCCESS)
1588                         break;
1589         }
1590
1591         /* Release SDA line (set high) */
1592         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1593         i2cctl |= IXGBE_I2C_DATA_OUT;
1594         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1595         IXGBE_WRITE_FLUSH(hw);
1596
1597         return status;
1598 }
1599
1600 /**
1601  *  ixgbe_get_i2c_ack - Polls for I2C ACK
1602  *  @hw: pointer to hardware structure
1603  *
1604  *  Clocks in/out one bit via I2C data/clock
1605  **/
1606 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1607 {
1608         s32 status = IXGBE_SUCCESS;
1609         u32 i = 0;
1610         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1611         u32 timeout = 10;
1612         bool ack = 1;
1613
1614         DEBUGFUNC("ixgbe_get_i2c_ack");
1615
1616         ixgbe_raise_i2c_clk(hw, &i2cctl);
1617
1618
1619         /* Minimum high period of clock is 4us */
1620         usec_delay(IXGBE_I2C_T_HIGH);
1621
1622         /* Poll for ACK.  Note that ACK in I2C spec is
1623          * transition from 1 to 0 */
1624         for (i = 0; i < timeout; i++) {
1625                 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1626                 ack = ixgbe_get_i2c_data(&i2cctl);
1627
1628                 usec_delay(1);
1629                 if (ack == 0)
1630                         break;
1631         }
1632
1633         if (ack == 1) {
1634                 DEBUGOUT("I2C ack was not received.\n");
1635                 status = IXGBE_ERR_I2C;
1636         }
1637
1638         ixgbe_lower_i2c_clk(hw, &i2cctl);
1639
1640         /* Minimum low period of clock is 4.7 us */
1641         usec_delay(IXGBE_I2C_T_LOW);
1642
1643         return status;
1644 }
1645
1646 /**
1647  *  ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1648  *  @hw: pointer to hardware structure
1649  *  @data: read data value
1650  *
1651  *  Clocks in one bit via I2C data/clock
1652  **/
1653 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1654 {
1655         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1656
1657         DEBUGFUNC("ixgbe_clock_in_i2c_bit");
1658
1659         ixgbe_raise_i2c_clk(hw, &i2cctl);
1660
1661         /* Minimum high period of clock is 4us */
1662         usec_delay(IXGBE_I2C_T_HIGH);
1663
1664         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1665         *data = ixgbe_get_i2c_data(&i2cctl);
1666
1667         ixgbe_lower_i2c_clk(hw, &i2cctl);
1668
1669         /* Minimum low period of clock is 4.7 us */
1670         usec_delay(IXGBE_I2C_T_LOW);
1671
1672         return IXGBE_SUCCESS;
1673 }
1674
1675 /**
1676  *  ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1677  *  @hw: pointer to hardware structure
1678  *  @data: data value to write
1679  *
1680  *  Clocks out one bit via I2C data/clock
1681  **/
1682 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1683 {
1684         s32 status;
1685         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1686
1687         DEBUGFUNC("ixgbe_clock_out_i2c_bit");
1688
1689         status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1690         if (status == IXGBE_SUCCESS) {
1691                 ixgbe_raise_i2c_clk(hw, &i2cctl);
1692
1693                 /* Minimum high period of clock is 4us */
1694                 usec_delay(IXGBE_I2C_T_HIGH);
1695
1696                 ixgbe_lower_i2c_clk(hw, &i2cctl);
1697
1698                 /* Minimum low period of clock is 4.7 us.
1699                  * This also takes care of the data hold time.
1700                  */
1701                 usec_delay(IXGBE_I2C_T_LOW);
1702         } else {
1703                 status = IXGBE_ERR_I2C;
1704                 DEBUGOUT1("I2C data was not set to %X\n", data);
1705         }
1706
1707         return status;
1708 }
1709 /**
1710  *  ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1711  *  @hw: pointer to hardware structure
1712  *  @i2cctl: Current value of I2CCTL register
1713  *
1714  *  Raises the I2C clock line '0'->'1'
1715  **/
1716 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1717 {
1718         DEBUGFUNC("ixgbe_raise_i2c_clk");
1719
1720         *i2cctl |= IXGBE_I2C_CLK_OUT;
1721
1722         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1723         IXGBE_WRITE_FLUSH(hw);
1724
1725         /* SCL rise time (1000ns) */
1726         usec_delay(IXGBE_I2C_T_RISE);
1727 }
1728
1729 /**
1730  *  ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1731  *  @hw: pointer to hardware structure
1732  *  @i2cctl: Current value of I2CCTL register
1733  *
1734  *  Lowers the I2C clock line '1'->'0'
1735  **/
1736 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1737 {
1738
1739         DEBUGFUNC("ixgbe_lower_i2c_clk");
1740
1741         *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1742
1743         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1744         IXGBE_WRITE_FLUSH(hw);
1745
1746         /* SCL fall time (300ns) */
1747         usec_delay(IXGBE_I2C_T_FALL);
1748 }
1749
1750 /**
1751  *  ixgbe_set_i2c_data - Sets the I2C data bit
1752  *  @hw: pointer to hardware structure
1753  *  @i2cctl: Current value of I2CCTL register
1754  *  @data: I2C data value (0 or 1) to set
1755  *
1756  *  Sets the I2C data bit
1757  **/
1758 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1759 {
1760         s32 status = IXGBE_SUCCESS;
1761
1762         DEBUGFUNC("ixgbe_set_i2c_data");
1763
1764         if (data)
1765                 *i2cctl |= IXGBE_I2C_DATA_OUT;
1766         else
1767                 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1768
1769         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1770         IXGBE_WRITE_FLUSH(hw);
1771
1772         /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1773         usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1774
1775         /* Verify data was set correctly */
1776         *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1777         if (data != ixgbe_get_i2c_data(i2cctl)) {
1778                 status = IXGBE_ERR_I2C;
1779                 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1780         }
1781
1782         return status;
1783 }
1784
1785 /**
1786  *  ixgbe_get_i2c_data - Reads the I2C SDA data bit
1787  *  @hw: pointer to hardware structure
1788  *  @i2cctl: Current value of I2CCTL register
1789  *
1790  *  Returns the I2C data bit value
1791  **/
1792 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1793 {
1794         bool data;
1795
1796         DEBUGFUNC("ixgbe_get_i2c_data");
1797
1798         if (*i2cctl & IXGBE_I2C_DATA_IN)
1799                 data = 1;
1800         else
1801                 data = 0;
1802
1803         return data;
1804 }
1805
1806 /**
1807  *  ixgbe_i2c_bus_clear - Clears the I2C bus
1808  *  @hw: pointer to hardware structure
1809  *
1810  *  Clears the I2C bus by sending nine clock pulses.
1811  *  Used when data line is stuck low.
1812  **/
1813 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1814 {
1815         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1816         u32 i;
1817
1818         DEBUGFUNC("ixgbe_i2c_bus_clear");
1819
1820         ixgbe_i2c_start(hw);
1821
1822         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1823
1824         for (i = 0; i < 9; i++) {
1825                 ixgbe_raise_i2c_clk(hw, &i2cctl);
1826
1827                 /* Min high period of clock is 4us */
1828                 usec_delay(IXGBE_I2C_T_HIGH);
1829
1830                 ixgbe_lower_i2c_clk(hw, &i2cctl);
1831
1832                 /* Min low period of clock is 4.7us*/
1833                 usec_delay(IXGBE_I2C_T_LOW);
1834         }
1835
1836         ixgbe_i2c_start(hw);
1837
1838         /* Put the i2c bus back to default state */
1839         ixgbe_i2c_stop(hw);
1840 }
1841
1842 /**
1843  *  ixgbe_tn_check_overtemp - Checks if an overtemp occured.
1844  *  @hw: pointer to hardware structure
1845  *
1846  *  Checks if the LASI temp alarm status was triggered due to overtemp
1847  **/
1848 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1849 {
1850         s32 status = IXGBE_SUCCESS;
1851         u16 phy_data = 0;
1852
1853         DEBUGFUNC("ixgbe_tn_check_overtemp");
1854
1855         if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1856                 goto out;
1857
1858         /* Check that the LASI temp alarm status was triggered */
1859         hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1860                              IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
1861
1862         if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1863                 goto out;
1864
1865         status = IXGBE_ERR_OVERTEMP;
1866 out:
1867         return status;
1868 }