GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_phy.c
1 /*******************************************************************************
2
3   Intel 10 Gigabit PCI Express Linux driver
4   Copyright(c) 1999 - 2014 Intel Corporation.
5
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, write to the Free Software Foundation, Inc.,
17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19   The full GNU General Public License is included in this distribution in
20   the file called "COPYING".
21
22   Contact Information:
23   Linux NICS <linux.nics@intel.com>
24   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27 *******************************************************************************/
28
29 #include <linux/pci.h>
30 #include <linux/delay.h>
31 #include <linux/sched.h>
32
33 #include "ixgbe.h"
34 #include "ixgbe_phy.h"
35
36 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
37 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
38 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
39 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
40 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
42 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
43 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
44 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
45 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
46 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw);
48 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id);
49 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw);
50 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw);
51
52 /**
53  *  ixgbe_out_i2c_byte_ack - Send I2C byte with ack
54  *  @hw: pointer to the hardware structure
55  *  @byte: byte to send
56  *
57  *  Returns an error code on error.
58  **/
59 static s32 ixgbe_out_i2c_byte_ack(struct ixgbe_hw *hw, u8 byte)
60 {
61         s32 status;
62
63         status = ixgbe_clock_out_i2c_byte(hw, byte);
64         if (status)
65                 return status;
66         return ixgbe_get_i2c_ack(hw);
67 }
68
69 /**
70  *  ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack
71  *  @hw: pointer to the hardware structure
72  *  @byte: pointer to a u8 to receive the byte
73  *
74  *  Returns an error code on error.
75  **/
76 static s32 ixgbe_in_i2c_byte_ack(struct ixgbe_hw *hw, u8 *byte)
77 {
78         s32 status;
79
80         status = ixgbe_clock_in_i2c_byte(hw, byte);
81         if (status)
82                 return status;
83         /* ACK */
84         return ixgbe_clock_out_i2c_bit(hw, false);
85 }
86
87 /**
88  *  ixgbe_ones_comp_byte_add - Perform one's complement addition
89  *  @add1: addend 1
90  *  @add2: addend 2
91  *
92  *  Returns one's complement 8-bit sum.
93  **/
94 static u8 ixgbe_ones_comp_byte_add(u8 add1, u8 add2)
95 {
96         u16 sum = add1 + add2;
97
98         sum = (sum & 0xFF) + (sum >> 8);
99         return sum & 0xFF;
100 }
101
102 /**
103  *  ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation
104  *  @hw: pointer to the hardware structure
105  *  @addr: I2C bus address to read from
106  *  @reg: I2C device register to read from
107  *  @val: pointer to location to receive read value
108  *  @lock: true if to take and release semaphore
109  *
110  *  Returns an error code on error.
111  */
112 s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
113                                         u16 reg, u16 *val, bool lock)
114 {
115         u32 swfw_mask = hw->phy.phy_semaphore_mask;
116         int max_retry = 3;
117         int retry = 0;
118         u8 csum_byte;
119         u8 high_bits;
120         u8 low_bits;
121         u8 reg_high;
122         u8 csum;
123
124         reg_high = ((reg >> 7) & 0xFE) | 1;     /* Indicate read combined */
125         csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
126         csum = ~csum;
127         do {
128                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
129                         return IXGBE_ERR_SWFW_SYNC;
130                 ixgbe_i2c_start(hw);
131                 /* Device Address and write indication */
132                 if (ixgbe_out_i2c_byte_ack(hw, addr))
133                         goto fail;
134                 /* Write bits 14:8 */
135                 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
136                         goto fail;
137                 /* Write bits 7:0 */
138                 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
139                         goto fail;
140                 /* Write csum */
141                 if (ixgbe_out_i2c_byte_ack(hw, csum))
142                         goto fail;
143                 /* Re-start condition */
144                 ixgbe_i2c_start(hw);
145                 /* Device Address and read indication */
146                 if (ixgbe_out_i2c_byte_ack(hw, addr | 1))
147                         goto fail;
148                 /* Get upper bits */
149                 if (ixgbe_in_i2c_byte_ack(hw, &high_bits))
150                         goto fail;
151                 /* Get low bits */
152                 if (ixgbe_in_i2c_byte_ack(hw, &low_bits))
153                         goto fail;
154                 /* Get csum */
155                 if (ixgbe_clock_in_i2c_byte(hw, &csum_byte))
156                         goto fail;
157                 /* NACK */
158                 if (ixgbe_clock_out_i2c_bit(hw, false))
159                         goto fail;
160                 ixgbe_i2c_stop(hw);
161                 if (lock)
162                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
163                 *val = (high_bits << 8) | low_bits;
164                 return 0;
165
166 fail:
167                 ixgbe_i2c_bus_clear(hw);
168                 if (lock)
169                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
170                 retry++;
171                 if (retry < max_retry)
172                         hw_dbg(hw, "I2C byte read combined error - Retry.\n");
173                 else
174                         hw_dbg(hw, "I2C byte read combined error.\n");
175         } while (retry < max_retry);
176
177         return IXGBE_ERR_I2C;
178 }
179
180 /**
181  *  ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation
182  *  @hw: pointer to the hardware structure
183  *  @addr: I2C bus address to write to
184  *  @reg: I2C device register to write to
185  *  @val: value to write
186  *  @lock: true if to take and release semaphore
187  *
188  *  Returns an error code on error.
189  */
190 s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
191                                          u16 reg, u16 val, bool lock)
192 {
193         u32 swfw_mask = hw->phy.phy_semaphore_mask;
194         int max_retry = 1;
195         int retry = 0;
196         u8 reg_high;
197         u8 csum;
198
199         reg_high = (reg >> 7) & 0xFE;   /* Indicate write combined */
200         csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
201         csum = ixgbe_ones_comp_byte_add(csum, val >> 8);
202         csum = ixgbe_ones_comp_byte_add(csum, val & 0xFF);
203         csum = ~csum;
204         do {
205                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
206                         return IXGBE_ERR_SWFW_SYNC;
207                 ixgbe_i2c_start(hw);
208                 /* Device Address and write indication */
209                 if (ixgbe_out_i2c_byte_ack(hw, addr))
210                         goto fail;
211                 /* Write bits 14:8 */
212                 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
213                         goto fail;
214                 /* Write bits 7:0 */
215                 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
216                         goto fail;
217                 /* Write data 15:8 */
218                 if (ixgbe_out_i2c_byte_ack(hw, val >> 8))
219                         goto fail;
220                 /* Write data 7:0 */
221                 if (ixgbe_out_i2c_byte_ack(hw, val & 0xFF))
222                         goto fail;
223                 /* Write csum */
224                 if (ixgbe_out_i2c_byte_ack(hw, csum))
225                         goto fail;
226                 ixgbe_i2c_stop(hw);
227                 if (lock)
228                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
229                 return 0;
230
231 fail:
232                 ixgbe_i2c_bus_clear(hw);
233                 if (lock)
234                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
235                 retry++;
236                 if (retry < max_retry)
237                         hw_dbg(hw, "I2C byte write combined error - Retry.\n");
238                 else
239                         hw_dbg(hw, "I2C byte write combined error.\n");
240         } while (retry < max_retry);
241
242         return IXGBE_ERR_I2C;
243 }
244
245 /**
246  *  ixgbe_probe_phy - Probe a single address for a PHY
247  *  @hw: pointer to hardware structure
248  *  @phy_addr: PHY address to probe
249  *
250  *  Returns true if PHY found
251  **/
252 static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr)
253 {
254         u16 ext_ability = 0;
255
256         hw->phy.mdio.prtad = phy_addr;
257         if (mdio45_probe(&hw->phy.mdio, phy_addr) != 0)
258                 return false;
259
260         if (ixgbe_get_phy_id(hw))
261                 return false;
262
263         hw->phy.type = ixgbe_get_phy_type_from_id(hw->phy.id);
264
265         if (hw->phy.type == ixgbe_phy_unknown) {
266                 hw->phy.ops.read_reg(hw,
267                                      MDIO_PMA_EXTABLE,
268                                      MDIO_MMD_PMAPMD,
269                                      &ext_ability);
270                 if (ext_ability &
271                     (MDIO_PMA_EXTABLE_10GBT |
272                      MDIO_PMA_EXTABLE_1000BT))
273                         hw->phy.type = ixgbe_phy_cu_unknown;
274                 else
275                         hw->phy.type = ixgbe_phy_generic;
276         }
277
278         return true;
279 }
280
281 /**
282  *  ixgbe_identify_phy_generic - Get physical layer module
283  *  @hw: pointer to hardware structure
284  *
285  *  Determines the physical layer module found on the current adapter.
286  **/
287 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
288 {
289         u32 phy_addr;
290         u32 status = IXGBE_ERR_PHY_ADDR_INVALID;
291
292         if (!hw->phy.phy_semaphore_mask) {
293                 if (hw->bus.lan_id)
294                         hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM;
295                 else
296                         hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM;
297         }
298
299         if (hw->phy.type != ixgbe_phy_unknown)
300                 return 0;
301
302         if (hw->phy.nw_mng_if_sel) {
303                 phy_addr = (hw->phy.nw_mng_if_sel &
304                             IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD) >>
305                            IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT;
306                 if (ixgbe_probe_phy(hw, phy_addr))
307                         return 0;
308                 else
309                         return IXGBE_ERR_PHY_ADDR_INVALID;
310         }
311
312         for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
313                 if (ixgbe_probe_phy(hw, phy_addr)) {
314                         status = 0;
315                         break;
316                 }
317         }
318
319         /* Certain media types do not have a phy so an address will not
320          * be found and the code will take this path.  Caller has to
321          * decide if it is an error or not.
322          */
323         if (status)
324                 hw->phy.mdio.prtad = MDIO_PRTAD_NONE;
325
326         return status;
327 }
328
329 /**
330  * ixgbe_check_reset_blocked - check status of MNG FW veto bit
331  * @hw: pointer to the hardware structure
332  *
333  * This function checks the MMNGC.MNG_VETO bit to see if there are
334  * any constraints on link from manageability.  For MAC's that don't
335  * have this bit just return false since the link can not be blocked
336  * via this method.
337  **/
338 bool ixgbe_check_reset_blocked(struct ixgbe_hw *hw)
339 {
340         u32 mmngc;
341
342         /* If we don't have this bit, it can't be blocking */
343         if (hw->mac.type == ixgbe_mac_82598EB)
344                 return false;
345
346         mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC);
347         if (mmngc & IXGBE_MMNGC_MNG_VETO) {
348                 hw_dbg(hw, "MNG_VETO bit detected.\n");
349                 return true;
350         }
351
352         return false;
353 }
354
355 /**
356  *  ixgbe_get_phy_id - Get the phy type
357  *  @hw: pointer to hardware structure
358  *
359  **/
360 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
361 {
362         s32 status;
363         u16 phy_id_high = 0;
364         u16 phy_id_low = 0;
365
366         status = hw->phy.ops.read_reg(hw, MDIO_DEVID1, MDIO_MMD_PMAPMD,
367                                       &phy_id_high);
368
369         if (!status) {
370                 hw->phy.id = (u32)(phy_id_high << 16);
371                 status = hw->phy.ops.read_reg(hw, MDIO_DEVID2, MDIO_MMD_PMAPMD,
372                                               &phy_id_low);
373                 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
374                 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
375         }
376         return status;
377 }
378
379 /**
380  *  ixgbe_get_phy_type_from_id - Get the phy type
381  *  @hw: pointer to hardware structure
382  *
383  **/
384 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
385 {
386         enum ixgbe_phy_type phy_type;
387
388         switch (phy_id) {
389         case TN1010_PHY_ID:
390                 phy_type = ixgbe_phy_tn;
391                 break;
392         case X550_PHY_ID2:
393         case X550_PHY_ID3:
394         case X540_PHY_ID:
395                 phy_type = ixgbe_phy_aq;
396                 break;
397         case QT2022_PHY_ID:
398                 phy_type = ixgbe_phy_qt;
399                 break;
400         case ATH_PHY_ID:
401                 phy_type = ixgbe_phy_nl;
402                 break;
403         case X557_PHY_ID:
404         case X557_PHY_ID2:
405                 phy_type = ixgbe_phy_x550em_ext_t;
406                 break;
407         default:
408                 phy_type = ixgbe_phy_unknown;
409                 break;
410         }
411
412         return phy_type;
413 }
414
415 /**
416  *  ixgbe_reset_phy_generic - Performs a PHY reset
417  *  @hw: pointer to hardware structure
418  **/
419 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
420 {
421         u32 i;
422         u16 ctrl = 0;
423         s32 status = 0;
424
425         if (hw->phy.type == ixgbe_phy_unknown)
426                 status = ixgbe_identify_phy_generic(hw);
427
428         if (status != 0 || hw->phy.type == ixgbe_phy_none)
429                 return status;
430
431         /* Don't reset PHY if it's shut down due to overtemp. */
432         if (!hw->phy.reset_if_overtemp &&
433             (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
434                 return 0;
435
436         /* Blocked by MNG FW so bail */
437         if (ixgbe_check_reset_blocked(hw))
438                 return 0;
439
440         /*
441          * Perform soft PHY reset to the PHY_XS.
442          * This will cause a soft reset to the PHY
443          */
444         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
445                               MDIO_MMD_PHYXS,
446                               MDIO_CTRL1_RESET);
447
448         /*
449          * Poll for reset bit to self-clear indicating reset is complete.
450          * Some PHYs could take up to 3 seconds to complete and need about
451          * 1.7 usec delay after the reset is complete.
452          */
453         for (i = 0; i < 30; i++) {
454                 msleep(100);
455                 if (hw->phy.type == ixgbe_phy_x550em_ext_t) {
456                         status = hw->phy.ops.read_reg(hw,
457                                                   IXGBE_MDIO_TX_VENDOR_ALARMS_3,
458                                                   MDIO_MMD_PMAPMD, &ctrl);
459                         if (status)
460                                 return status;
461
462                         if (ctrl & IXGBE_MDIO_TX_VENDOR_ALARMS_3_RST_MASK) {
463                                 udelay(2);
464                                 break;
465                         }
466                 } else {
467                         status = hw->phy.ops.read_reg(hw, MDIO_CTRL1,
468                                                       MDIO_MMD_PHYXS, &ctrl);
469                         if (status)
470                                 return status;
471
472                         if (!(ctrl & MDIO_CTRL1_RESET)) {
473                                 udelay(2);
474                                 break;
475                         }
476                 }
477         }
478
479         if (ctrl & MDIO_CTRL1_RESET) {
480                 hw_dbg(hw, "PHY reset polling failed to complete.\n");
481                 return IXGBE_ERR_RESET_FAILED;
482         }
483
484         return 0;
485 }
486
487 /**
488  *  ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
489  *  the SWFW lock
490  *  @hw: pointer to hardware structure
491  *  @reg_addr: 32 bit address of PHY register to read
492  *  @phy_data: Pointer to read data from PHY register
493  **/
494 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
495                        u16 *phy_data)
496 {
497         u32 i, data, command;
498
499         /* Setup and write the address cycle command */
500         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
501                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
502                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
503                    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
504
505         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
506
507         /* Check every 10 usec to see if the address cycle completed.
508          * The MDI Command bit will clear when the operation is
509          * complete
510          */
511         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
512                 udelay(10);
513
514                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
515                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
516                                 break;
517         }
518
519
520         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
521                 hw_dbg(hw, "PHY address command did not complete.\n");
522                 return IXGBE_ERR_PHY;
523         }
524
525         /* Address cycle complete, setup and write the read
526          * command
527          */
528         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
529                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
530                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
531                    (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
532
533         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
534
535         /* Check every 10 usec to see if the address cycle
536          * completed. The MDI Command bit will clear when the
537          * operation is complete
538          */
539         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
540                 udelay(10);
541
542                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
543                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
544                         break;
545         }
546
547         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
548                 hw_dbg(hw, "PHY read command didn't complete\n");
549                 return IXGBE_ERR_PHY;
550         }
551
552         /* Read operation is complete.  Get the data
553          * from MSRWD
554          */
555         data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
556         data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
557         *phy_data = (u16)(data);
558
559         return 0;
560 }
561
562 /**
563  *  ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
564  *  using the SWFW lock - this function is needed in most cases
565  *  @hw: pointer to hardware structure
566  *  @reg_addr: 32 bit address of PHY register to read
567  *  @phy_data: Pointer to read data from PHY register
568  **/
569 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
570                                u32 device_type, u16 *phy_data)
571 {
572         s32 status;
573         u32 gssr = hw->phy.phy_semaphore_mask;
574
575         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
576                 status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
577                                                 phy_data);
578                 hw->mac.ops.release_swfw_sync(hw, gssr);
579         } else {
580                 return IXGBE_ERR_SWFW_SYNC;
581         }
582
583         return status;
584 }
585
586 /**
587  *  ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register
588  *  without SWFW lock
589  *  @hw: pointer to hardware structure
590  *  @reg_addr: 32 bit PHY register to write
591  *  @device_type: 5 bit device type
592  *  @phy_data: Data to write to the PHY register
593  **/
594 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr,
595                                 u32 device_type, u16 phy_data)
596 {
597         u32 i, command;
598
599         /* Put the data in the MDI single read and write data register*/
600         IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
601
602         /* Setup and write the address cycle command */
603         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
604                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
605                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
606                    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
607
608         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
609
610         /*
611          * Check every 10 usec to see if the address cycle completed.
612          * The MDI Command bit will clear when the operation is
613          * complete
614          */
615         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
616                 udelay(10);
617
618                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
619                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
620                         break;
621         }
622
623         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
624                 hw_dbg(hw, "PHY address cmd didn't complete\n");
625                 return IXGBE_ERR_PHY;
626         }
627
628         /*
629          * Address cycle complete, setup and write the write
630          * command
631          */
632         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
633                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
634                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
635                    (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
636
637         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
638
639         /* Check every 10 usec to see if the address cycle
640          * completed. The MDI Command bit will clear when the
641          * operation is complete
642          */
643         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
644                 udelay(10);
645
646                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
647                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
648                         break;
649         }
650
651         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
652                 hw_dbg(hw, "PHY write cmd didn't complete\n");
653                 return IXGBE_ERR_PHY;
654         }
655
656         return 0;
657 }
658
659 /**
660  *  ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
661  *  using SWFW lock- this function is needed in most cases
662  *  @hw: pointer to hardware structure
663  *  @reg_addr: 32 bit PHY register to write
664  *  @device_type: 5 bit device type
665  *  @phy_data: Data to write to the PHY register
666  **/
667 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
668                                 u32 device_type, u16 phy_data)
669 {
670         s32 status;
671         u32 gssr = hw->phy.phy_semaphore_mask;
672
673         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
674                 status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type,
675                                                  phy_data);
676                 hw->mac.ops.release_swfw_sync(hw, gssr);
677         } else {
678                 return IXGBE_ERR_SWFW_SYNC;
679         }
680
681         return status;
682 }
683
684 /**
685  *  ixgbe_setup_phy_link_generic - Set and restart autoneg
686  *  @hw: pointer to hardware structure
687  *
688  *  Restart autonegotiation and PHY and waits for completion.
689  **/
690 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
691 {
692         s32 status = 0;
693         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
694         bool autoneg = false;
695         ixgbe_link_speed speed;
696
697         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
698
699         /* Set or unset auto-negotiation 10G advertisement */
700         hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, &autoneg_reg);
701
702         autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
703         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) &&
704             (speed & IXGBE_LINK_SPEED_10GB_FULL))
705                 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
706
707         hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, autoneg_reg);
708
709         hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
710                              MDIO_MMD_AN, &autoneg_reg);
711
712         if (hw->mac.type == ixgbe_mac_X550) {
713                 /* Set or unset auto-negotiation 5G advertisement */
714                 autoneg_reg &= ~IXGBE_MII_5GBASE_T_ADVERTISE;
715                 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL) &&
716                     (speed & IXGBE_LINK_SPEED_5GB_FULL))
717                         autoneg_reg |= IXGBE_MII_5GBASE_T_ADVERTISE;
718
719                 /* Set or unset auto-negotiation 2.5G advertisement */
720                 autoneg_reg &= ~IXGBE_MII_2_5GBASE_T_ADVERTISE;
721                 if ((hw->phy.autoneg_advertised &
722                      IXGBE_LINK_SPEED_2_5GB_FULL) &&
723                     (speed & IXGBE_LINK_SPEED_2_5GB_FULL))
724                         autoneg_reg |= IXGBE_MII_2_5GBASE_T_ADVERTISE;
725         }
726
727         /* Set or unset auto-negotiation 1G advertisement */
728         autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
729         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) &&
730             (speed & IXGBE_LINK_SPEED_1GB_FULL))
731                 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
732
733         hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
734                               MDIO_MMD_AN, autoneg_reg);
735
736         /* Set or unset auto-negotiation 100M advertisement */
737         hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, &autoneg_reg);
738
739         autoneg_reg &= ~(ADVERTISE_100FULL | ADVERTISE_100HALF);
740         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) &&
741             (speed & IXGBE_LINK_SPEED_100_FULL))
742                 autoneg_reg |= ADVERTISE_100FULL;
743
744         hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, autoneg_reg);
745
746         /* Blocked by MNG FW so don't reset PHY */
747         if (ixgbe_check_reset_blocked(hw))
748                 return 0;
749
750         /* Restart PHY autonegotiation and wait for completion */
751         hw->phy.ops.read_reg(hw, MDIO_CTRL1,
752                              MDIO_MMD_AN, &autoneg_reg);
753
754         autoneg_reg |= MDIO_AN_CTRL1_RESTART;
755
756         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
757                               MDIO_MMD_AN, autoneg_reg);
758
759         return status;
760 }
761
762 /**
763  *  ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
764  *  @hw: pointer to hardware structure
765  *  @speed: new link speed
766  **/
767 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
768                                        ixgbe_link_speed speed,
769                                        bool autoneg_wait_to_complete)
770 {
771         /* Clear autoneg_advertised and set new values based on input link
772          * speed.
773          */
774         hw->phy.autoneg_advertised = 0;
775
776         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
777                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
778
779         if (speed & IXGBE_LINK_SPEED_5GB_FULL)
780                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_5GB_FULL;
781
782         if (speed & IXGBE_LINK_SPEED_2_5GB_FULL)
783                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
784
785         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
786                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
787
788         if (speed & IXGBE_LINK_SPEED_100_FULL)
789                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
790
791         if (speed & IXGBE_LINK_SPEED_10_FULL)
792                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10_FULL;
793
794         /* Setup link based on the new speed settings */
795         if (hw->phy.ops.setup_link)
796                 hw->phy.ops.setup_link(hw);
797
798         return 0;
799 }
800
801 /**
802  * ixgbe_get_copper_speeds_supported - Get copper link speed from phy
803  * @hw: pointer to hardware structure
804  *
805  * Determines the supported link capabilities by reading the PHY auto
806  * negotiation register.
807  */
808 static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw)
809 {
810         u16 speed_ability;
811         s32 status;
812
813         status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
814                                       &speed_ability);
815         if (status)
816                 return status;
817
818         if (speed_ability & MDIO_SPEED_10G)
819                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL;
820         if (speed_ability & MDIO_PMA_SPEED_1000)
821                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL;
822         if (speed_ability & MDIO_PMA_SPEED_100)
823                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL;
824
825         switch (hw->mac.type) {
826         case ixgbe_mac_X550:
827                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL;
828                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL;
829                 break;
830         case ixgbe_mac_X550EM_x:
831         case ixgbe_mac_x550em_a:
832                 hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL;
833                 break;
834         default:
835                 break;
836         }
837
838         return 0;
839 }
840
841 /**
842  * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
843  * @hw: pointer to hardware structure
844  * @speed: pointer to link speed
845  * @autoneg: boolean auto-negotiation value
846  */
847 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
848                                                ixgbe_link_speed *speed,
849                                                bool *autoneg)
850 {
851         s32 status = 0;
852
853         *autoneg = true;
854         if (!hw->phy.speeds_supported)
855                 status = ixgbe_get_copper_speeds_supported(hw);
856
857         *speed = hw->phy.speeds_supported;
858         return status;
859 }
860
861 /**
862  *  ixgbe_check_phy_link_tnx - Determine link and speed status
863  *  @hw: pointer to hardware structure
864  *
865  *  Reads the VS1 register to determine if link is up and the current speed for
866  *  the PHY.
867  **/
868 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
869                              bool *link_up)
870 {
871         s32 status;
872         u32 time_out;
873         u32 max_time_out = 10;
874         u16 phy_link = 0;
875         u16 phy_speed = 0;
876         u16 phy_data = 0;
877
878         /* Initialize speed and link to default case */
879         *link_up = false;
880         *speed = IXGBE_LINK_SPEED_10GB_FULL;
881
882         /*
883          * Check current speed and link status of the PHY register.
884          * This is a vendor specific register and may have to
885          * be changed for other copper PHYs.
886          */
887         for (time_out = 0; time_out < max_time_out; time_out++) {
888                 udelay(10);
889                 status = hw->phy.ops.read_reg(hw,
890                                               MDIO_STAT1,
891                                               MDIO_MMD_VEND1,
892                                               &phy_data);
893                 phy_link = phy_data &
894                             IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
895                 phy_speed = phy_data &
896                             IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
897                 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
898                         *link_up = true;
899                         if (phy_speed ==
900                             IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
901                                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
902                         break;
903                 }
904         }
905
906         return status;
907 }
908
909 /**
910  *      ixgbe_setup_phy_link_tnx - Set and restart autoneg
911  *      @hw: pointer to hardware structure
912  *
913  *      Restart autonegotiation and PHY and waits for completion.
914  *      This function always returns success, this is nessary since
915  *      it is called via a function pointer that could call other
916  *      functions that could return an error.
917  **/
918 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
919 {
920         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
921         bool autoneg = false;
922         ixgbe_link_speed speed;
923
924         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
925
926         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
927                 /* Set or unset auto-negotiation 10G advertisement */
928                 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
929                                      MDIO_MMD_AN,
930                                      &autoneg_reg);
931
932                 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
933                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
934                         autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
935
936                 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
937                                       MDIO_MMD_AN,
938                                       autoneg_reg);
939         }
940
941         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
942                 /* Set or unset auto-negotiation 1G advertisement */
943                 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
944                                      MDIO_MMD_AN,
945                                      &autoneg_reg);
946
947                 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
948                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
949                         autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
950
951                 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
952                                       MDIO_MMD_AN,
953                                       autoneg_reg);
954         }
955
956         if (speed & IXGBE_LINK_SPEED_100_FULL) {
957                 /* Set or unset auto-negotiation 100M advertisement */
958                 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
959                                      MDIO_MMD_AN,
960                                      &autoneg_reg);
961
962                 autoneg_reg &= ~(ADVERTISE_100FULL |
963                                  ADVERTISE_100HALF);
964                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
965                         autoneg_reg |= ADVERTISE_100FULL;
966
967                 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
968                                       MDIO_MMD_AN,
969                                       autoneg_reg);
970         }
971
972         /* Blocked by MNG FW so don't reset PHY */
973         if (ixgbe_check_reset_blocked(hw))
974                 return 0;
975
976         /* Restart PHY autonegotiation and wait for completion */
977         hw->phy.ops.read_reg(hw, MDIO_CTRL1,
978                              MDIO_MMD_AN, &autoneg_reg);
979
980         autoneg_reg |= MDIO_AN_CTRL1_RESTART;
981
982         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
983                               MDIO_MMD_AN, autoneg_reg);
984         return 0;
985 }
986
987 /**
988  *  ixgbe_reset_phy_nl - Performs a PHY reset
989  *  @hw: pointer to hardware structure
990  **/
991 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
992 {
993         u16 phy_offset, control, eword, edata, block_crc;
994         bool end_data = false;
995         u16 list_offset, data_offset;
996         u16 phy_data = 0;
997         s32 ret_val;
998         u32 i;
999
1000         /* Blocked by MNG FW so bail */
1001         if (ixgbe_check_reset_blocked(hw))
1002                 return 0;
1003
1004         hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &phy_data);
1005
1006         /* reset the PHY and poll for completion */
1007         hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1008                               (phy_data | MDIO_CTRL1_RESET));
1009
1010         for (i = 0; i < 100; i++) {
1011                 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1012                                      &phy_data);
1013                 if ((phy_data & MDIO_CTRL1_RESET) == 0)
1014                         break;
1015                 usleep_range(10000, 20000);
1016         }
1017
1018         if ((phy_data & MDIO_CTRL1_RESET) != 0) {
1019                 hw_dbg(hw, "PHY reset did not complete.\n");
1020                 return IXGBE_ERR_PHY;
1021         }
1022
1023         /* Get init offsets */
1024         ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
1025                                                       &data_offset);
1026         if (ret_val)
1027                 return ret_val;
1028
1029         ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
1030         data_offset++;
1031         while (!end_data) {
1032                 /*
1033                  * Read control word from PHY init contents offset
1034                  */
1035                 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
1036                 if (ret_val)
1037                         goto err_eeprom;
1038                 control = (eword & IXGBE_CONTROL_MASK_NL) >>
1039                            IXGBE_CONTROL_SHIFT_NL;
1040                 edata = eword & IXGBE_DATA_MASK_NL;
1041                 switch (control) {
1042                 case IXGBE_DELAY_NL:
1043                         data_offset++;
1044                         hw_dbg(hw, "DELAY: %d MS\n", edata);
1045                         usleep_range(edata * 1000, edata * 2000);
1046                         break;
1047                 case IXGBE_DATA_NL:
1048                         hw_dbg(hw, "DATA:\n");
1049                         data_offset++;
1050                         ret_val = hw->eeprom.ops.read(hw, data_offset++,
1051                                                       &phy_offset);
1052                         if (ret_val)
1053                                 goto err_eeprom;
1054                         for (i = 0; i < edata; i++) {
1055                                 ret_val = hw->eeprom.ops.read(hw, data_offset,
1056                                                               &eword);
1057                                 if (ret_val)
1058                                         goto err_eeprom;
1059                                 hw->phy.ops.write_reg(hw, phy_offset,
1060                                                       MDIO_MMD_PMAPMD, eword);
1061                                 hw_dbg(hw, "Wrote %4.4x to %4.4x\n", eword,
1062                                        phy_offset);
1063                                 data_offset++;
1064                                 phy_offset++;
1065                         }
1066                         break;
1067                 case IXGBE_CONTROL_NL:
1068                         data_offset++;
1069                         hw_dbg(hw, "CONTROL:\n");
1070                         if (edata == IXGBE_CONTROL_EOL_NL) {
1071                                 hw_dbg(hw, "EOL\n");
1072                                 end_data = true;
1073                         } else if (edata == IXGBE_CONTROL_SOL_NL) {
1074                                 hw_dbg(hw, "SOL\n");
1075                         } else {
1076                                 hw_dbg(hw, "Bad control value\n");
1077                                 return IXGBE_ERR_PHY;
1078                         }
1079                         break;
1080                 default:
1081                         hw_dbg(hw, "Bad control type\n");
1082                         return IXGBE_ERR_PHY;
1083                 }
1084         }
1085
1086         return ret_val;
1087
1088 err_eeprom:
1089         hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
1090         return IXGBE_ERR_PHY;
1091 }
1092
1093 /**
1094  *  ixgbe_identify_module_generic - Identifies module type
1095  *  @hw: pointer to hardware structure
1096  *
1097  *  Determines HW type and calls appropriate function.
1098  **/
1099 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
1100 {
1101         switch (hw->mac.ops.get_media_type(hw)) {
1102         case ixgbe_media_type_fiber:
1103                 return ixgbe_identify_sfp_module_generic(hw);
1104         case ixgbe_media_type_fiber_qsfp:
1105                 return ixgbe_identify_qsfp_module_generic(hw);
1106         default:
1107                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1108                 return IXGBE_ERR_SFP_NOT_PRESENT;
1109         }
1110
1111         return IXGBE_ERR_SFP_NOT_PRESENT;
1112 }
1113
1114 /**
1115  *  ixgbe_identify_sfp_module_generic - Identifies SFP modules
1116  *  @hw: pointer to hardware structure
1117  *
1118  *  Searches for and identifies the SFP module and assigns appropriate PHY type.
1119  **/
1120 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
1121 {
1122         struct ixgbe_adapter *adapter = hw->back;
1123         s32 status;
1124         u32 vendor_oui = 0;
1125         enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1126         u8 identifier = 0;
1127         u8 comp_codes_1g = 0;
1128         u8 comp_codes_10g = 0;
1129         u8 oui_bytes[3] = {0, 0, 0};
1130         u8 cable_tech = 0;
1131         u8 cable_spec = 0;
1132         u16 enforce_sfp = 0;
1133
1134         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
1135                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1136                 return IXGBE_ERR_SFP_NOT_PRESENT;
1137         }
1138
1139         /* LAN ID is needed for sfp_type determination */
1140         hw->mac.ops.set_lan_id(hw);
1141
1142         status = hw->phy.ops.read_i2c_eeprom(hw,
1143                                              IXGBE_SFF_IDENTIFIER,
1144                                              &identifier);
1145
1146         if (status)
1147                 goto err_read_i2c_eeprom;
1148
1149         if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
1150                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1151                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1152         }
1153         status = hw->phy.ops.read_i2c_eeprom(hw,
1154                                              IXGBE_SFF_1GBE_COMP_CODES,
1155                                              &comp_codes_1g);
1156
1157         if (status)
1158                 goto err_read_i2c_eeprom;
1159
1160         status = hw->phy.ops.read_i2c_eeprom(hw,
1161                                              IXGBE_SFF_10GBE_COMP_CODES,
1162                                              &comp_codes_10g);
1163
1164         if (status)
1165                 goto err_read_i2c_eeprom;
1166         status = hw->phy.ops.read_i2c_eeprom(hw,
1167                                              IXGBE_SFF_CABLE_TECHNOLOGY,
1168                                              &cable_tech);
1169
1170         if (status)
1171                 goto err_read_i2c_eeprom;
1172
1173          /* ID Module
1174           * =========
1175           * 0   SFP_DA_CU
1176           * 1   SFP_SR
1177           * 2   SFP_LR
1178           * 3   SFP_DA_CORE0 - 82599-specific
1179           * 4   SFP_DA_CORE1 - 82599-specific
1180           * 5   SFP_SR/LR_CORE0 - 82599-specific
1181           * 6   SFP_SR/LR_CORE1 - 82599-specific
1182           * 7   SFP_act_lmt_DA_CORE0 - 82599-specific
1183           * 8   SFP_act_lmt_DA_CORE1 - 82599-specific
1184           * 9   SFP_1g_cu_CORE0 - 82599-specific
1185           * 10  SFP_1g_cu_CORE1 - 82599-specific
1186           * 11  SFP_1g_sx_CORE0 - 82599-specific
1187           * 12  SFP_1g_sx_CORE1 - 82599-specific
1188           */
1189         if (hw->mac.type == ixgbe_mac_82598EB) {
1190                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1191                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1192                 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1193                         hw->phy.sfp_type = ixgbe_sfp_type_sr;
1194                 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1195                         hw->phy.sfp_type = ixgbe_sfp_type_lr;
1196                 else
1197                         hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1198         } else {
1199                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1200                         if (hw->bus.lan_id == 0)
1201                                 hw->phy.sfp_type =
1202                                              ixgbe_sfp_type_da_cu_core0;
1203                         else
1204                                 hw->phy.sfp_type =
1205                                              ixgbe_sfp_type_da_cu_core1;
1206                 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1207                         hw->phy.ops.read_i2c_eeprom(
1208                                         hw, IXGBE_SFF_CABLE_SPEC_COMP,
1209                                         &cable_spec);
1210                         if (cable_spec &
1211                             IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1212                                 if (hw->bus.lan_id == 0)
1213                                         hw->phy.sfp_type =
1214                                         ixgbe_sfp_type_da_act_lmt_core0;
1215                                 else
1216                                         hw->phy.sfp_type =
1217                                         ixgbe_sfp_type_da_act_lmt_core1;
1218                         } else {
1219                                 hw->phy.sfp_type =
1220                                                 ixgbe_sfp_type_unknown;
1221                         }
1222                 } else if (comp_codes_10g &
1223                            (IXGBE_SFF_10GBASESR_CAPABLE |
1224                             IXGBE_SFF_10GBASELR_CAPABLE)) {
1225                         if (hw->bus.lan_id == 0)
1226                                 hw->phy.sfp_type =
1227                                               ixgbe_sfp_type_srlr_core0;
1228                         else
1229                                 hw->phy.sfp_type =
1230                                               ixgbe_sfp_type_srlr_core1;
1231                 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1232                         if (hw->bus.lan_id == 0)
1233                                 hw->phy.sfp_type =
1234                                         ixgbe_sfp_type_1g_cu_core0;
1235                         else
1236                                 hw->phy.sfp_type =
1237                                         ixgbe_sfp_type_1g_cu_core1;
1238                 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1239                         if (hw->bus.lan_id == 0)
1240                                 hw->phy.sfp_type =
1241                                         ixgbe_sfp_type_1g_sx_core0;
1242                         else
1243                                 hw->phy.sfp_type =
1244                                         ixgbe_sfp_type_1g_sx_core1;
1245                 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1246                         if (hw->bus.lan_id == 0)
1247                                 hw->phy.sfp_type =
1248                                         ixgbe_sfp_type_1g_lx_core0;
1249                         else
1250                                 hw->phy.sfp_type =
1251                                         ixgbe_sfp_type_1g_lx_core1;
1252                 } else {
1253                         hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1254                 }
1255         }
1256
1257         if (hw->phy.sfp_type != stored_sfp_type)
1258                 hw->phy.sfp_setup_needed = true;
1259
1260         /* Determine if the SFP+ PHY is dual speed or not. */
1261         hw->phy.multispeed_fiber = false;
1262         if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1263              (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1264             ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1265              (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1266                 hw->phy.multispeed_fiber = true;
1267
1268         /* Determine PHY vendor */
1269         if (hw->phy.type != ixgbe_phy_nl) {
1270                 hw->phy.id = identifier;
1271                 status = hw->phy.ops.read_i2c_eeprom(hw,
1272                                             IXGBE_SFF_VENDOR_OUI_BYTE0,
1273                                             &oui_bytes[0]);
1274
1275                 if (status != 0)
1276                         goto err_read_i2c_eeprom;
1277
1278                 status = hw->phy.ops.read_i2c_eeprom(hw,
1279                                             IXGBE_SFF_VENDOR_OUI_BYTE1,
1280                                             &oui_bytes[1]);
1281
1282                 if (status != 0)
1283                         goto err_read_i2c_eeprom;
1284
1285                 status = hw->phy.ops.read_i2c_eeprom(hw,
1286                                             IXGBE_SFF_VENDOR_OUI_BYTE2,
1287                                             &oui_bytes[2]);
1288
1289                 if (status != 0)
1290                         goto err_read_i2c_eeprom;
1291
1292                 vendor_oui =
1293                   ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1294                    (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1295                    (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1296
1297                 switch (vendor_oui) {
1298                 case IXGBE_SFF_VENDOR_OUI_TYCO:
1299                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1300                                 hw->phy.type =
1301                                             ixgbe_phy_sfp_passive_tyco;
1302                         break;
1303                 case IXGBE_SFF_VENDOR_OUI_FTL:
1304                         if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1305                                 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1306                         else
1307                                 hw->phy.type = ixgbe_phy_sfp_ftl;
1308                         break;
1309                 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1310                         hw->phy.type = ixgbe_phy_sfp_avago;
1311                         break;
1312                 case IXGBE_SFF_VENDOR_OUI_INTEL:
1313                         hw->phy.type = ixgbe_phy_sfp_intel;
1314                         break;
1315                 default:
1316                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1317                                 hw->phy.type =
1318                                          ixgbe_phy_sfp_passive_unknown;
1319                         else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1320                                 hw->phy.type =
1321                                         ixgbe_phy_sfp_active_unknown;
1322                         else
1323                                 hw->phy.type = ixgbe_phy_sfp_unknown;
1324                         break;
1325                 }
1326         }
1327
1328         /* Allow any DA cable vendor */
1329         if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1330             IXGBE_SFF_DA_ACTIVE_CABLE))
1331                 return 0;
1332
1333         /* Verify supported 1G SFP modules */
1334         if (comp_codes_10g == 0 &&
1335             !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1336               hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1337               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1338               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1339               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1340               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1341                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1342                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1343         }
1344
1345         /* Anything else 82598-based is supported */
1346         if (hw->mac.type == ixgbe_mac_82598EB)
1347                 return 0;
1348
1349         hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1350         if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1351             !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1352               hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1353               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1354               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1355               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1356               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1357                 /* Make sure we're a supported PHY type */
1358                 if (hw->phy.type == ixgbe_phy_sfp_intel)
1359                         return 0;
1360                 if (hw->allow_unsupported_sfp) {
1361                         e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics.  Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter.  Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1362                         return 0;
1363                 }
1364                 hw_dbg(hw, "SFP+ module not supported\n");
1365                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1366                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1367         }
1368         return 0;
1369
1370 err_read_i2c_eeprom:
1371         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1372         if (hw->phy.type != ixgbe_phy_nl) {
1373                 hw->phy.id = 0;
1374                 hw->phy.type = ixgbe_phy_unknown;
1375         }
1376         return IXGBE_ERR_SFP_NOT_PRESENT;
1377 }
1378
1379 /**
1380  * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1381  * @hw: pointer to hardware structure
1382  *
1383  * Searches for and identifies the QSFP module and assigns appropriate PHY type
1384  **/
1385 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1386 {
1387         struct ixgbe_adapter *adapter = hw->back;
1388         s32 status;
1389         u32 vendor_oui = 0;
1390         enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1391         u8 identifier = 0;
1392         u8 comp_codes_1g = 0;
1393         u8 comp_codes_10g = 0;
1394         u8 oui_bytes[3] = {0, 0, 0};
1395         u16 enforce_sfp = 0;
1396         u8 connector = 0;
1397         u8 cable_length = 0;
1398         u8 device_tech = 0;
1399         bool active_cable = false;
1400
1401         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1402                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1403                 return IXGBE_ERR_SFP_NOT_PRESENT;
1404         }
1405
1406         /* LAN ID is needed for sfp_type determination */
1407         hw->mac.ops.set_lan_id(hw);
1408
1409         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1410                                              &identifier);
1411
1412         if (status != 0)
1413                 goto err_read_i2c_eeprom;
1414
1415         if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1416                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1417                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1418         }
1419
1420         hw->phy.id = identifier;
1421
1422         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1423                                              &comp_codes_10g);
1424
1425         if (status != 0)
1426                 goto err_read_i2c_eeprom;
1427
1428         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1429                                              &comp_codes_1g);
1430
1431         if (status != 0)
1432                 goto err_read_i2c_eeprom;
1433
1434         if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1435                 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1436                 if (hw->bus.lan_id == 0)
1437                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1438                 else
1439                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1440         } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1441                                      IXGBE_SFF_10GBASELR_CAPABLE)) {
1442                 if (hw->bus.lan_id == 0)
1443                         hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1444                 else
1445                         hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1446         } else {
1447                 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1448                         active_cable = true;
1449
1450                 if (!active_cable) {
1451                         /* check for active DA cables that pre-date
1452                          * SFF-8436 v3.6
1453                          */
1454                         hw->phy.ops.read_i2c_eeprom(hw,
1455                                         IXGBE_SFF_QSFP_CONNECTOR,
1456                                         &connector);
1457
1458                         hw->phy.ops.read_i2c_eeprom(hw,
1459                                         IXGBE_SFF_QSFP_CABLE_LENGTH,
1460                                         &cable_length);
1461
1462                         hw->phy.ops.read_i2c_eeprom(hw,
1463                                         IXGBE_SFF_QSFP_DEVICE_TECH,
1464                                         &device_tech);
1465
1466                         if ((connector ==
1467                                      IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1468                             (cable_length > 0) &&
1469                             ((device_tech >> 4) ==
1470                                      IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1471                                 active_cable = true;
1472                 }
1473
1474                 if (active_cable) {
1475                         hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1476                         if (hw->bus.lan_id == 0)
1477                                 hw->phy.sfp_type =
1478                                                 ixgbe_sfp_type_da_act_lmt_core0;
1479                         else
1480                                 hw->phy.sfp_type =
1481                                                 ixgbe_sfp_type_da_act_lmt_core1;
1482                 } else {
1483                         /* unsupported module type */
1484                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1485                         return IXGBE_ERR_SFP_NOT_SUPPORTED;
1486                 }
1487         }
1488
1489         if (hw->phy.sfp_type != stored_sfp_type)
1490                 hw->phy.sfp_setup_needed = true;
1491
1492         /* Determine if the QSFP+ PHY is dual speed or not. */
1493         hw->phy.multispeed_fiber = false;
1494         if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1495              (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1496             ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1497              (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1498                 hw->phy.multispeed_fiber = true;
1499
1500         /* Determine PHY vendor for optical modules */
1501         if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1502                               IXGBE_SFF_10GBASELR_CAPABLE)) {
1503                 status = hw->phy.ops.read_i2c_eeprom(hw,
1504                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1505                                         &oui_bytes[0]);
1506
1507                 if (status != 0)
1508                         goto err_read_i2c_eeprom;
1509
1510                 status = hw->phy.ops.read_i2c_eeprom(hw,
1511                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1512                                         &oui_bytes[1]);
1513
1514                 if (status != 0)
1515                         goto err_read_i2c_eeprom;
1516
1517                 status = hw->phy.ops.read_i2c_eeprom(hw,
1518                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1519                                         &oui_bytes[2]);
1520
1521                 if (status != 0)
1522                         goto err_read_i2c_eeprom;
1523
1524                 vendor_oui =
1525                         ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1526                          (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1527                          (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1528
1529                 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1530                         hw->phy.type = ixgbe_phy_qsfp_intel;
1531                 else
1532                         hw->phy.type = ixgbe_phy_qsfp_unknown;
1533
1534                 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1535                 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1536                         /* Make sure we're a supported PHY type */
1537                         if (hw->phy.type == ixgbe_phy_qsfp_intel)
1538                                 return 0;
1539                         if (hw->allow_unsupported_sfp) {
1540                                 e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1541                                 return 0;
1542                         }
1543                         hw_dbg(hw, "QSFP module not supported\n");
1544                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1545                         return IXGBE_ERR_SFP_NOT_SUPPORTED;
1546                 }
1547                 return 0;
1548         }
1549         return 0;
1550
1551 err_read_i2c_eeprom:
1552         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1553         hw->phy.id = 0;
1554         hw->phy.type = ixgbe_phy_unknown;
1555
1556         return IXGBE_ERR_SFP_NOT_PRESENT;
1557 }
1558
1559 /**
1560  *  ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1561  *  @hw: pointer to hardware structure
1562  *  @list_offset: offset to the SFP ID list
1563  *  @data_offset: offset to the SFP data block
1564  *
1565  *  Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1566  *  so it returns the offsets to the phy init sequence block.
1567  **/
1568 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1569                                         u16 *list_offset,
1570                                         u16 *data_offset)
1571 {
1572         u16 sfp_id;
1573         u16 sfp_type = hw->phy.sfp_type;
1574
1575         if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1576                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1577
1578         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1579                 return IXGBE_ERR_SFP_NOT_PRESENT;
1580
1581         if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1582             (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1583                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1584
1585         /*
1586          * Limiting active cables and 1G Phys must be initialized as
1587          * SR modules
1588          */
1589         if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1590             sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1591             sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1592             sfp_type == ixgbe_sfp_type_1g_sx_core0)
1593                 sfp_type = ixgbe_sfp_type_srlr_core0;
1594         else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1595                  sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1596                  sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1597                  sfp_type == ixgbe_sfp_type_1g_sx_core1)
1598                 sfp_type = ixgbe_sfp_type_srlr_core1;
1599
1600         /* Read offset to PHY init contents */
1601         if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1602                 hw_err(hw, "eeprom read at %d failed\n",
1603                        IXGBE_PHY_INIT_OFFSET_NL);
1604                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1605         }
1606
1607         if ((!*list_offset) || (*list_offset == 0xFFFF))
1608                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1609
1610         /* Shift offset to first ID word */
1611         (*list_offset)++;
1612
1613         /*
1614          * Find the matching SFP ID in the EEPROM
1615          * and program the init sequence
1616          */
1617         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1618                 goto err_phy;
1619
1620         while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1621                 if (sfp_id == sfp_type) {
1622                         (*list_offset)++;
1623                         if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1624                                 goto err_phy;
1625                         if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1626                                 hw_dbg(hw, "SFP+ module not supported\n");
1627                                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1628                         } else {
1629                                 break;
1630                         }
1631                 } else {
1632                         (*list_offset) += 2;
1633                         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1634                                 goto err_phy;
1635                 }
1636         }
1637
1638         if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1639                 hw_dbg(hw, "No matching SFP+ module found\n");
1640                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1641         }
1642
1643         return 0;
1644
1645 err_phy:
1646         hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
1647         return IXGBE_ERR_PHY;
1648 }
1649
1650 /**
1651  *  ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1652  *  @hw: pointer to hardware structure
1653  *  @byte_offset: EEPROM byte offset to read
1654  *  @eeprom_data: value read
1655  *
1656  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1657  **/
1658 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1659                                   u8 *eeprom_data)
1660 {
1661         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1662                                          IXGBE_I2C_EEPROM_DEV_ADDR,
1663                                          eeprom_data);
1664 }
1665
1666 /**
1667  *  ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1668  *  @hw: pointer to hardware structure
1669  *  @byte_offset: byte offset at address 0xA2
1670  *  @eeprom_data: value read
1671  *
1672  *  Performs byte read operation to SFP module's SFF-8472 data over I2C
1673  **/
1674 s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1675                                    u8 *sff8472_data)
1676 {
1677         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1678                                          IXGBE_I2C_EEPROM_DEV_ADDR2,
1679                                          sff8472_data);
1680 }
1681
1682 /**
1683  *  ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1684  *  @hw: pointer to hardware structure
1685  *  @byte_offset: EEPROM byte offset to write
1686  *  @eeprom_data: value to write
1687  *
1688  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
1689  **/
1690 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1691                                    u8 eeprom_data)
1692 {
1693         return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1694                                           IXGBE_I2C_EEPROM_DEV_ADDR,
1695                                           eeprom_data);
1696 }
1697
1698 /**
1699  * ixgbe_is_sfp_probe - Returns true if SFP is being detected
1700  * @hw: pointer to hardware structure
1701  * @offset: eeprom offset to be read
1702  * @addr: I2C address to be read
1703  */
1704 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr)
1705 {
1706         if (addr == IXGBE_I2C_EEPROM_DEV_ADDR &&
1707             offset == IXGBE_SFF_IDENTIFIER &&
1708             hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1709                 return true;
1710         return false;
1711 }
1712
1713 /**
1714  *  ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C
1715  *  @hw: pointer to hardware structure
1716  *  @byte_offset: byte offset to read
1717  *  @data: value read
1718  *  @lock: true if to take and release semaphore
1719  *
1720  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1721  *  a specified device address.
1722  */
1723 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
1724                                            u8 dev_addr, u8 *data, bool lock)
1725 {
1726         s32 status;
1727         u32 max_retry = 10;
1728         u32 retry = 0;
1729         u32 swfw_mask = hw->phy.phy_semaphore_mask;
1730         bool nack = true;
1731
1732         if (hw->mac.type >= ixgbe_mac_X550)
1733                 max_retry = 3;
1734         if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
1735                 max_retry = IXGBE_SFP_DETECT_RETRIES;
1736
1737         *data = 0;
1738
1739         do {
1740                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1741                         return IXGBE_ERR_SWFW_SYNC;
1742
1743                 ixgbe_i2c_start(hw);
1744
1745                 /* Device Address and write indication */
1746                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1747                 if (status != 0)
1748                         goto fail;
1749
1750                 status = ixgbe_get_i2c_ack(hw);
1751                 if (status != 0)
1752                         goto fail;
1753
1754                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1755                 if (status != 0)
1756                         goto fail;
1757
1758                 status = ixgbe_get_i2c_ack(hw);
1759                 if (status != 0)
1760                         goto fail;
1761
1762                 ixgbe_i2c_start(hw);
1763
1764                 /* Device Address and read indication */
1765                 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1766                 if (status != 0)
1767                         goto fail;
1768
1769                 status = ixgbe_get_i2c_ack(hw);
1770                 if (status != 0)
1771                         goto fail;
1772
1773                 status = ixgbe_clock_in_i2c_byte(hw, data);
1774                 if (status != 0)
1775                         goto fail;
1776
1777                 status = ixgbe_clock_out_i2c_bit(hw, nack);
1778                 if (status != 0)
1779                         goto fail;
1780
1781                 ixgbe_i2c_stop(hw);
1782                 if (lock)
1783                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1784                 return 0;
1785
1786 fail:
1787                 ixgbe_i2c_bus_clear(hw);
1788                 if (lock) {
1789                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1790                         msleep(100);
1791                 }
1792                 retry++;
1793                 if (retry < max_retry)
1794                         hw_dbg(hw, "I2C byte read error - Retrying.\n");
1795                 else
1796                         hw_dbg(hw, "I2C byte read error.\n");
1797
1798         } while (retry < max_retry);
1799
1800         return status;
1801 }
1802
1803 /**
1804  *  ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1805  *  @hw: pointer to hardware structure
1806  *  @byte_offset: byte offset to read
1807  *  @data: value read
1808  *
1809  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1810  *  a specified device address.
1811  */
1812 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1813                                 u8 dev_addr, u8 *data)
1814 {
1815         return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1816                                                data, true);
1817 }
1818
1819 /**
1820  *  ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C
1821  *  @hw: pointer to hardware structure
1822  *  @byte_offset: byte offset to read
1823  *  @data: value read
1824  *
1825  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1826  *  a specified device address.
1827  */
1828 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
1829                                          u8 dev_addr, u8 *data)
1830 {
1831         return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1832                                                data, false);
1833 }
1834
1835 /**
1836  *  ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C
1837  *  @hw: pointer to hardware structure
1838  *  @byte_offset: byte offset to write
1839  *  @data: value to write
1840  *  @lock: true if to take and release semaphore
1841  *
1842  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1843  *  a specified device address.
1844  */
1845 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
1846                                             u8 dev_addr, u8 data, bool lock)
1847 {
1848         s32 status;
1849         u32 max_retry = 1;
1850         u32 retry = 0;
1851         u32 swfw_mask = hw->phy.phy_semaphore_mask;
1852
1853         if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1854                 return IXGBE_ERR_SWFW_SYNC;
1855
1856         do {
1857                 ixgbe_i2c_start(hw);
1858
1859                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1860                 if (status != 0)
1861                         goto fail;
1862
1863                 status = ixgbe_get_i2c_ack(hw);
1864                 if (status != 0)
1865                         goto fail;
1866
1867                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1868                 if (status != 0)
1869                         goto fail;
1870
1871                 status = ixgbe_get_i2c_ack(hw);
1872                 if (status != 0)
1873                         goto fail;
1874
1875                 status = ixgbe_clock_out_i2c_byte(hw, data);
1876                 if (status != 0)
1877                         goto fail;
1878
1879                 status = ixgbe_get_i2c_ack(hw);
1880                 if (status != 0)
1881                         goto fail;
1882
1883                 ixgbe_i2c_stop(hw);
1884                 if (lock)
1885                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1886                 return 0;
1887
1888 fail:
1889                 ixgbe_i2c_bus_clear(hw);
1890                 retry++;
1891                 if (retry < max_retry)
1892                         hw_dbg(hw, "I2C byte write error - Retrying.\n");
1893                 else
1894                         hw_dbg(hw, "I2C byte write error.\n");
1895         } while (retry < max_retry);
1896
1897         if (lock)
1898                 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1899
1900         return status;
1901 }
1902
1903 /**
1904  *  ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1905  *  @hw: pointer to hardware structure
1906  *  @byte_offset: byte offset to write
1907  *  @data: value to write
1908  *
1909  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1910  *  a specified device address.
1911  */
1912 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1913                                  u8 dev_addr, u8 data)
1914 {
1915         return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1916                                                 data, true);
1917 }
1918
1919 /**
1920  *  ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C
1921  *  @hw: pointer to hardware structure
1922  *  @byte_offset: byte offset to write
1923  *  @data: value to write
1924  *
1925  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1926  *  a specified device address.
1927  */
1928 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
1929                                           u8 dev_addr, u8 data)
1930 {
1931         return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1932                                                 data, false);
1933 }
1934
1935 /**
1936  *  ixgbe_i2c_start - Sets I2C start condition
1937  *  @hw: pointer to hardware structure
1938  *
1939  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
1940  *  Set bit-bang mode on X550 hardware.
1941  **/
1942 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1943 {
1944         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
1945
1946         i2cctl |= IXGBE_I2C_BB_EN(hw);
1947
1948         /* Start condition must begin with data and clock high */
1949         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1950         ixgbe_raise_i2c_clk(hw, &i2cctl);
1951
1952         /* Setup time for start condition (4.7us) */
1953         udelay(IXGBE_I2C_T_SU_STA);
1954
1955         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1956
1957         /* Hold time for start condition (4us) */
1958         udelay(IXGBE_I2C_T_HD_STA);
1959
1960         ixgbe_lower_i2c_clk(hw, &i2cctl);
1961
1962         /* Minimum low period of clock is 4.7 us */
1963         udelay(IXGBE_I2C_T_LOW);
1964
1965 }
1966
1967 /**
1968  *  ixgbe_i2c_stop - Sets I2C stop condition
1969  *  @hw: pointer to hardware structure
1970  *
1971  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
1972  *  Disables bit-bang mode and negates data output enable on X550
1973  *  hardware.
1974  **/
1975 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1976 {
1977         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
1978         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
1979         u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
1980         u32 bb_en_bit = IXGBE_I2C_BB_EN(hw);
1981
1982         /* Stop condition must begin with data low and clock high */
1983         ixgbe_set_i2c_data(hw, &i2cctl, 0);
1984         ixgbe_raise_i2c_clk(hw, &i2cctl);
1985
1986         /* Setup time for stop condition (4us) */
1987         udelay(IXGBE_I2C_T_SU_STO);
1988
1989         ixgbe_set_i2c_data(hw, &i2cctl, 1);
1990
1991         /* bus free time between stop and start (4.7us)*/
1992         udelay(IXGBE_I2C_T_BUF);
1993
1994         if (bb_en_bit || data_oe_bit || clk_oe_bit) {
1995                 i2cctl &= ~bb_en_bit;
1996                 i2cctl |= data_oe_bit | clk_oe_bit;
1997                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
1998                 IXGBE_WRITE_FLUSH(hw);
1999         }
2000 }
2001
2002 /**
2003  *  ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
2004  *  @hw: pointer to hardware structure
2005  *  @data: data byte to clock in
2006  *
2007  *  Clocks in one byte data via I2C data/clock
2008  **/
2009 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
2010 {
2011         s32 i;
2012         bool bit = false;
2013
2014         *data = 0;
2015         for (i = 7; i >= 0; i--) {
2016                 ixgbe_clock_in_i2c_bit(hw, &bit);
2017                 *data |= bit << i;
2018         }
2019
2020         return 0;
2021 }
2022
2023 /**
2024  *  ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
2025  *  @hw: pointer to hardware structure
2026  *  @data: data byte clocked out
2027  *
2028  *  Clocks out one byte data via I2C data/clock
2029  **/
2030 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
2031 {
2032         s32 status;
2033         s32 i;
2034         u32 i2cctl;
2035         bool bit = false;
2036
2037         for (i = 7; i >= 0; i--) {
2038                 bit = (data >> i) & 0x1;
2039                 status = ixgbe_clock_out_i2c_bit(hw, bit);
2040
2041                 if (status != 0)
2042                         break;
2043         }
2044
2045         /* Release SDA line (set high) */
2046         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2047         i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2048         i2cctl |= IXGBE_I2C_DATA_OE_N_EN(hw);
2049         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2050         IXGBE_WRITE_FLUSH(hw);
2051
2052         return status;
2053 }
2054
2055 /**
2056  *  ixgbe_get_i2c_ack - Polls for I2C ACK
2057  *  @hw: pointer to hardware structure
2058  *
2059  *  Clocks in/out one bit via I2C data/clock
2060  **/
2061 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
2062 {
2063         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2064         s32 status = 0;
2065         u32 i = 0;
2066         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2067         u32 timeout = 10;
2068         bool ack = true;
2069
2070         if (data_oe_bit) {
2071                 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2072                 i2cctl |= data_oe_bit;
2073                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2074                 IXGBE_WRITE_FLUSH(hw);
2075         }
2076         ixgbe_raise_i2c_clk(hw, &i2cctl);
2077
2078         /* Minimum high period of clock is 4us */
2079         udelay(IXGBE_I2C_T_HIGH);
2080
2081         /* Poll for ACK.  Note that ACK in I2C spec is
2082          * transition from 1 to 0 */
2083         for (i = 0; i < timeout; i++) {
2084                 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2085                 ack = ixgbe_get_i2c_data(hw, &i2cctl);
2086
2087                 udelay(1);
2088                 if (ack == 0)
2089                         break;
2090         }
2091
2092         if (ack == 1) {
2093                 hw_dbg(hw, "I2C ack was not received.\n");
2094                 status = IXGBE_ERR_I2C;
2095         }
2096
2097         ixgbe_lower_i2c_clk(hw, &i2cctl);
2098
2099         /* Minimum low period of clock is 4.7 us */
2100         udelay(IXGBE_I2C_T_LOW);
2101
2102         return status;
2103 }
2104
2105 /**
2106  *  ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
2107  *  @hw: pointer to hardware structure
2108  *  @data: read data value
2109  *
2110  *  Clocks in one bit via I2C data/clock
2111  **/
2112 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
2113 {
2114         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2115         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2116
2117         if (data_oe_bit) {
2118                 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2119                 i2cctl |= data_oe_bit;
2120                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2121                 IXGBE_WRITE_FLUSH(hw);
2122         }
2123         ixgbe_raise_i2c_clk(hw, &i2cctl);
2124
2125         /* Minimum high period of clock is 4us */
2126         udelay(IXGBE_I2C_T_HIGH);
2127
2128         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2129         *data = ixgbe_get_i2c_data(hw, &i2cctl);
2130
2131         ixgbe_lower_i2c_clk(hw, &i2cctl);
2132
2133         /* Minimum low period of clock is 4.7 us */
2134         udelay(IXGBE_I2C_T_LOW);
2135
2136         return 0;
2137 }
2138
2139 /**
2140  *  ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
2141  *  @hw: pointer to hardware structure
2142  *  @data: data value to write
2143  *
2144  *  Clocks out one bit via I2C data/clock
2145  **/
2146 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
2147 {
2148         s32 status;
2149         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2150
2151         status = ixgbe_set_i2c_data(hw, &i2cctl, data);
2152         if (status == 0) {
2153                 ixgbe_raise_i2c_clk(hw, &i2cctl);
2154
2155                 /* Minimum high period of clock is 4us */
2156                 udelay(IXGBE_I2C_T_HIGH);
2157
2158                 ixgbe_lower_i2c_clk(hw, &i2cctl);
2159
2160                 /* Minimum low period of clock is 4.7 us.
2161                  * This also takes care of the data hold time.
2162                  */
2163                 udelay(IXGBE_I2C_T_LOW);
2164         } else {
2165                 hw_dbg(hw, "I2C data was not set to %X\n", data);
2166                 return IXGBE_ERR_I2C;
2167         }
2168
2169         return 0;
2170 }
2171 /**
2172  *  ixgbe_raise_i2c_clk - Raises the I2C SCL clock
2173  *  @hw: pointer to hardware structure
2174  *  @i2cctl: Current value of I2CCTL register
2175  *
2176  *  Raises the I2C clock line '0'->'1'
2177  *  Negates the I2C clock output enable on X550 hardware.
2178  **/
2179 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2180 {
2181         u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
2182         u32 i = 0;
2183         u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
2184         u32 i2cctl_r = 0;
2185
2186         if (clk_oe_bit) {
2187                 *i2cctl |= clk_oe_bit;
2188                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2189         }
2190
2191         for (i = 0; i < timeout; i++) {
2192                 *i2cctl |= IXGBE_I2C_CLK_OUT(hw);
2193                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2194                 IXGBE_WRITE_FLUSH(hw);
2195                 /* SCL rise time (1000ns) */
2196                 udelay(IXGBE_I2C_T_RISE);
2197
2198                 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2199                 if (i2cctl_r & IXGBE_I2C_CLK_IN(hw))
2200                         break;
2201         }
2202 }
2203
2204 /**
2205  *  ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
2206  *  @hw: pointer to hardware structure
2207  *  @i2cctl: Current value of I2CCTL register
2208  *
2209  *  Lowers the I2C clock line '1'->'0'
2210  *  Asserts the I2C clock output enable on X550 hardware.
2211  **/
2212 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2213 {
2214
2215         *i2cctl &= ~IXGBE_I2C_CLK_OUT(hw);
2216         *i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN(hw);
2217
2218         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2219         IXGBE_WRITE_FLUSH(hw);
2220
2221         /* SCL fall time (300ns) */
2222         udelay(IXGBE_I2C_T_FALL);
2223 }
2224
2225 /**
2226  *  ixgbe_set_i2c_data - Sets the I2C data bit
2227  *  @hw: pointer to hardware structure
2228  *  @i2cctl: Current value of I2CCTL register
2229  *  @data: I2C data value (0 or 1) to set
2230  *
2231  *  Sets the I2C data bit
2232  *  Asserts the I2C data output enable on X550 hardware.
2233  **/
2234 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
2235 {
2236         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2237
2238         if (data)
2239                 *i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2240         else
2241                 *i2cctl &= ~IXGBE_I2C_DATA_OUT(hw);
2242         *i2cctl &= ~data_oe_bit;
2243
2244         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2245         IXGBE_WRITE_FLUSH(hw);
2246
2247         /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
2248         udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
2249
2250         if (!data)      /* Can't verify data in this case */
2251                 return 0;
2252         if (data_oe_bit) {
2253                 *i2cctl |= data_oe_bit;
2254                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2255                 IXGBE_WRITE_FLUSH(hw);
2256         }
2257
2258         /* Verify data was set correctly */
2259         *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2260         if (data != ixgbe_get_i2c_data(hw, i2cctl)) {
2261                 hw_dbg(hw, "Error - I2C data was not set to %X.\n", data);
2262                 return IXGBE_ERR_I2C;
2263         }
2264
2265         return 0;
2266 }
2267
2268 /**
2269  *  ixgbe_get_i2c_data - Reads the I2C SDA data bit
2270  *  @hw: pointer to hardware structure
2271  *  @i2cctl: Current value of I2CCTL register
2272  *
2273  *  Returns the I2C data bit value
2274  *  Negates the I2C data output enable on X550 hardware.
2275  **/
2276 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl)
2277 {
2278         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2279
2280         if (data_oe_bit) {
2281                 *i2cctl |= data_oe_bit;
2282                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2283                 IXGBE_WRITE_FLUSH(hw);
2284                 udelay(IXGBE_I2C_T_FALL);
2285         }
2286
2287         if (*i2cctl & IXGBE_I2C_DATA_IN(hw))
2288                 return true;
2289         return false;
2290 }
2291
2292 /**
2293  *  ixgbe_i2c_bus_clear - Clears the I2C bus
2294  *  @hw: pointer to hardware structure
2295  *
2296  *  Clears the I2C bus by sending nine clock pulses.
2297  *  Used when data line is stuck low.
2298  **/
2299 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
2300 {
2301         u32 i2cctl;
2302         u32 i;
2303
2304         ixgbe_i2c_start(hw);
2305         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2306
2307         ixgbe_set_i2c_data(hw, &i2cctl, 1);
2308
2309         for (i = 0; i < 9; i++) {
2310                 ixgbe_raise_i2c_clk(hw, &i2cctl);
2311
2312                 /* Min high period of clock is 4us */
2313                 udelay(IXGBE_I2C_T_HIGH);
2314
2315                 ixgbe_lower_i2c_clk(hw, &i2cctl);
2316
2317                 /* Min low period of clock is 4.7us*/
2318                 udelay(IXGBE_I2C_T_LOW);
2319         }
2320
2321         ixgbe_i2c_start(hw);
2322
2323         /* Put the i2c bus back to default state */
2324         ixgbe_i2c_stop(hw);
2325 }
2326
2327 /**
2328  *  ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
2329  *  @hw: pointer to hardware structure
2330  *
2331  *  Checks if the LASI temp alarm status was triggered due to overtemp
2332  **/
2333 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
2334 {
2335         u16 phy_data = 0;
2336
2337         if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
2338                 return 0;
2339
2340         /* Check that the LASI temp alarm status was triggered */
2341         hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
2342                              MDIO_MMD_PMAPMD, &phy_data);
2343
2344         if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
2345                 return 0;
2346
2347         return IXGBE_ERR_OVERTEMP;
2348 }
2349
2350 /** ixgbe_set_copper_phy_power - Control power for copper phy
2351  *  @hw: pointer to hardware structure
2352  *  @on: true for on, false for off
2353  **/
2354 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on)
2355 {
2356         u32 status;
2357         u16 reg;
2358
2359         /* Bail if we don't have copper phy */
2360         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper)
2361                 return 0;
2362
2363         if (!on && ixgbe_mng_present(hw))
2364                 return 0;
2365
2366         status = hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, &reg);
2367         if (status)
2368                 return status;
2369
2370         if (on) {
2371                 reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2372         } else {
2373                 if (ixgbe_check_reset_blocked(hw))
2374                         return 0;
2375                 reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2376         }
2377
2378         status = hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, reg);
2379         return status;
2380 }