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