net/txgbe: add FFE parameters for user debugging
[dpdk.git] / drivers / net / txgbe / base / txgbe_phy.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2015-2020
3  */
4
5 #include "txgbe_hw.h"
6 #include "txgbe_eeprom.h"
7 #include "txgbe_mng.h"
8 #include "txgbe_phy.h"
9
10 static void txgbe_i2c_start(struct txgbe_hw *hw);
11 static void txgbe_i2c_stop(struct txgbe_hw *hw);
12 static s32 txgbe_handle_bp_flow(u32 link_mode, struct txgbe_hw *hw);
13 static void txgbe_get_bp_ability(struct txgbe_backplane_ability *ability,
14         u32 link_partner, struct txgbe_hw *hw);
15 static s32 txgbe_check_bp_ability(struct txgbe_backplane_ability *local_ability,
16         struct txgbe_backplane_ability *lp_ability, struct txgbe_hw *hw);
17 static void txgbe_clear_bp_intr(u32 bit, u32 bit_high, struct txgbe_hw *hw);
18 static s32 txgbe_enable_kr_training(struct txgbe_hw *hw);
19 static s32 txgbe_disable_kr_training(struct txgbe_hw *hw, s32 post, s32 mode);
20 static s32 txgbe_check_kr_training(struct txgbe_hw *hw);
21 static void txgbe_read_phy_lane_tx_eq(u16 lane, struct txgbe_hw *hw,
22                                 s32 post, s32 mode);
23 static s32 txgbe_set_link_to_sfi(struct txgbe_hw *hw, u32 speed);
24
25 /**
26  * txgbe_identify_extphy - Identify a single address for a PHY
27  * @hw: pointer to hardware structure
28  * @phy_addr: PHY address to probe
29  *
30  * Returns true if PHY found
31  */
32 static bool txgbe_identify_extphy(struct txgbe_hw *hw)
33 {
34         u16 phy_addr = 0;
35
36         if (!txgbe_validate_phy_addr(hw, phy_addr)) {
37                 DEBUGOUT("Unable to validate PHY address 0x%04X\n",
38                         phy_addr);
39                 return false;
40         }
41
42         if (txgbe_get_phy_id(hw))
43                 return false;
44
45         hw->phy.type = txgbe_get_phy_type_from_id(hw->phy.id);
46         if (hw->phy.type == txgbe_phy_unknown) {
47                 u16 ext_ability = 0;
48                 hw->phy.read_reg(hw, TXGBE_MD_PHY_EXT_ABILITY,
49                                  TXGBE_MD_DEV_PMA_PMD,
50                                  &ext_ability);
51
52                 if (ext_ability & (TXGBE_MD_PHY_10GBASET_ABILITY |
53                         TXGBE_MD_PHY_1000BASET_ABILITY))
54                         hw->phy.type = txgbe_phy_cu_unknown;
55                 else
56                         hw->phy.type = txgbe_phy_generic;
57         }
58
59         return true;
60 }
61
62 /**
63  *  txgbe_read_phy_if - Read TXGBE_ETHPHYIF register
64  *  @hw: pointer to hardware structure
65  *
66  *  Read TXGBE_ETHPHYIF register and save field values,
67  *  and check for valid field values.
68  **/
69 static s32 txgbe_read_phy_if(struct txgbe_hw *hw)
70 {
71         hw->phy.media_type = hw->phy.get_media_type(hw);
72
73         /* Save NW management interface connected on board. This is used
74          * to determine internal PHY mode.
75          */
76         hw->phy.nw_mng_if_sel = rd32(hw, TXGBE_ETHPHYIF);
77
78         /* If MDIO is connected to external PHY, then set PHY address. */
79         if (hw->phy.nw_mng_if_sel & TXGBE_ETHPHYIF_MDIO_ACT)
80                 hw->phy.addr = TXGBE_ETHPHYIF_MDIO_BASE(hw->phy.nw_mng_if_sel);
81
82         if (!hw->phy.phy_semaphore_mask) {
83                 if (hw->bus.lan_id)
84                         hw->phy.phy_semaphore_mask = TXGBE_MNGSEM_SWPHY;
85                 else
86                         hw->phy.phy_semaphore_mask = TXGBE_MNGSEM_SWPHY;
87         }
88
89         return 0;
90 }
91
92 /**
93  *  txgbe_identify_phy - Get physical layer module
94  *  @hw: pointer to hardware structure
95  *
96  *  Determines the physical layer module found on the current adapter.
97  **/
98 s32 txgbe_identify_phy(struct txgbe_hw *hw)
99 {
100         s32 err = TXGBE_ERR_PHY_ADDR_INVALID;
101
102         DEBUGFUNC("txgbe_identify_phy");
103
104         txgbe_read_phy_if(hw);
105
106         if (hw->phy.type != txgbe_phy_unknown)
107                 return 0;
108
109         /* Raptor 10GBASE-T requires an external PHY */
110         if (hw->phy.media_type == txgbe_media_type_copper) {
111                 err = txgbe_identify_extphy(hw);
112         } else if (hw->phy.media_type == txgbe_media_type_fiber) {
113                 err = txgbe_identify_module(hw);
114         } else {
115                 hw->phy.type = txgbe_phy_none;
116                 return 0;
117         }
118
119         /* Return error if SFP module has been detected but is not supported */
120         if (hw->phy.type == txgbe_phy_sfp_unsupported)
121                 return TXGBE_ERR_SFP_NOT_SUPPORTED;
122
123         return err;
124 }
125
126 /**
127  * txgbe_check_reset_blocked - check status of MNG FW veto bit
128  * @hw: pointer to the hardware structure
129  *
130  * This function checks the STAT.MNGVETO bit to see if there are
131  * any constraints on link from manageability.  For MAC's that don't
132  * have this bit just return faluse since the link can not be blocked
133  * via this method.
134  **/
135 s32 txgbe_check_reset_blocked(struct txgbe_hw *hw)
136 {
137         u32 mmngc;
138
139         DEBUGFUNC("txgbe_check_reset_blocked");
140
141         mmngc = rd32(hw, TXGBE_STAT);
142         if (mmngc & TXGBE_STAT_MNGVETO) {
143                 DEBUGOUT("MNG_VETO bit detected.\n");
144                 return true;
145         }
146
147         return false;
148 }
149
150 /**
151  *  txgbe_validate_phy_addr - Determines phy address is valid
152  *  @hw: pointer to hardware structure
153  *  @phy_addr: PHY address
154  *
155  **/
156 bool txgbe_validate_phy_addr(struct txgbe_hw *hw, u32 phy_addr)
157 {
158         u16 phy_id = 0;
159         bool valid = false;
160
161         DEBUGFUNC("txgbe_validate_phy_addr");
162
163         hw->phy.addr = phy_addr;
164         hw->phy.read_reg(hw, TXGBE_MD_PHY_ID_HIGH,
165                              TXGBE_MD_DEV_PMA_PMD, &phy_id);
166
167         if (phy_id != 0xFFFF && phy_id != 0x0)
168                 valid = true;
169
170         DEBUGOUT("PHY ID HIGH is 0x%04X\n", phy_id);
171
172         return valid;
173 }
174
175 /**
176  *  txgbe_get_phy_id - Get the phy type
177  *  @hw: pointer to hardware structure
178  *
179  **/
180 s32 txgbe_get_phy_id(struct txgbe_hw *hw)
181 {
182         u32 err;
183         u16 phy_id_high = 0;
184         u16 phy_id_low = 0;
185
186         DEBUGFUNC("txgbe_get_phy_id");
187
188         err = hw->phy.read_reg(hw, TXGBE_MD_PHY_ID_HIGH,
189                                       TXGBE_MD_DEV_PMA_PMD,
190                                       &phy_id_high);
191
192         if (err == 0) {
193                 hw->phy.id = (u32)(phy_id_high << 16);
194                 err = hw->phy.read_reg(hw, TXGBE_MD_PHY_ID_LOW,
195                                               TXGBE_MD_DEV_PMA_PMD,
196                                               &phy_id_low);
197                 hw->phy.id |= (u32)(phy_id_low & TXGBE_PHY_REVISION_MASK);
198                 hw->phy.revision = (u32)(phy_id_low & ~TXGBE_PHY_REVISION_MASK);
199         }
200         DEBUGOUT("PHY_ID_HIGH 0x%04X, PHY_ID_LOW 0x%04X\n",
201                   phy_id_high, phy_id_low);
202
203         return err;
204 }
205
206 /**
207  *  txgbe_get_phy_type_from_id - Get the phy type
208  *  @phy_id: PHY ID information
209  *
210  **/
211 enum txgbe_phy_type txgbe_get_phy_type_from_id(u32 phy_id)
212 {
213         enum txgbe_phy_type phy_type;
214
215         DEBUGFUNC("txgbe_get_phy_type_from_id");
216
217         switch (phy_id) {
218         case TXGBE_PHYID_TN1010:
219                 phy_type = txgbe_phy_tn;
220                 break;
221         case TXGBE_PHYID_QT2022:
222                 phy_type = txgbe_phy_qt;
223                 break;
224         case TXGBE_PHYID_ATH:
225                 phy_type = txgbe_phy_nl;
226                 break;
227         case TXGBE_PHYID_MTD3310:
228                 phy_type = txgbe_phy_cu_mtd;
229                 break;
230         default:
231                 phy_type = txgbe_phy_unknown;
232                 break;
233         }
234
235         return phy_type;
236 }
237
238 static s32
239 txgbe_reset_extphy(struct txgbe_hw *hw)
240 {
241         u16 ctrl = 0;
242         int err, i;
243
244         err = hw->phy.read_reg(hw, TXGBE_MD_PORT_CTRL,
245                         TXGBE_MD_DEV_GENERAL, &ctrl);
246         if (err != 0)
247                 return err;
248         ctrl |= TXGBE_MD_PORT_CTRL_RESET;
249         err = hw->phy.write_reg(hw, TXGBE_MD_PORT_CTRL,
250                         TXGBE_MD_DEV_GENERAL, ctrl);
251         if (err != 0)
252                 return err;
253
254         /*
255          * Poll for reset bit to self-clear indicating reset is complete.
256          * Some PHYs could take up to 3 seconds to complete and need about
257          * 1.7 usec delay after the reset is complete.
258          */
259         for (i = 0; i < 30; i++) {
260                 msec_delay(100);
261                 err = hw->phy.read_reg(hw, TXGBE_MD_PORT_CTRL,
262                         TXGBE_MD_DEV_GENERAL, &ctrl);
263                 if (err != 0)
264                         return err;
265
266                 if (!(ctrl & TXGBE_MD_PORT_CTRL_RESET)) {
267                         usec_delay(2);
268                         break;
269                 }
270         }
271
272         if (ctrl & TXGBE_MD_PORT_CTRL_RESET) {
273                 err = TXGBE_ERR_RESET_FAILED;
274                 DEBUGOUT("PHY reset polling failed to complete.\n");
275         }
276
277         return err;
278 }
279
280 /**
281  *  txgbe_reset_phy - Performs a PHY reset
282  *  @hw: pointer to hardware structure
283  **/
284 s32 txgbe_reset_phy(struct txgbe_hw *hw)
285 {
286         s32 err = 0;
287
288         DEBUGFUNC("txgbe_reset_phy");
289
290         if (hw->phy.type == txgbe_phy_unknown)
291                 err = txgbe_identify_phy(hw);
292
293         if (err != 0 || hw->phy.type == txgbe_phy_none)
294                 return err;
295
296         /* Don't reset PHY if it's shut down due to overtemp. */
297         if (hw->phy.check_overtemp(hw) == TXGBE_ERR_OVERTEMP)
298                 return err;
299
300         /* Blocked by MNG FW so bail */
301         if (txgbe_check_reset_blocked(hw))
302                 return err;
303
304         switch (hw->phy.type) {
305         case txgbe_phy_cu_mtd:
306                 err = txgbe_reset_extphy(hw);
307                 break;
308         default:
309                 break;
310         }
311
312         return err;
313 }
314
315 /**
316  *  txgbe_read_phy_mdi - Reads a value from a specified PHY register without
317  *  the SWFW lock
318  *  @hw: pointer to hardware structure
319  *  @reg_addr: 32 bit address of PHY register to read
320  *  @device_type: 5 bit device type
321  *  @phy_data: Pointer to read data from PHY register
322  **/
323 s32 txgbe_read_phy_reg_mdi(struct txgbe_hw *hw, u32 reg_addr, u32 device_type,
324                            u16 *phy_data)
325 {
326         u32 command, data;
327
328         /* Setup and write the address cycle command */
329         command = TXGBE_MDIOSCA_REG(reg_addr) |
330                   TXGBE_MDIOSCA_DEV(device_type) |
331                   TXGBE_MDIOSCA_PORT(hw->phy.addr);
332         wr32(hw, TXGBE_MDIOSCA, command);
333
334         command = TXGBE_MDIOSCD_CMD_READ |
335                   TXGBE_MDIOSCD_BUSY;
336         wr32(hw, TXGBE_MDIOSCD, command);
337
338         /*
339          * Check every 10 usec to see if the address cycle completed.
340          * The MDI Command bit will clear when the operation is
341          * complete
342          */
343         if (!po32m(hw, TXGBE_MDIOSCD, TXGBE_MDIOSCD_BUSY,
344                 0, NULL, 100, 100)) {
345                 DEBUGOUT("PHY address command did not complete\n");
346                 return TXGBE_ERR_PHY;
347         }
348
349         data = rd32(hw, TXGBE_MDIOSCD);
350         *phy_data = (u16)TXGBD_MDIOSCD_DAT(data);
351
352         return 0;
353 }
354
355 /**
356  *  txgbe_read_phy_reg - Reads a value from a specified PHY register
357  *  using the SWFW lock - this function is needed in most cases
358  *  @hw: pointer to hardware structure
359  *  @reg_addr: 32 bit address of PHY register to read
360  *  @device_type: 5 bit device type
361  *  @phy_data: Pointer to read data from PHY register
362  **/
363 s32 txgbe_read_phy_reg(struct txgbe_hw *hw, u32 reg_addr,
364                                u32 device_type, u16 *phy_data)
365 {
366         s32 err;
367         u32 gssr = hw->phy.phy_semaphore_mask;
368
369         DEBUGFUNC("txgbe_read_phy_reg");
370
371         if (hw->mac.acquire_swfw_sync(hw, gssr))
372                 return TXGBE_ERR_SWFW_SYNC;
373
374         err = hw->phy.read_reg_mdi(hw, reg_addr, device_type, phy_data);
375
376         hw->mac.release_swfw_sync(hw, gssr);
377
378         return err;
379 }
380
381 /**
382  *  txgbe_write_phy_reg_mdi - Writes a value to specified PHY register
383  *  without SWFW lock
384  *  @hw: pointer to hardware structure
385  *  @reg_addr: 32 bit PHY register to write
386  *  @device_type: 5 bit device type
387  *  @phy_data: Data to write to the PHY register
388  **/
389 s32 txgbe_write_phy_reg_mdi(struct txgbe_hw *hw, u32 reg_addr,
390                                 u32 device_type, u16 phy_data)
391 {
392         u32 command;
393
394         /* write command */
395         command = TXGBE_MDIOSCA_REG(reg_addr) |
396                   TXGBE_MDIOSCA_DEV(device_type) |
397                   TXGBE_MDIOSCA_PORT(hw->phy.addr);
398         wr32(hw, TXGBE_MDIOSCA, command);
399
400         command = TXGBE_MDIOSCD_CMD_WRITE |
401                   TXGBE_MDIOSCD_DAT(phy_data) |
402                   TXGBE_MDIOSCD_BUSY;
403         wr32(hw, TXGBE_MDIOSCD, command);
404
405         /* wait for completion */
406         if (!po32m(hw, TXGBE_MDIOSCD, TXGBE_MDIOSCD_BUSY,
407                 0, NULL, 100, 100)) {
408                 TLOG_DEBUG("PHY write cmd didn't complete\n");
409                 return -TERR_PHY;
410         }
411
412         return 0;
413 }
414
415 /**
416  *  txgbe_write_phy_reg - Writes a value to specified PHY register
417  *  using SWFW lock- this function is needed in most cases
418  *  @hw: pointer to hardware structure
419  *  @reg_addr: 32 bit PHY register to write
420  *  @device_type: 5 bit device type
421  *  @phy_data: Data to write to the PHY register
422  **/
423 s32 txgbe_write_phy_reg(struct txgbe_hw *hw, u32 reg_addr,
424                                 u32 device_type, u16 phy_data)
425 {
426         s32 err;
427         u32 gssr = hw->phy.phy_semaphore_mask;
428
429         DEBUGFUNC("txgbe_write_phy_reg");
430
431         if (hw->mac.acquire_swfw_sync(hw, gssr))
432                 err = TXGBE_ERR_SWFW_SYNC;
433
434         err = hw->phy.write_reg_mdi(hw, reg_addr, device_type,
435                                          phy_data);
436         hw->mac.release_swfw_sync(hw, gssr);
437
438         return err;
439 }
440
441 /**
442  *  txgbe_setup_phy_link - Set and restart auto-neg
443  *  @hw: pointer to hardware structure
444  *
445  *  Restart auto-negotiation and PHY and waits for completion.
446  **/
447 s32 txgbe_setup_phy_link(struct txgbe_hw *hw)
448 {
449         s32 err = 0;
450         u16 autoneg_reg = TXGBE_MII_AUTONEG_REG;
451         bool autoneg = false;
452         u32 speed;
453
454         DEBUGFUNC("txgbe_setup_phy_link");
455
456         txgbe_get_copper_link_capabilities(hw, &speed, &autoneg);
457
458         /* Set or unset auto-negotiation 10G advertisement */
459         hw->phy.read_reg(hw, TXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
460                              TXGBE_MD_DEV_AUTO_NEG,
461                              &autoneg_reg);
462
463         autoneg_reg &= ~TXGBE_MII_10GBASE_T_ADVERTISE;
464         if ((hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_10GB_FULL) &&
465             (speed & TXGBE_LINK_SPEED_10GB_FULL))
466                 autoneg_reg |= TXGBE_MII_10GBASE_T_ADVERTISE;
467
468         hw->phy.write_reg(hw, TXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
469                               TXGBE_MD_DEV_AUTO_NEG,
470                               autoneg_reg);
471
472         hw->phy.read_reg(hw, TXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
473                              TXGBE_MD_DEV_AUTO_NEG,
474                              &autoneg_reg);
475
476         /* Set or unset auto-negotiation 5G advertisement */
477         autoneg_reg &= ~TXGBE_MII_5GBASE_T_ADVERTISE;
478         if ((hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_5GB_FULL) &&
479             (speed & TXGBE_LINK_SPEED_5GB_FULL))
480                 autoneg_reg |= TXGBE_MII_5GBASE_T_ADVERTISE;
481
482         /* Set or unset auto-negotiation 2.5G advertisement */
483         autoneg_reg &= ~TXGBE_MII_2_5GBASE_T_ADVERTISE;
484         if ((hw->phy.autoneg_advertised &
485              TXGBE_LINK_SPEED_2_5GB_FULL) &&
486             (speed & TXGBE_LINK_SPEED_2_5GB_FULL))
487                 autoneg_reg |= TXGBE_MII_2_5GBASE_T_ADVERTISE;
488         /* Set or unset auto-negotiation 1G advertisement */
489         autoneg_reg &= ~TXGBE_MII_1GBASE_T_ADVERTISE;
490         if ((hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_1GB_FULL) &&
491             (speed & TXGBE_LINK_SPEED_1GB_FULL))
492                 autoneg_reg |= TXGBE_MII_1GBASE_T_ADVERTISE;
493
494         hw->phy.write_reg(hw, TXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
495                               TXGBE_MD_DEV_AUTO_NEG,
496                               autoneg_reg);
497
498         /* Set or unset auto-negotiation 100M advertisement */
499         hw->phy.read_reg(hw, TXGBE_MII_AUTONEG_ADVERTISE_REG,
500                              TXGBE_MD_DEV_AUTO_NEG,
501                              &autoneg_reg);
502
503         autoneg_reg &= ~(TXGBE_MII_100BASE_T_ADVERTISE |
504                          TXGBE_MII_100BASE_T_ADVERTISE_HALF);
505         if ((hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_100M_FULL) &&
506             (speed & TXGBE_LINK_SPEED_100M_FULL))
507                 autoneg_reg |= TXGBE_MII_100BASE_T_ADVERTISE;
508
509         hw->phy.write_reg(hw, TXGBE_MII_AUTONEG_ADVERTISE_REG,
510                               TXGBE_MD_DEV_AUTO_NEG,
511                               autoneg_reg);
512
513         /* Blocked by MNG FW so don't reset PHY */
514         if (txgbe_check_reset_blocked(hw))
515                 return err;
516
517         /* Restart PHY auto-negotiation. */
518         hw->phy.read_reg(hw, TXGBE_MD_AUTO_NEG_CONTROL,
519                              TXGBE_MD_DEV_AUTO_NEG, &autoneg_reg);
520
521         autoneg_reg |= TXGBE_MII_RESTART;
522
523         hw->phy.write_reg(hw, TXGBE_MD_AUTO_NEG_CONTROL,
524                               TXGBE_MD_DEV_AUTO_NEG, autoneg_reg);
525
526         return err;
527 }
528
529 /**
530  *  txgbe_setup_phy_link_speed - Sets the auto advertised capabilities
531  *  @hw: pointer to hardware structure
532  *  @speed: new link speed
533  *  @autoneg_wait_to_complete: unused
534  **/
535 s32 txgbe_setup_phy_link_speed(struct txgbe_hw *hw,
536                                        u32 speed,
537                                        bool autoneg_wait_to_complete)
538 {
539         UNREFERENCED_PARAMETER(autoneg_wait_to_complete);
540
541         DEBUGFUNC("txgbe_setup_phy_link_speed");
542
543         /*
544          * Clear autoneg_advertised and set new values based on input link
545          * speed.
546          */
547         hw->phy.autoneg_advertised = 0;
548
549         if (speed & TXGBE_LINK_SPEED_10GB_FULL)
550                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_10GB_FULL;
551
552         if (speed & TXGBE_LINK_SPEED_5GB_FULL)
553                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_5GB_FULL;
554
555         if (speed & TXGBE_LINK_SPEED_2_5GB_FULL)
556                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_2_5GB_FULL;
557
558         if (speed & TXGBE_LINK_SPEED_1GB_FULL)
559                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_1GB_FULL;
560
561         if (speed & TXGBE_LINK_SPEED_100M_FULL)
562                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_100M_FULL;
563
564         if (speed & TXGBE_LINK_SPEED_10M_FULL)
565                 hw->phy.autoneg_advertised |= TXGBE_LINK_SPEED_10M_FULL;
566
567         /* Setup link based on the new speed settings */
568         hw->phy.setup_link(hw);
569
570         return 0;
571 }
572
573 s32 txgbe_get_phy_fw_version(struct txgbe_hw *hw, u32 *fw_version)
574 {
575         u16 eeprom_verh, eeprom_verl;
576
577         hw->rom.readw_sw(hw, TXGBE_EEPROM_VERSION_H, &eeprom_verh);
578         hw->rom.readw_sw(hw, TXGBE_EEPROM_VERSION_L, &eeprom_verl);
579
580         *fw_version = (eeprom_verh << 16) | eeprom_verl;
581
582         return 0;
583 }
584
585 /**
586  * txgbe_get_copper_speeds_supported - Get copper link speeds from phy
587  * @hw: pointer to hardware structure
588  *
589  * Determines the supported link capabilities by reading the PHY auto
590  * negotiation register.
591  **/
592 static s32 txgbe_get_copper_speeds_supported(struct txgbe_hw *hw)
593 {
594         s32 err;
595         u16 speed_ability;
596
597         err = hw->phy.read_reg(hw, TXGBE_MD_PHY_SPEED_ABILITY,
598                                       TXGBE_MD_DEV_PMA_PMD,
599                                       &speed_ability);
600         if (err)
601                 return err;
602
603         if (speed_ability & TXGBE_MD_PHY_SPEED_10G)
604                 hw->phy.speeds_supported |= TXGBE_LINK_SPEED_10GB_FULL;
605         if (speed_ability & TXGBE_MD_PHY_SPEED_1G)
606                 hw->phy.speeds_supported |= TXGBE_LINK_SPEED_1GB_FULL;
607         if (speed_ability & TXGBE_MD_PHY_SPEED_100M)
608                 hw->phy.speeds_supported |= TXGBE_LINK_SPEED_100M_FULL;
609
610         return err;
611 }
612
613 /**
614  *  txgbe_get_copper_link_capabilities - Determines link capabilities
615  *  @hw: pointer to hardware structure
616  *  @speed: pointer to link speed
617  *  @autoneg: boolean auto-negotiation value
618  **/
619 s32 txgbe_get_copper_link_capabilities(struct txgbe_hw *hw,
620                                                u32 *speed,
621                                                bool *autoneg)
622 {
623         s32 err = 0;
624
625         DEBUGFUNC("txgbe_get_copper_link_capabilities");
626
627         *autoneg = true;
628         if (!hw->phy.speeds_supported)
629                 err = txgbe_get_copper_speeds_supported(hw);
630
631         *speed = hw->phy.speeds_supported;
632         return err;
633 }
634
635 /**
636  *  txgbe_check_phy_link_tnx - Determine link and speed status
637  *  @hw: pointer to hardware structure
638  *  @speed: current link speed
639  *  @link_up: true is link is up, false otherwise
640  *
641  *  Reads the VS1 register to determine if link is up and the current speed for
642  *  the PHY.
643  **/
644 s32 txgbe_check_phy_link_tnx(struct txgbe_hw *hw, u32 *speed,
645                              bool *link_up)
646 {
647         s32 err = 0;
648         u32 time_out;
649         u32 max_time_out = 10;
650         u16 phy_link = 0;
651         u16 phy_speed = 0;
652         u16 phy_data = 0;
653
654         DEBUGFUNC("txgbe_check_phy_link_tnx");
655
656         /* Initialize speed and link to default case */
657         *link_up = false;
658         *speed = TXGBE_LINK_SPEED_10GB_FULL;
659
660         /*
661          * Check current speed and link status of the PHY register.
662          * This is a vendor specific register and may have to
663          * be changed for other copper PHYs.
664          */
665         for (time_out = 0; time_out < max_time_out; time_out++) {
666                 usec_delay(10);
667                 err = hw->phy.read_reg(hw,
668                                         TXGBE_MD_VENDOR_SPECIFIC_1_STATUS,
669                                         TXGBE_MD_DEV_VENDOR_1,
670                                         &phy_data);
671                 phy_link = phy_data & TXGBE_MD_VENDOR_SPECIFIC_1_LINK_STATUS;
672                 phy_speed = phy_data &
673                                  TXGBE_MD_VENDOR_SPECIFIC_1_SPEED_STATUS;
674                 if (phy_link == TXGBE_MD_VENDOR_SPECIFIC_1_LINK_STATUS) {
675                         *link_up = true;
676                         if (phy_speed ==
677                             TXGBE_MD_VENDOR_SPECIFIC_1_SPEED_STATUS)
678                                 *speed = TXGBE_LINK_SPEED_1GB_FULL;
679                         break;
680                 }
681         }
682
683         return err;
684 }
685
686 /**
687  *  txgbe_setup_phy_link_tnx - Set and restart auto-neg
688  *  @hw: pointer to hardware structure
689  *
690  *  Restart auto-negotiation and PHY and waits for completion.
691  **/
692 s32 txgbe_setup_phy_link_tnx(struct txgbe_hw *hw)
693 {
694         s32 err = 0;
695         u16 autoneg_reg = TXGBE_MII_AUTONEG_REG;
696         bool autoneg = false;
697         u32 speed;
698
699         DEBUGFUNC("txgbe_setup_phy_link_tnx");
700
701         txgbe_get_copper_link_capabilities(hw, &speed, &autoneg);
702
703         if (speed & TXGBE_LINK_SPEED_10GB_FULL) {
704                 /* Set or unset auto-negotiation 10G advertisement */
705                 hw->phy.read_reg(hw, TXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
706                                      TXGBE_MD_DEV_AUTO_NEG,
707                                      &autoneg_reg);
708
709                 autoneg_reg &= ~TXGBE_MII_10GBASE_T_ADVERTISE;
710                 if (hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_10GB_FULL)
711                         autoneg_reg |= TXGBE_MII_10GBASE_T_ADVERTISE;
712
713                 hw->phy.write_reg(hw, TXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
714                                       TXGBE_MD_DEV_AUTO_NEG,
715                                       autoneg_reg);
716         }
717
718         if (speed & TXGBE_LINK_SPEED_1GB_FULL) {
719                 /* Set or unset auto-negotiation 1G advertisement */
720                 hw->phy.read_reg(hw, TXGBE_MII_AUTONEG_XNP_TX_REG,
721                                      TXGBE_MD_DEV_AUTO_NEG,
722                                      &autoneg_reg);
723
724                 autoneg_reg &= ~TXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
725                 if (hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_1GB_FULL)
726                         autoneg_reg |= TXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
727
728                 hw->phy.write_reg(hw, TXGBE_MII_AUTONEG_XNP_TX_REG,
729                                       TXGBE_MD_DEV_AUTO_NEG,
730                                       autoneg_reg);
731         }
732
733         if (speed & TXGBE_LINK_SPEED_100M_FULL) {
734                 /* Set or unset auto-negotiation 100M advertisement */
735                 hw->phy.read_reg(hw, TXGBE_MII_AUTONEG_ADVERTISE_REG,
736                                      TXGBE_MD_DEV_AUTO_NEG,
737                                      &autoneg_reg);
738
739                 autoneg_reg &= ~TXGBE_MII_100BASE_T_ADVERTISE;
740                 if (hw->phy.autoneg_advertised & TXGBE_LINK_SPEED_100M_FULL)
741                         autoneg_reg |= TXGBE_MII_100BASE_T_ADVERTISE;
742
743                 hw->phy.write_reg(hw, TXGBE_MII_AUTONEG_ADVERTISE_REG,
744                                       TXGBE_MD_DEV_AUTO_NEG,
745                                       autoneg_reg);
746         }
747
748         /* Blocked by MNG FW so don't reset PHY */
749         if (txgbe_check_reset_blocked(hw))
750                 return err;
751
752         /* Restart PHY auto-negotiation. */
753         hw->phy.read_reg(hw, TXGBE_MD_AUTO_NEG_CONTROL,
754                              TXGBE_MD_DEV_AUTO_NEG, &autoneg_reg);
755
756         autoneg_reg |= TXGBE_MII_RESTART;
757
758         hw->phy.write_reg(hw, TXGBE_MD_AUTO_NEG_CONTROL,
759                               TXGBE_MD_DEV_AUTO_NEG, autoneg_reg);
760
761         return err;
762 }
763
764 /**
765  *  txgbe_identify_module - Identifies module type
766  *  @hw: pointer to hardware structure
767  *
768  *  Determines HW type and calls appropriate function.
769  **/
770 s32 txgbe_identify_module(struct txgbe_hw *hw)
771 {
772         s32 err = TXGBE_ERR_SFP_NOT_PRESENT;
773
774         DEBUGFUNC("txgbe_identify_module");
775
776         switch (hw->phy.media_type) {
777         case txgbe_media_type_fiber:
778                 err = txgbe_identify_sfp_module(hw);
779                 break;
780
781         case txgbe_media_type_fiber_qsfp:
782                 err = txgbe_identify_qsfp_module(hw);
783                 break;
784
785         default:
786                 hw->phy.sfp_type = txgbe_sfp_type_not_present;
787                 err = TXGBE_ERR_SFP_NOT_PRESENT;
788                 break;
789         }
790
791         return err;
792 }
793
794 /**
795  *  txgbe_identify_sfp_module - Identifies SFP modules
796  *  @hw: pointer to hardware structure
797  *
798  *  Searches for and identifies the SFP module and assigns appropriate PHY type.
799  **/
800 s32 txgbe_identify_sfp_module(struct txgbe_hw *hw)
801 {
802         s32 err = TXGBE_ERR_PHY_ADDR_INVALID;
803         u32 vendor_oui = 0;
804         enum txgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
805         u8 identifier = 0;
806         u8 comp_codes_1g = 0;
807         u8 comp_codes_10g = 0;
808         u8 oui_bytes[3] = {0, 0, 0};
809         u8 cable_tech = 0;
810         u8 cable_spec = 0;
811         u16 enforce_sfp = 0;
812
813         DEBUGFUNC("txgbe_identify_sfp_module");
814
815         if (hw->phy.media_type != txgbe_media_type_fiber) {
816                 hw->phy.sfp_type = txgbe_sfp_type_not_present;
817                 return TXGBE_ERR_SFP_NOT_PRESENT;
818         }
819
820         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_IDENTIFIER,
821                                              &identifier);
822         if (err != 0) {
823 ERR_I2C:
824                 hw->phy.sfp_type = txgbe_sfp_type_not_present;
825                 if (hw->phy.type != txgbe_phy_nl) {
826                         hw->phy.id = 0;
827                         hw->phy.type = txgbe_phy_unknown;
828                 }
829                 return TXGBE_ERR_SFP_NOT_PRESENT;
830         }
831
832         if (identifier != TXGBE_SFF_IDENTIFIER_SFP) {
833                 hw->phy.type = txgbe_phy_sfp_unsupported;
834                 return TXGBE_ERR_SFP_NOT_SUPPORTED;
835         }
836
837         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_1GBE_COMP_CODES,
838                                              &comp_codes_1g);
839         if (err != 0)
840                 goto ERR_I2C;
841
842         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_10GBE_COMP_CODES,
843                                              &comp_codes_10g);
844         if (err != 0)
845                 goto ERR_I2C;
846
847         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_CABLE_TECHNOLOGY,
848                                              &cable_tech);
849         if (err != 0)
850                 goto ERR_I2C;
851
852          /* ID Module
853           * =========
854           * 0   SFP_DA_CU
855           * 1   SFP_SR
856           * 2   SFP_LR
857           * 3   SFP_DA_CORE0 - chip-specific
858           * 4   SFP_DA_CORE1 - chip-specific
859           * 5   SFP_SR/LR_CORE0 - chip-specific
860           * 6   SFP_SR/LR_CORE1 - chip-specific
861           * 7   SFP_act_lmt_DA_CORE0 - chip-specific
862           * 8   SFP_act_lmt_DA_CORE1 - chip-specific
863           * 9   SFP_1g_cu_CORE0 - chip-specific
864           * 10  SFP_1g_cu_CORE1 - chip-specific
865           * 11  SFP_1g_sx_CORE0 - chip-specific
866           * 12  SFP_1g_sx_CORE1 - chip-specific
867           */
868         if (cable_tech & TXGBE_SFF_CABLE_DA_PASSIVE) {
869                 if (hw->bus.lan_id == 0)
870                         hw->phy.sfp_type = txgbe_sfp_type_da_cu_core0;
871                 else
872                         hw->phy.sfp_type = txgbe_sfp_type_da_cu_core1;
873         } else if (cable_tech & TXGBE_SFF_CABLE_DA_ACTIVE) {
874                 err = hw->phy.read_i2c_eeprom(hw,
875                         TXGBE_SFF_CABLE_SPEC_COMP, &cable_spec);
876                 if (err != 0)
877                         goto ERR_I2C;
878                 if (cable_spec & TXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
879                         hw->phy.sfp_type = (hw->bus.lan_id == 0
880                                 ? txgbe_sfp_type_da_act_lmt_core0
881                                 : txgbe_sfp_type_da_act_lmt_core1);
882                 } else {
883                         hw->phy.sfp_type = txgbe_sfp_type_unknown;
884                 }
885         } else if (comp_codes_10g &
886                    (TXGBE_SFF_10GBASESR_CAPABLE |
887                     TXGBE_SFF_10GBASELR_CAPABLE)) {
888                 hw->phy.sfp_type = (hw->bus.lan_id == 0
889                                 ? txgbe_sfp_type_srlr_core0
890                                 : txgbe_sfp_type_srlr_core1);
891         } else if (comp_codes_1g & TXGBE_SFF_1GBASET_CAPABLE) {
892                 hw->phy.sfp_type = (hw->bus.lan_id == 0
893                                 ? txgbe_sfp_type_1g_cu_core0
894                                 : txgbe_sfp_type_1g_cu_core1);
895         } else if (comp_codes_1g & TXGBE_SFF_1GBASESX_CAPABLE) {
896                 hw->phy.sfp_type = (hw->bus.lan_id == 0
897                                 ? txgbe_sfp_type_1g_sx_core0
898                                 : txgbe_sfp_type_1g_sx_core1);
899         } else if (comp_codes_1g & TXGBE_SFF_1GBASELX_CAPABLE) {
900                 hw->phy.sfp_type = (hw->bus.lan_id == 0
901                                 ? txgbe_sfp_type_1g_lx_core0
902                                 : txgbe_sfp_type_1g_lx_core1);
903         } else {
904                 hw->phy.sfp_type = txgbe_sfp_type_unknown;
905         }
906
907         if (hw->phy.sfp_type != stored_sfp_type)
908                 hw->phy.sfp_setup_needed = true;
909
910         /* Determine if the SFP+ PHY is dual speed or not. */
911         hw->phy.multispeed_fiber = false;
912         if (((comp_codes_1g & TXGBE_SFF_1GBASESX_CAPABLE) &&
913              (comp_codes_10g & TXGBE_SFF_10GBASESR_CAPABLE)) ||
914             ((comp_codes_1g & TXGBE_SFF_1GBASELX_CAPABLE) &&
915              (comp_codes_10g & TXGBE_SFF_10GBASELR_CAPABLE)))
916                 hw->phy.multispeed_fiber = true;
917
918         /* Determine PHY vendor */
919         if (hw->phy.type != txgbe_phy_nl) {
920                 hw->phy.id = identifier;
921                 err = hw->phy.read_i2c_eeprom(hw,
922                         TXGBE_SFF_VENDOR_OUI_BYTE0, &oui_bytes[0]);
923                 if (err != 0)
924                         goto ERR_I2C;
925
926                 err = hw->phy.read_i2c_eeprom(hw,
927                         TXGBE_SFF_VENDOR_OUI_BYTE1, &oui_bytes[1]);
928                 if (err != 0)
929                         goto ERR_I2C;
930
931                 err = hw->phy.read_i2c_eeprom(hw,
932                         TXGBE_SFF_VENDOR_OUI_BYTE2, &oui_bytes[2]);
933                 if (err != 0)
934                         goto ERR_I2C;
935
936                 vendor_oui = ((u32)oui_bytes[0] << 24) |
937                              ((u32)oui_bytes[1] << 16) |
938                              ((u32)oui_bytes[2] << 8);
939                 switch (vendor_oui) {
940                 case TXGBE_SFF_VENDOR_OUI_TYCO:
941                         if (cable_tech & TXGBE_SFF_CABLE_DA_PASSIVE)
942                                 hw->phy.type = txgbe_phy_sfp_tyco_passive;
943                         break;
944                 case TXGBE_SFF_VENDOR_OUI_FTL:
945                         if (cable_tech & TXGBE_SFF_CABLE_DA_ACTIVE)
946                                 hw->phy.type = txgbe_phy_sfp_ftl_active;
947                         else
948                                 hw->phy.type = txgbe_phy_sfp_ftl;
949                         break;
950                 case TXGBE_SFF_VENDOR_OUI_AVAGO:
951                         hw->phy.type = txgbe_phy_sfp_avago;
952                         break;
953                 case TXGBE_SFF_VENDOR_OUI_INTEL:
954                         hw->phy.type = txgbe_phy_sfp_intel;
955                         break;
956                 default:
957                         if (cable_tech & TXGBE_SFF_CABLE_DA_PASSIVE)
958                                 hw->phy.type = txgbe_phy_sfp_unknown_passive;
959                         else if (cable_tech & TXGBE_SFF_CABLE_DA_ACTIVE)
960                                 hw->phy.type = txgbe_phy_sfp_unknown_active;
961                         else
962                                 hw->phy.type = txgbe_phy_sfp_unknown;
963                         break;
964                 }
965         }
966
967         /* Allow any DA cable vendor */
968         if (cable_tech & (TXGBE_SFF_CABLE_DA_PASSIVE |
969                           TXGBE_SFF_CABLE_DA_ACTIVE)) {
970                 return 0;
971         }
972
973         /* Verify supported 1G SFP modules */
974         if (comp_codes_10g == 0 &&
975             !(hw->phy.sfp_type == txgbe_sfp_type_1g_cu_core1 ||
976               hw->phy.sfp_type == txgbe_sfp_type_1g_cu_core0 ||
977               hw->phy.sfp_type == txgbe_sfp_type_1g_lx_core0 ||
978               hw->phy.sfp_type == txgbe_sfp_type_1g_lx_core1 ||
979               hw->phy.sfp_type == txgbe_sfp_type_1g_sx_core0 ||
980               hw->phy.sfp_type == txgbe_sfp_type_1g_sx_core1)) {
981                 hw->phy.type = txgbe_phy_sfp_unsupported;
982                 return TXGBE_ERR_SFP_NOT_SUPPORTED;
983         }
984
985         hw->mac.get_device_caps(hw, &enforce_sfp);
986         if (!(enforce_sfp & TXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
987             !hw->allow_unsupported_sfp &&
988             !(hw->phy.sfp_type == txgbe_sfp_type_1g_cu_core0 ||
989               hw->phy.sfp_type == txgbe_sfp_type_1g_cu_core1 ||
990               hw->phy.sfp_type == txgbe_sfp_type_1g_lx_core0 ||
991               hw->phy.sfp_type == txgbe_sfp_type_1g_lx_core1 ||
992               hw->phy.sfp_type == txgbe_sfp_type_1g_sx_core0 ||
993               hw->phy.sfp_type == txgbe_sfp_type_1g_sx_core1)) {
994                 DEBUGOUT("SFP+ module not supported\n");
995                 hw->phy.type = txgbe_phy_sfp_unsupported;
996                 return TXGBE_ERR_SFP_NOT_SUPPORTED;
997         }
998
999         return err;
1000 }
1001
1002 /**
1003  *  txgbe_identify_qsfp_module - Identifies QSFP modules
1004  *  @hw: pointer to hardware structure
1005  *
1006  *  Searches for and identifies the QSFP module and assigns appropriate PHY type
1007  **/
1008 s32 txgbe_identify_qsfp_module(struct txgbe_hw *hw)
1009 {
1010         s32 err = TXGBE_ERR_PHY_ADDR_INVALID;
1011         u32 vendor_oui = 0;
1012         enum txgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1013         u8 identifier = 0;
1014         u8 comp_codes_1g = 0;
1015         u8 comp_codes_10g = 0;
1016         u8 oui_bytes[3] = {0, 0, 0};
1017         u16 enforce_sfp = 0;
1018         u8 connector = 0;
1019         u8 cable_length = 0;
1020         u8 device_tech = 0;
1021         bool active_cable = false;
1022
1023         DEBUGFUNC("txgbe_identify_qsfp_module");
1024
1025         if (hw->phy.media_type != txgbe_media_type_fiber_qsfp) {
1026                 hw->phy.sfp_type = txgbe_sfp_type_not_present;
1027                 err = TXGBE_ERR_SFP_NOT_PRESENT;
1028                 goto out;
1029         }
1030
1031         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_IDENTIFIER,
1032                                              &identifier);
1033 ERR_I2C:
1034         if (err != 0) {
1035                 hw->phy.sfp_type = txgbe_sfp_type_not_present;
1036                 hw->phy.id = 0;
1037                 hw->phy.type = txgbe_phy_unknown;
1038                 return TXGBE_ERR_SFP_NOT_PRESENT;
1039         }
1040         if (identifier != TXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1041                 hw->phy.type = txgbe_phy_sfp_unsupported;
1042                 err = TXGBE_ERR_SFP_NOT_SUPPORTED;
1043                 goto out;
1044         }
1045
1046         hw->phy.id = identifier;
1047
1048         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_QSFP_10GBE_COMP,
1049                                              &comp_codes_10g);
1050
1051         if (err != 0)
1052                 goto ERR_I2C;
1053
1054         err = hw->phy.read_i2c_eeprom(hw, TXGBE_SFF_QSFP_1GBE_COMP,
1055                                              &comp_codes_1g);
1056
1057         if (err != 0)
1058                 goto ERR_I2C;
1059
1060         if (comp_codes_10g & TXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1061                 hw->phy.type = txgbe_phy_qsfp_unknown_passive;
1062                 if (hw->bus.lan_id == 0)
1063                         hw->phy.sfp_type = txgbe_sfp_type_da_cu_core0;
1064                 else
1065                         hw->phy.sfp_type = txgbe_sfp_type_da_cu_core1;
1066         } else if (comp_codes_10g & (TXGBE_SFF_10GBASESR_CAPABLE |
1067                                      TXGBE_SFF_10GBASELR_CAPABLE)) {
1068                 if (hw->bus.lan_id == 0)
1069                         hw->phy.sfp_type = txgbe_sfp_type_srlr_core0;
1070                 else
1071                         hw->phy.sfp_type = txgbe_sfp_type_srlr_core1;
1072         } else {
1073                 if (comp_codes_10g & TXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1074                         active_cable = true;
1075
1076                 if (!active_cable) {
1077                         hw->phy.read_i2c_eeprom(hw,
1078                                         TXGBE_SFF_QSFP_CONNECTOR,
1079                                         &connector);
1080
1081                         hw->phy.read_i2c_eeprom(hw,
1082                                         TXGBE_SFF_QSFP_CABLE_LENGTH,
1083                                         &cable_length);
1084
1085                         hw->phy.read_i2c_eeprom(hw,
1086                                         TXGBE_SFF_QSFP_DEVICE_TECH,
1087                                         &device_tech);
1088
1089                         if (connector ==
1090                                      TXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE &&
1091                             cable_length > 0 &&
1092                             ((device_tech >> 4) ==
1093                                      TXGBE_SFF_QSFP_TRANSMITTER_850NM_VCSEL))
1094                                 active_cable = true;
1095                 }
1096
1097                 if (active_cable) {
1098                         hw->phy.type = txgbe_phy_qsfp_unknown_active;
1099                         if (hw->bus.lan_id == 0)
1100                                 hw->phy.sfp_type =
1101                                         txgbe_sfp_type_da_act_lmt_core0;
1102                         else
1103                                 hw->phy.sfp_type =
1104                                         txgbe_sfp_type_da_act_lmt_core1;
1105                 } else {
1106                         /* unsupported module type */
1107                         hw->phy.type = txgbe_phy_sfp_unsupported;
1108                         err = TXGBE_ERR_SFP_NOT_SUPPORTED;
1109                         goto out;
1110                 }
1111         }
1112
1113         if (hw->phy.sfp_type != stored_sfp_type)
1114                 hw->phy.sfp_setup_needed = true;
1115
1116         /* Determine if the QSFP+ PHY is dual speed or not. */
1117         hw->phy.multispeed_fiber = false;
1118         if (((comp_codes_1g & TXGBE_SFF_1GBASESX_CAPABLE) &&
1119            (comp_codes_10g & TXGBE_SFF_10GBASESR_CAPABLE)) ||
1120            ((comp_codes_1g & TXGBE_SFF_1GBASELX_CAPABLE) &&
1121            (comp_codes_10g & TXGBE_SFF_10GBASELR_CAPABLE)))
1122                 hw->phy.multispeed_fiber = true;
1123
1124         /* Determine PHY vendor for optical modules */
1125         if (comp_codes_10g & (TXGBE_SFF_10GBASESR_CAPABLE |
1126                               TXGBE_SFF_10GBASELR_CAPABLE))  {
1127                 err = hw->phy.read_i2c_eeprom(hw,
1128                                             TXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1129                                             &oui_bytes[0]);
1130
1131                 if (err != 0)
1132                         goto ERR_I2C;
1133
1134                 err = hw->phy.read_i2c_eeprom(hw,
1135                                             TXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1136                                             &oui_bytes[1]);
1137
1138                 if (err != 0)
1139                         goto ERR_I2C;
1140
1141                 err = hw->phy.read_i2c_eeprom(hw,
1142                                             TXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1143                                             &oui_bytes[2]);
1144
1145                 if (err != 0)
1146                         goto ERR_I2C;
1147
1148                 vendor_oui =
1149                   ((oui_bytes[0] << 24) |
1150                    (oui_bytes[1] << 16) |
1151                    (oui_bytes[2] << 8));
1152
1153                 if (vendor_oui == TXGBE_SFF_VENDOR_OUI_INTEL)
1154                         hw->phy.type = txgbe_phy_qsfp_intel;
1155                 else
1156                         hw->phy.type = txgbe_phy_qsfp_unknown;
1157
1158                 hw->mac.get_device_caps(hw, &enforce_sfp);
1159                 if (!(enforce_sfp & TXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1160                         /* Make sure we're a supported PHY type */
1161                         if (hw->phy.type == txgbe_phy_qsfp_intel) {
1162                                 err = 0;
1163                         } else {
1164                                 if (hw->allow_unsupported_sfp) {
1165                                         DEBUGOUT("WARNING: Wangxun (R) Network Connections are quality tested using Wangxun (R) Ethernet Optics. "
1166                                                 "Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. "
1167                                                 "Wangxun Corporation is not responsible for any harm caused by using untested modules.\n");
1168                                         err = 0;
1169                                 } else {
1170                                         DEBUGOUT("QSFP module not supported\n");
1171                                         hw->phy.type =
1172                                                 txgbe_phy_sfp_unsupported;
1173                                         err = TXGBE_ERR_SFP_NOT_SUPPORTED;
1174                                 }
1175                         }
1176                 } else {
1177                         err = 0;
1178                 }
1179         }
1180
1181 out:
1182         return err;
1183 }
1184
1185 /**
1186  *  txgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
1187  *  @hw: pointer to hardware structure
1188  *  @byte_offset: EEPROM byte offset to read
1189  *  @eeprom_data: value read
1190  *
1191  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1192  **/
1193 s32 txgbe_read_i2c_eeprom(struct txgbe_hw *hw, u8 byte_offset,
1194                                   u8 *eeprom_data)
1195 {
1196         DEBUGFUNC("txgbe_read_i2c_eeprom");
1197
1198         return hw->phy.read_i2c_byte(hw, byte_offset,
1199                                          TXGBE_I2C_EEPROM_DEV_ADDR,
1200                                          eeprom_data);
1201 }
1202
1203 /**
1204  *  txgbe_read_i2c_sff8472 - Reads 8 bit word over I2C interface
1205  *  @hw: pointer to hardware structure
1206  *  @byte_offset: byte offset at address 0xA2
1207  *  @sff8472_data: value read
1208  *
1209  *  Performs byte read operation to SFP module's SFF-8472 data over I2C
1210  **/
1211 s32 txgbe_read_i2c_sff8472(struct txgbe_hw *hw, u8 byte_offset,
1212                                           u8 *sff8472_data)
1213 {
1214         return hw->phy.read_i2c_byte(hw, byte_offset,
1215                                          TXGBE_I2C_EEPROM_DEV_ADDR2,
1216                                          sff8472_data);
1217 }
1218
1219 /**
1220  *  txgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
1221  *  @hw: pointer to hardware structure
1222  *  @byte_offset: EEPROM byte offset to write
1223  *  @eeprom_data: value to write
1224  *
1225  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
1226  **/
1227 s32 txgbe_write_i2c_eeprom(struct txgbe_hw *hw, u8 byte_offset,
1228                                    u8 eeprom_data)
1229 {
1230         DEBUGFUNC("txgbe_write_i2c_eeprom");
1231
1232         return hw->phy.write_i2c_byte(hw, byte_offset,
1233                                           TXGBE_I2C_EEPROM_DEV_ADDR,
1234                                           eeprom_data);
1235 }
1236
1237 /**
1238  *  txgbe_read_i2c_byte_unlocked - Reads 8 bit word over I2C
1239  *  @hw: pointer to hardware structure
1240  *  @byte_offset: byte offset to read
1241  *  @dev_addr: address to read from
1242  *  @data: value read
1243  *
1244  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1245  *  a specified device address.
1246  **/
1247 s32 txgbe_read_i2c_byte_unlocked(struct txgbe_hw *hw, u8 byte_offset,
1248                                            u8 dev_addr, u8 *data)
1249 {
1250         UNREFERENCED_PARAMETER(dev_addr);
1251
1252         DEBUGFUNC("txgbe_read_i2c_byte");
1253
1254         txgbe_i2c_start(hw);
1255
1256         /* wait tx empty */
1257         if (!po32m(hw, TXGBE_I2CICR, TXGBE_I2CICR_TXEMPTY,
1258                 TXGBE_I2CICR_TXEMPTY, NULL, 100, 100)) {
1259                 return -TERR_TIMEOUT;
1260         }
1261
1262         /* read data */
1263         wr32(hw, TXGBE_I2CDATA,
1264                         byte_offset | TXGBE_I2CDATA_STOP);
1265         wr32(hw, TXGBE_I2CDATA, TXGBE_I2CDATA_READ);
1266
1267         /* wait for read complete */
1268         if (!po32m(hw, TXGBE_I2CICR, TXGBE_I2CICR_RXFULL,
1269                 TXGBE_I2CICR_RXFULL, NULL, 100, 100)) {
1270                 return -TERR_TIMEOUT;
1271         }
1272
1273         txgbe_i2c_stop(hw);
1274
1275         *data = 0xFF & rd32(hw, TXGBE_I2CDATA);
1276
1277         return 0;
1278 }
1279
1280 /**
1281  *  txgbe_read_i2c_byte - Reads 8 bit word over I2C
1282  *  @hw: pointer to hardware structure
1283  *  @byte_offset: byte offset to read
1284  *  @dev_addr: address to read from
1285  *  @data: value read
1286  *
1287  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
1288  *  a specified device address.
1289  **/
1290 s32 txgbe_read_i2c_byte(struct txgbe_hw *hw, u8 byte_offset,
1291                                 u8 dev_addr, u8 *data)
1292 {
1293         u32 swfw_mask = hw->phy.phy_semaphore_mask;
1294         int err = 0;
1295
1296         if (hw->mac.acquire_swfw_sync(hw, swfw_mask))
1297                 return TXGBE_ERR_SWFW_SYNC;
1298         err = txgbe_read_i2c_byte_unlocked(hw, byte_offset, dev_addr, data);
1299         hw->mac.release_swfw_sync(hw, swfw_mask);
1300         return err;
1301 }
1302
1303 /**
1304  *  txgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C
1305  *  @hw: pointer to hardware structure
1306  *  @byte_offset: byte offset to write
1307  *  @dev_addr: address to write to
1308  *  @data: value to write
1309  *
1310  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1311  *  a specified device address.
1312  **/
1313 s32 txgbe_write_i2c_byte_unlocked(struct txgbe_hw *hw, u8 byte_offset,
1314                                             u8 dev_addr, u8 data)
1315 {
1316         UNREFERENCED_PARAMETER(dev_addr);
1317
1318         DEBUGFUNC("txgbe_write_i2c_byte");
1319
1320         txgbe_i2c_start(hw);
1321
1322         /* wait tx empty */
1323         if (!po32m(hw, TXGBE_I2CICR, TXGBE_I2CICR_TXEMPTY,
1324                 TXGBE_I2CICR_TXEMPTY, NULL, 100, 100)) {
1325                 return -TERR_TIMEOUT;
1326         }
1327
1328         wr32(hw, TXGBE_I2CDATA, byte_offset | TXGBE_I2CDATA_STOP);
1329         wr32(hw, TXGBE_I2CDATA, data | TXGBE_I2CDATA_WRITE);
1330
1331         /* wait for write complete */
1332         if (!po32m(hw, TXGBE_I2CICR, TXGBE_I2CICR_RXFULL,
1333                 TXGBE_I2CICR_RXFULL, NULL, 100, 100)) {
1334                 return -TERR_TIMEOUT;
1335         }
1336         txgbe_i2c_stop(hw);
1337
1338         return 0;
1339 }
1340
1341 /**
1342  *  txgbe_write_i2c_byte - Writes 8 bit word over I2C
1343  *  @hw: pointer to hardware structure
1344  *  @byte_offset: byte offset to write
1345  *  @dev_addr: address to write to
1346  *  @data: value to write
1347  *
1348  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
1349  *  a specified device address.
1350  **/
1351 s32 txgbe_write_i2c_byte(struct txgbe_hw *hw, u8 byte_offset,
1352                                  u8 dev_addr, u8 data)
1353 {
1354         u32 swfw_mask = hw->phy.phy_semaphore_mask;
1355         int err = 0;
1356
1357         if (hw->mac.acquire_swfw_sync(hw, swfw_mask))
1358                 return TXGBE_ERR_SWFW_SYNC;
1359         err = txgbe_write_i2c_byte_unlocked(hw, byte_offset, dev_addr, data);
1360         hw->mac.release_swfw_sync(hw, swfw_mask);
1361
1362         return err;
1363 }
1364
1365 /**
1366  *  txgbe_i2c_start - Sets I2C start condition
1367  *  @hw: pointer to hardware structure
1368  *
1369  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
1370  **/
1371 static void txgbe_i2c_start(struct txgbe_hw *hw)
1372 {
1373         DEBUGFUNC("txgbe_i2c_start");
1374
1375         wr32(hw, TXGBE_I2CENA, 0);
1376
1377         wr32(hw, TXGBE_I2CCON,
1378                 (TXGBE_I2CCON_MENA |
1379                 TXGBE_I2CCON_SPEED(1) |
1380                 TXGBE_I2CCON_RESTART |
1381                 TXGBE_I2CCON_SDIA));
1382         wr32(hw, TXGBE_I2CTAR, TXGBE_I2C_SLAVEADDR);
1383         wr32(hw, TXGBE_I2CSSSCLHCNT, 600);
1384         wr32(hw, TXGBE_I2CSSSCLLCNT, 600);
1385         wr32(hw, TXGBE_I2CRXTL, 0); /* 1byte for rx full signal */
1386         wr32(hw, TXGBE_I2CTXTL, 4);
1387         wr32(hw, TXGBE_I2CSCLTMOUT, 0xFFFFFF);
1388         wr32(hw, TXGBE_I2CSDATMOUT, 0xFFFFFF);
1389
1390         wr32(hw, TXGBE_I2CICM, 0);
1391         wr32(hw, TXGBE_I2CENA, 1);
1392 }
1393
1394 /**
1395  *  txgbe_i2c_stop - Sets I2C stop condition
1396  *  @hw: pointer to hardware structure
1397  *
1398  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
1399  **/
1400 static void txgbe_i2c_stop(struct txgbe_hw *hw)
1401 {
1402         DEBUGFUNC("txgbe_i2c_stop");
1403
1404         /* wait for completion */
1405         if (!po32m(hw, TXGBE_I2CSTAT, TXGBE_I2CSTAT_MST,
1406                 0, NULL, 100, 100)) {
1407                 DEBUGFUNC("i2c stop timeout.");
1408         }
1409
1410         wr32(hw, TXGBE_I2CENA, 0);
1411 }
1412
1413 static void
1414 txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
1415 {
1416         u32 value;
1417
1418         wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0x3002);
1419         wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105);
1420         wr32_epcs(hw, SR_MII_MMD_DIGI_CTL, 0x0200);
1421         value = rd32_epcs(hw, SR_MII_MMD_CTL);
1422         value = (value & ~0x1200) | (0x1 << 12) | (0x1 << 9);
1423         wr32_epcs(hw, SR_MII_MMD_CTL, value);
1424 }
1425
1426 static s32
1427 txgbe_set_link_to_kr(struct txgbe_hw *hw, bool autoneg)
1428 {
1429         u32 i;
1430         u16 value;
1431         s32 err = 0;
1432
1433         /* 1. Wait xpcs power-up good */
1434         for (i = 0; i < 100; i++) {
1435                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_STATUS) &
1436                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_MASK) ==
1437                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_POWER_GOOD)
1438                         break;
1439                 msec_delay(10);
1440         }
1441         if (i == 100) {
1442                 err = TXGBE_ERR_XPCS_POWER_UP_FAILED;
1443                 goto out;
1444         }
1445         BP_LOG("It is set to kr.\n");
1446
1447         wr32_epcs(hw, VR_AN_INTR_MSK, 0x7);
1448         wr32_epcs(hw, TXGBE_PHY_TX_POWER_ST_CTL, 0x00FC);
1449         wr32_epcs(hw, TXGBE_PHY_RX_POWER_ST_CTL, 0x00FC);
1450
1451         if (!autoneg) {
1452                 /* 2. Disable xpcs AN-73 */
1453                 wr32_epcs(hw, SR_AN_CTRL,
1454                         SR_AN_CTRL_AN_EN | SR_AN_CTRL_EXT_NP);
1455
1456                 wr32_epcs(hw, VR_AN_KR_MODE_CL, VR_AN_KR_MODE_CL_PDET);
1457
1458                 if (!(hw->devarg.auto_neg == 1)) {
1459                         wr32_epcs(hw, SR_AN_CTRL, 0);
1460                         wr32_epcs(hw, VR_AN_KR_MODE_CL, 0);
1461                 }
1462                 if (hw->devarg.present  == 1) {
1463                         value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1);
1464                         value |= TXGBE_PHY_TX_EQ_CTL1_DEF;
1465                         wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1466                 }
1467                 if (hw->devarg.poll == 1) {
1468                         wr32_epcs(hw, VR_PMA_KRTR_TIMER_CTRL0,
1469                                 VR_PMA_KRTR_TIMER_MAX_WAIT);
1470                         wr32_epcs(hw, VR_PMA_KRTR_TIMER_CTRL2, 0xA697);
1471                 }
1472
1473                 /* 3. Set VR_XS_PMA_Gen5_12G_MPLLA_CTRL3 Register
1474                  * Bit[10:0](MPLLA_BANDWIDTH) = 11'd123 (default: 11'd16)
1475                  */
1476                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL3,
1477                         TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_10GBASER_KR);
1478
1479                 /* 4. Set VR_XS_PMA_Gen5_12G_MISC_CTRL0 Register
1480                  * Bit[12:8](RX_VREF_CTRL) = 5'hF (default: 5'h11)
1481                  */
1482                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0xCF00);
1483
1484                 /* 5. Set VR_XS_PMA_Gen5_12G_RX_EQ_CTRL0 Register
1485                  * Bit[15:8](VGA1/2_GAIN_0) = 8'h77
1486                  * Bit[7:5](CTLE_POLE_0) = 3'h2
1487                  * Bit[4:0](CTLE_BOOST_0) = 4'hA
1488                  */
1489                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0, 0x774A);
1490
1491                 /* 6. Set VR_MII_Gen5_12G_RX_GENCTRL3 Register
1492                  * Bit[2:0](LOS_TRSHLD_0) = 3'h4 (default: 3)
1493                  */
1494                 wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL3, 0x0004);
1495
1496                 /* 7. Initialize the mode by setting VR XS or PCS MMD Digital
1497                  * Control1 Register Bit[15](VR_RST)
1498                  */
1499                 wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0xA000);
1500
1501                 /* Wait phy initialization done */
1502                 for (i = 0; i < 100; i++) {
1503                         if ((rd32_epcs(hw,
1504                                 VR_XS_OR_PCS_MMD_DIGI_CTL1) &
1505                                 VR_XS_OR_PCS_MMD_DIGI_CTL1_VR_RST) == 0)
1506                                 break;
1507                         msleep(100);
1508                 }
1509                 if (i == 100) {
1510                         err = TXGBE_ERR_PHY_INIT_NOT_DONE;
1511                         goto out;
1512                 }
1513         } else {
1514                 wr32_epcs(hw, VR_AN_KR_MODE_CL, 0x1);
1515         }
1516
1517         if (hw->phy.ffe_set == TXGBE_BP_M_KR) {
1518                 value = (0x1804 & ~0x3F3F);
1519                 value |= hw->phy.ffe_main << 8 | hw->phy.ffe_pre;
1520                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
1521
1522                 value = (0x50 & ~0x7F) | (1 << 6) | hw->phy.ffe_post;
1523                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1524         }
1525 out:
1526         return err;
1527 }
1528
1529 static s32
1530 txgbe_set_link_to_kx4(struct txgbe_hw *hw, bool autoneg)
1531 {
1532         u32 i;
1533         s32 err = 0;
1534         u32 value;
1535
1536         /* Check link status, if already set, skip setting it again */
1537         if (hw->link_status == TXGBE_LINK_STATUS_KX4)
1538                 goto out;
1539
1540         BP_LOG("It is set to kx4.\n");
1541         wr32_epcs(hw, TXGBE_PHY_TX_POWER_ST_CTL, 0);
1542         wr32_epcs(hw, TXGBE_PHY_RX_POWER_ST_CTL, 0);
1543
1544         /* 1. Wait xpcs power-up good */
1545         for (i = 0; i < 100; i++) {
1546                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_STATUS) &
1547                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_MASK) ==
1548                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_POWER_GOOD)
1549                         break;
1550                 msec_delay(10);
1551         }
1552         if (i == 100) {
1553                 err = TXGBE_ERR_XPCS_POWER_UP_FAILED;
1554                 goto out;
1555         }
1556
1557         wr32m(hw, TXGBE_MACTXCFG, TXGBE_MACTXCFG_TXE,
1558                         ~TXGBE_MACTXCFG_TXE);
1559
1560         /* 2. Disable xpcs AN-73 */
1561         if (!autoneg)
1562                 wr32_epcs(hw, SR_AN_CTRL, 0x0);
1563         else
1564                 wr32_epcs(hw, SR_AN_CTRL, 0x3000);
1565
1566         /* Disable PHY MPLLA for eth mode change(after ECO) */
1567         wr32_ephy(hw, 0x4, 0x250A);
1568         txgbe_flush(hw);
1569         msec_delay(1);
1570
1571         /* Set the eth change_mode bit first in mis_rst register
1572          * for corresponding LAN port
1573          */
1574         wr32(hw, TXGBE_RST, TXGBE_RST_ETH(hw->bus.lan_id));
1575
1576         /* Set SR PCS Control2 Register Bits[1:0] = 2'b01
1577          * PCS_TYPE_SEL: non KR
1578          */
1579         wr32_epcs(hw, SR_XS_PCS_CTRL2,
1580                         SR_PCS_CTRL2_TYPE_SEL_X);
1581
1582         /* Set SR PMA MMD Control1 Register Bit[13] = 1'b1
1583          * SS13: 10G speed
1584          */
1585         wr32_epcs(hw, SR_PMA_CTRL1,
1586                         SR_PMA_CTRL1_SS13_KX4);
1587
1588         value = (0xf5f0 & ~0x7F0) |  (0x5 << 8) | (0x7 << 5) | 0xF0;
1589         wr32_epcs(hw, TXGBE_PHY_TX_GENCTRL1, value);
1590
1591         if ((hw->subsystem_device_id & 0xFF) == TXGBE_DEV_ID_MAC_XAUI)
1592                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0xCF00);
1593         else
1594                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0x4F00);
1595
1596         for (i = 0; i < 4; i++) {
1597                 if (i == 0)
1598                         value = (0x45 & ~0xFFFF) | (0x7 << 12) |
1599                                 (0x7 << 8) | 0x6;
1600                 else
1601                         value = (0xff06 & ~0xFFFF) | (0x7 << 12) |
1602                                 (0x7 << 8) | 0x6;
1603                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0 + i, value);
1604         }
1605
1606         value = 0x0 & ~0x7777;
1607         wr32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0, value);
1608
1609         wr32_epcs(hw, TXGBE_PHY_DFE_TAP_CTL0, 0x0);
1610
1611         value = (0x6db & ~0xFFF) | (0x1 << 9) | (0x1 << 6) | (0x1 << 3) | 0x1;
1612         wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL3, value);
1613
1614         /* Set VR XS, PMA, or MII Gen5 12G PHY MPLLA
1615          * Control 0 Register Bit[7:0] = 8'd40  //MPLLA_MULTIPLIER
1616          */
1617         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL0,
1618                         TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_OTHER);
1619
1620         /* Set VR XS, PMA or MII Gen5 12G PHY MPLLA
1621          * Control 3 Register Bit[10:0] = 11'd86  //MPLLA_BANDWIDTH
1622          */
1623         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL3,
1624                         TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_OTHER);
1625
1626         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1627          * Calibration Load 0 Register  Bit[12:0] = 13'd1360  //VCO_LD_VAL_0
1628          */
1629         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD0,
1630                         TXGBE_PHY_VCO_CAL_LD0_OTHER);
1631
1632         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1633          * Calibration Load 1 Register  Bit[12:0] = 13'd1360  //VCO_LD_VAL_1
1634          */
1635         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD1,
1636                         TXGBE_PHY_VCO_CAL_LD0_OTHER);
1637
1638         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1639          * Calibration Load 2 Register  Bit[12:0] = 13'd1360  //VCO_LD_VAL_2
1640          */
1641         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD2,
1642                         TXGBE_PHY_VCO_CAL_LD0_OTHER);
1643         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1644          * Calibration Load 3 Register  Bit[12:0] = 13'd1360  //VCO_LD_VAL_3
1645          */
1646         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD3,
1647                         TXGBE_PHY_VCO_CAL_LD0_OTHER);
1648         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1649          * Calibration Reference 0 Register Bit[5:0] = 6'd34  //VCO_REF_LD_0/1
1650          */
1651         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF0, 0x2222);
1652
1653         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1654          * Calibration Reference 1 Register Bit[5:0] = 6'd34  //VCO_REF_LD_2/3
1655          */
1656         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF1, 0x2222);
1657
1658         /* Set VR XS, PMA, or MII Gen5 12G PHY AFE-DFE
1659          * Enable Register Bit[7:0] = 8'd0  //AFE_EN_0/3_1, DFE_EN_0/3_1
1660          */
1661         wr32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE, 0x0);
1662
1663         /* Set  VR XS, PMA, or MII Gen5 12G PHY Rx
1664          * Equalization Control 4 Register Bit[3:0] = 4'd0  //CONT_ADAPT_0/3_1
1665          */
1666         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL, 0x00F0);
1667
1668         /* Set VR XS, PMA, or MII Gen5 12G PHY Tx Rate
1669          * Control Register Bit[14:12], Bit[10:8], Bit[6:4], Bit[2:0],
1670          * all rates to 3'b010  //TX0/1/2/3_RATE
1671          */
1672         wr32_epcs(hw, TXGBE_PHY_TX_RATE_CTL, 0x2222);
1673
1674         /* Set VR XS, PMA, or MII Gen5 12G PHY Rx Rate
1675          * Control Register Bit[13:12], Bit[9:8], Bit[5:4], Bit[1:0],
1676          * all rates to 2'b10  //RX0/1/2/3_RATE
1677          */
1678         wr32_epcs(hw, TXGBE_PHY_RX_RATE_CTL, 0x2222);
1679
1680         /* Set VR XS, PMA, or MII Gen5 12G PHY Tx General
1681          * Control 2 Register Bit[15:8] = 2'b01  //TX0/1/2/3_WIDTH: 10bits
1682          */
1683         wr32_epcs(hw, TXGBE_PHY_TX_GEN_CTL2, 0x5500);
1684
1685         /* Set VR XS, PMA, or MII Gen5 12G PHY Rx General
1686          * Control 2 Register Bit[15:8] = 2'b01  //RX0/1/2/3_WIDTH: 10bits
1687          */
1688         wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL2, 0x5500);
1689
1690         /* Set VR XS, PMA, or MII Gen5 12G PHY MPLLA Control
1691          * 2 Register Bit[10:8] = 3'b010
1692          * MPLLA_DIV16P5_CLK_EN=0, MPLLA_DIV10_CLK_EN=1, MPLLA_DIV8_CLK_EN=0
1693          */
1694         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL2,
1695                         TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_10);
1696
1697         wr32_epcs(hw, 0x1f0000, 0x0);
1698         wr32_epcs(hw, 0x1f8001, 0x0);
1699         wr32_epcs(hw, SR_MII_MMD_DIGI_CTL, 0x0);
1700
1701         /* 10. Initialize the mode by setting VR XS or PCS MMD Digital Control1
1702          * Register Bit[15](VR_RST)
1703          */
1704         wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0xA000);
1705
1706         /* Wait phy initialization done */
1707         for (i = 0; i < 100; i++) {
1708                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1) &
1709                         VR_XS_OR_PCS_MMD_DIGI_CTL1_VR_RST) == 0)
1710                         break;
1711                 msleep(100);
1712         }
1713
1714         /* If success, set link status */
1715         hw->link_status = TXGBE_LINK_STATUS_KX4;
1716
1717         if (i == 100) {
1718                 err = TXGBE_ERR_PHY_INIT_NOT_DONE;
1719                 goto out;
1720         }
1721
1722         if (hw->phy.ffe_set == TXGBE_BP_M_KX4) {
1723                 value = (0x1804 & ~0x3F3F);
1724                 value |= hw->phy.ffe_main << 8 | hw->phy.ffe_pre;
1725                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
1726
1727                 value = (0x50 & ~0x7F) | (1 << 6) | hw->phy.ffe_post;
1728                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1729         } else if (hw->fw_version <= TXGBE_FW_N_TXEQ) {
1730                 value = (0x1804 & ~0x3F3F);
1731                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
1732
1733                 value = (0x50 & ~0x7F) | 40 | (1 << 6);
1734                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1735         }
1736 out:
1737         return err;
1738 }
1739
1740 static s32
1741 txgbe_set_link_to_kx(struct txgbe_hw *hw,
1742                                u32 speed,
1743                                bool autoneg)
1744 {
1745         u32 i;
1746         s32 err = 0;
1747         u32 wdata = 0;
1748         u32 value;
1749
1750         /* Check link status, if already set, skip setting it again */
1751         if (hw->link_status == TXGBE_LINK_STATUS_KX)
1752                 goto out;
1753
1754         BP_LOG("It is set to kx. speed =0x%x\n", speed);
1755         wr32_epcs(hw, TXGBE_PHY_TX_POWER_ST_CTL, 0x00FC);
1756         wr32_epcs(hw, TXGBE_PHY_RX_POWER_ST_CTL, 0x00FC);
1757
1758         /* 1. Wait xpcs power-up good */
1759         for (i = 0; i < 100; i++) {
1760                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_STATUS) &
1761                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_MASK) ==
1762                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_POWER_GOOD)
1763                         break;
1764                 msec_delay(10);
1765         }
1766         if (i == 100) {
1767                 err = TXGBE_ERR_XPCS_POWER_UP_FAILED;
1768                 goto out;
1769         }
1770
1771         wr32m(hw, TXGBE_MACTXCFG, TXGBE_MACTXCFG_TXE,
1772                                 ~TXGBE_MACTXCFG_TXE);
1773
1774         /* 2. Disable xpcs AN-73 */
1775         if (!autoneg)
1776                 wr32_epcs(hw, SR_AN_CTRL, 0x0);
1777         else
1778                 wr32_epcs(hw, SR_AN_CTRL, 0x3000);
1779
1780         /* Disable PHY MPLLA for eth mode change(after ECO) */
1781         wr32_ephy(hw, 0x4, 0x240A);
1782         txgbe_flush(hw);
1783         msec_delay(1);
1784
1785         /* Set the eth change_mode bit first in mis_rst register
1786          * for corresponding LAN port
1787          */
1788         wr32(hw, TXGBE_RST, TXGBE_RST_ETH(hw->bus.lan_id));
1789
1790         /* Set SR PCS Control2 Register Bits[1:0] = 2'b01
1791          * PCS_TYPE_SEL: non KR
1792          */
1793         wr32_epcs(hw, SR_XS_PCS_CTRL2,
1794                         SR_PCS_CTRL2_TYPE_SEL_X);
1795
1796         /* Set SR PMA MMD Control1 Register Bit[13] = 1'b0
1797          * SS13: 1G speed
1798          */
1799         wr32_epcs(hw, SR_PMA_CTRL1,
1800                         SR_PMA_CTRL1_SS13_KX);
1801
1802         /* Set SR MII MMD Control Register to corresponding speed: {Bit[6],
1803          * Bit[13]}=[2'b00,2'b01,2'b10]->[10M,100M,1G]
1804          */
1805         if (speed == TXGBE_LINK_SPEED_100M_FULL)
1806                 wdata = 0x2100;
1807         else if (speed == TXGBE_LINK_SPEED_1GB_FULL)
1808                 wdata = 0x0140;
1809         else if (speed == TXGBE_LINK_SPEED_10M_FULL)
1810                 wdata = 0x0100;
1811         wr32_epcs(hw, SR_MII_MMD_CTL,
1812                         wdata);
1813
1814         value = (0xf5f0 & ~0x710) | (0x5 << 8) | 0x10;
1815         wr32_epcs(hw, TXGBE_PHY_TX_GENCTRL1, value);
1816
1817         if (hw->devarg.sgmii == 1)
1818                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0x4F00);
1819         else
1820                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0xCF00);
1821
1822         for (i = 0; i < 4; i++) {
1823                 if (i) {
1824                         value = 0xff06;
1825                 } else {
1826                         value = (0x45 & ~0xFFFF) | (0x7 << 12) |
1827                                 (0x7 << 8) | 0x6;
1828                 }
1829                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0 + i, value);
1830         }
1831
1832         value = 0x0 & ~0x7;
1833         wr32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0, value);
1834
1835         wr32_epcs(hw, TXGBE_PHY_DFE_TAP_CTL0, 0x0);
1836
1837         value = (0x6db & ~0x7) | 0x4;
1838         wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL3, value);
1839
1840         /* Set VR XS, PMA, or MII Gen5 12G PHY MPLLA Control
1841          * 0 Register Bit[7:0] = 8'd32  //MPLLA_MULTIPLIER
1842          */
1843         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL0,
1844                         TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_1GBASEX_KX);
1845
1846         /* Set VR XS, PMA or MII Gen5 12G PHY MPLLA Control
1847          * 3 Register Bit[10:0] = 11'd70  //MPLLA_BANDWIDTH
1848          */
1849         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL3,
1850                         TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_1GBASEX_KX);
1851
1852         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1853          * Calibration Load 0 Register  Bit[12:0] = 13'd1344  //VCO_LD_VAL_0
1854          */
1855         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD0,
1856                         TXGBE_PHY_VCO_CAL_LD0_1GBASEX_KX);
1857
1858         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD1, 0x549);
1859         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD2, 0x549);
1860         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD3, 0x549);
1861
1862         /* Set VR XS, PMA, or MII Gen5 12G PHY VCO
1863          * Calibration Reference 0 Register Bit[5:0] = 6'd42  //VCO_REF_LD_0
1864          */
1865         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF0,
1866                         TXGBE_PHY_VCO_CAL_REF0_LD0_1GBASEX_KX);
1867
1868         wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF1, 0x2929);
1869
1870         /* Set VR XS, PMA, or MII Gen5 12G PHY AFE-DFE
1871          * Enable Register Bit[4], Bit[0] = 1'b0  //AFE_EN_0, DFE_EN_0
1872          */
1873         wr32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE,
1874                         0x0);
1875         /* Set VR XS, PMA, or MII Gen5 12G PHY Rx
1876          * Equalization Control 4 Register Bit[0] = 1'b0  //CONT_ADAPT_0
1877          */
1878         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL,
1879                         0x0010);
1880         /* Set VR XS, PMA, or MII Gen5 12G PHY Tx Rate
1881          * Control Register Bit[2:0] = 3'b011  //TX0_RATE
1882          */
1883         wr32_epcs(hw, TXGBE_PHY_TX_RATE_CTL,
1884                         TXGBE_PHY_TX_RATE_CTL_TX0_RATE_1GBASEX_KX);
1885
1886         /* Set VR XS, PMA, or MII Gen5 12G PHY Rx Rate
1887          * Control Register Bit[2:0] = 3'b011 //RX0_RATE
1888          */
1889         wr32_epcs(hw, TXGBE_PHY_RX_RATE_CTL,
1890                         TXGBE_PHY_RX_RATE_CTL_RX0_RATE_1GBASEX_KX);
1891
1892         /* Set VR XS, PMA, or MII Gen5 12G PHY Tx General
1893          * Control 2 Register Bit[9:8] = 2'b01  //TX0_WIDTH: 10bits
1894          */
1895         wr32_epcs(hw, TXGBE_PHY_TX_GEN_CTL2,
1896                         TXGBE_PHY_TX_GEN_CTL2_TX0_WIDTH_OTHER);
1897         /* Set VR XS, PMA, or MII Gen5 12G PHY Rx General
1898          * Control 2 Register Bit[9:8] = 2'b01  //RX0_WIDTH: 10bits
1899          */
1900         wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL2,
1901                         TXGBE_PHY_RX_GEN_CTL2_RX0_WIDTH_OTHER);
1902         /* Set VR XS, PMA, or MII Gen5 12G PHY MPLLA Control
1903          * 2 Register Bit[10:8] = 3'b010   //MPLLA_DIV16P5_CLK_EN=0,
1904          * MPLLA_DIV10_CLK_EN=1, MPLLA_DIV8_CLK_EN=0
1905          */
1906         wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL2,
1907                         TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_10);
1908
1909         /* VR MII MMD AN Control Register Bit[8] = 1'b1 //MII_CTRL
1910          * Set to 8bit MII (required in 10M/100M SGMII)
1911          */
1912         wr32_epcs(hw, SR_MII_MMD_AN_CTL,
1913                         0x0100);
1914
1915         /* 10. Initialize the mode by setting VR XS or PCS MMD Digital Control1
1916          * Register Bit[15](VR_RST)
1917          */
1918         wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0xA000);
1919
1920         /* Wait phy initialization done */
1921         for (i = 0; i < 100; i++) {
1922                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1) &
1923                         VR_XS_OR_PCS_MMD_DIGI_CTL1_VR_RST) == 0)
1924                         break;
1925                 msleep(100);
1926         }
1927
1928         /* If success, set link status */
1929         hw->link_status = TXGBE_LINK_STATUS_KX;
1930
1931         if (i == 100) {
1932                 err = TXGBE_ERR_PHY_INIT_NOT_DONE;
1933                 goto out;
1934         }
1935
1936         if (hw->phy.ffe_set == TXGBE_BP_M_KX) {
1937                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0) & ~0x3F3F;
1938                 value |= hw->phy.ffe_main << 8 | hw->phy.ffe_pre;
1939                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
1940
1941                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0) & ~0x7F;
1942                 value |= hw->phy.ffe_post | (1 << 6);
1943                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1944         } else if (hw->fw_version <= TXGBE_FW_N_TXEQ) {
1945                 value = (0x1804 & ~0x3F3F) | (24 << 8) | 4;
1946                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
1947
1948                 value = (0x50 & ~0x7F) | 16 | (1 << 6);
1949                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
1950         }
1951 out:
1952         return err;
1953 }
1954
1955 static s32
1956 txgbe_set_link_to_sfi(struct txgbe_hw *hw,
1957                                u32 speed)
1958 {
1959         u32 i;
1960         s32 err = 0;
1961         u32 value = 0;
1962
1963         /* Set the module link speed */
1964         hw->mac.set_rate_select_speed(hw, speed);
1965         /* 1. Wait xpcs power-up good */
1966         for (i = 0; i < 100; i++) {
1967                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_STATUS) &
1968                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_MASK) ==
1969                         VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_POWER_GOOD)
1970                         break;
1971                 msec_delay(10);
1972         }
1973         if (i == 100) {
1974                 err = TXGBE_ERR_XPCS_POWER_UP_FAILED;
1975                 goto out;
1976         }
1977
1978         wr32m(hw, TXGBE_MACTXCFG, TXGBE_MACTXCFG_TXE,
1979                         ~TXGBE_MACTXCFG_TXE);
1980
1981         /* 2. Disable xpcs AN-73 */
1982         wr32_epcs(hw, SR_AN_CTRL, 0x0);
1983
1984         /* Disable PHY MPLLA for eth mode change(after ECO) */
1985         wr32_ephy(hw, 0x4, 0x243A);
1986         txgbe_flush(hw);
1987         msec_delay(1);
1988         /* Set the eth change_mode bit first in mis_rst register
1989          * for corresponding LAN port
1990          */
1991         wr32(hw, TXGBE_RST, TXGBE_RST_ETH(hw->bus.lan_id));
1992
1993         if (speed == TXGBE_LINK_SPEED_10GB_FULL) {
1994                 /* Set SR PCS Control2 Register Bits[1:0] = 2'b00
1995                  * PCS_TYPE_SEL: KR
1996                  */
1997                 wr32_epcs(hw, SR_XS_PCS_CTRL2, 0);
1998                 value = rd32_epcs(hw, SR_PMA_CTRL1);
1999                 value = value | 0x2000;
2000                 wr32_epcs(hw, SR_PMA_CTRL1, value);
2001                 /* Set VR_XS_PMA_Gen5_12G_MPLLA_CTRL0 Register Bit[7:0] = 8'd33
2002                  * MPLLA_MULTIPLIER
2003                  */
2004                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL0, 0x0021);
2005                 /* 3. Set VR_XS_PMA_Gen5_12G_MPLLA_CTRL3 Register
2006                  * Bit[10:0](MPLLA_BANDWIDTH) = 11'd0
2007                  */
2008                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL3, 0);
2009                 value = rd32_epcs(hw, TXGBE_PHY_TX_GENCTRL1);
2010                 value = (value & ~0x700) | 0x500;
2011                 wr32_epcs(hw, TXGBE_PHY_TX_GENCTRL1, value);
2012                 /* 4. Set VR_XS_PMA_Gen5_12G_MISC_CTRL0 Register
2013                  * Bit[12:8](RX_VREF_CTRL) = 5'hF
2014                  */
2015                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0xCF00);
2016                 /* Set VR_XS_PMA_Gen5_12G_VCO_CAL_LD0 Register
2017                  * Bit[12:0] = 13'd1353  //VCO_LD_VAL_0
2018                  */
2019                 wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD0, 0x0549);
2020                 /* Set VR_XS_PMA_Gen5_12G_VCO_CAL_REF0 Register
2021                  * Bit[5:0] = 6'd41  //VCO_REF_LD_0
2022                  */
2023                 wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF0, 0x0029);
2024                 /* Set VR_XS_PMA_Gen5_12G_TX_RATE_CTRL Register
2025                  * Bit[2:0] = 3'b000  //TX0_RATE
2026                  */
2027                 wr32_epcs(hw, TXGBE_PHY_TX_RATE_CTL, 0);
2028                 /* Set VR_XS_PMA_Gen5_12G_RX_RATE_CTRL Register
2029                  * Bit[2:0] = 3'b000  //RX0_RATE
2030                  */
2031                 wr32_epcs(hw, TXGBE_PHY_RX_RATE_CTL, 0);
2032                 /* Set VR_XS_PMA_Gen5_12G_TX_GENCTRL2 Register Bit[9:8] = 2'b11
2033                  * TX0_WIDTH: 20bits
2034                  */
2035                 wr32_epcs(hw, TXGBE_PHY_TX_GEN_CTL2, 0x0300);
2036                 /* Set VR_XS_PMA_Gen5_12G_RX_GENCTRL2 Register Bit[9:8] = 2'b11
2037                  * RX0_WIDTH: 20bits
2038                  */
2039                 wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL2, 0x0300);
2040                 /* Set VR_XS_PMA_Gen5_12G_MPLLA_CTRL2 Register
2041                  * Bit[10:8] = 3'b110
2042                  * MPLLA_DIV16P5_CLK_EN=1
2043                  * MPLLA_DIV10_CLK_EN=1
2044                  * MPLLA_DIV8_CLK_EN=0
2045                  */
2046                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL2, 0x0600);
2047
2048                 if (hw->phy.sfp_type == txgbe_sfp_type_da_cu_core0 ||
2049                         hw->phy.sfp_type == txgbe_sfp_type_da_cu_core1) {
2050                         /* 7. Set VR_XS_PMA_Gen5_12G_RX_EQ_CTRL0 Register
2051                          * Bit[15:8](VGA1/2_GAIN_0) = 8'h77
2052                          * Bit[7:5](CTLE_POLE_0) = 3'h2
2053                          * Bit[4:0](CTLE_BOOST_0) = 4'hF
2054                          */
2055                         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0, 0x774F);
2056
2057                 } else {
2058                         /* 7. Set VR_XS_PMA_Gen5_12G_RX_EQ_CTRL0 Register
2059                          * Bit[15:8](VGA1/2_GAIN_0) = 8'h00
2060                          * Bit[7:5](CTLE_POLE_0) = 3'h2
2061                          * Bit[4:0](CTLE_BOOST_0) = 4'hA
2062                          */
2063                         value = rd32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0);
2064                         value = (value & ~0xFFFF) | (2 << 5) | 0x05;
2065                         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0, value);
2066                 }
2067                 value = rd32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0);
2068                 value = (value & ~0x7) | 0x0;
2069                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0, value);
2070
2071                 if (hw->phy.sfp_type == txgbe_sfp_type_da_cu_core0 ||
2072                         hw->phy.sfp_type == txgbe_sfp_type_da_cu_core1) {
2073                         /* 8. Set VR_XS_PMA_Gen5_12G_DFE_TAP_CTRL0 Register
2074                          * Bit[7:0](DFE_TAP1_0) = 8'd20
2075                          */
2076                         wr32_epcs(hw, TXGBE_PHY_DFE_TAP_CTL0, 0x0014);
2077                         value = rd32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE);
2078                         value = (value & ~0x11) | 0x11;
2079                         wr32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE, value);
2080                 } else {
2081                         /* 8. Set VR_XS_PMA_Gen5_12G_DFE_TAP_CTRL0 Register
2082                          * Bit[7:0](DFE_TAP1_0) = 8'd20
2083                          */
2084                         wr32_epcs(hw, TXGBE_PHY_DFE_TAP_CTL0, 0xBE);
2085                         /* 9. Set VR_MII_Gen5_12G_AFE_DFE_EN_CTRL Register
2086                          * Bit[4](DFE_EN_0) = 1'b0, Bit[0](AFE_EN_0) = 1'b0
2087                          */
2088                         value = rd32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE);
2089                         value = (value & ~0x11) | 0x0;
2090                         wr32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE, value);
2091                 }
2092                 value = rd32_epcs(hw, TXGBE_PHY_RX_EQ_CTL);
2093                 value = value & ~0x1;
2094                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL, value);
2095         } else {
2096                 /* Set SR PCS Control2 Register Bits[1:0] = 2'b00
2097                  * PCS_TYPE_SEL: KR
2098                  */
2099                 wr32_epcs(hw, SR_XS_PCS_CTRL2, 0x1);
2100                 /* Set SR PMA MMD Control1 Register Bit[13] = 1'b0
2101                  * SS13: 1G speed
2102                  */
2103                 wr32_epcs(hw, SR_PMA_CTRL1, 0x0000);
2104                 /* Set SR MII MMD Control Register to corresponding speed */
2105                 wr32_epcs(hw, SR_MII_MMD_CTL, 0x0140);
2106
2107                 value = rd32_epcs(hw, TXGBE_PHY_TX_GENCTRL1);
2108                 value = (value & ~0x710) | 0x500;
2109                 wr32_epcs(hw, TXGBE_PHY_TX_GENCTRL1, value);
2110                 /* 4. Set VR_XS_PMA_Gen5_12G_MISC_CTRL0 Register
2111                  * Bit[12:8](RX_VREF_CTRL) = 5'hF
2112                  */
2113                 wr32_epcs(hw, TXGBE_PHY_MISC_CTL0, 0xCF00);
2114
2115                 if (hw->phy.sfp_type == txgbe_sfp_type_da_cu_core0 ||
2116                         hw->phy.sfp_type == txgbe_sfp_type_da_cu_core1) {
2117                         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0, 0x774F);
2118                 } else {
2119                         /* 7. Set VR_XS_PMA_Gen5_12G_RX_EQ_CTRL0 Register
2120                          * Bit[15:8](VGA1/2_GAIN_0) = 8'h00
2121                          * Bit[7:5](CTLE_POLE_0) = 3'h2
2122                          * Bit[4:0](CTLE_BOOST_0) = 4'hA
2123                          */
2124                         value = rd32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0);
2125                         value = (value & ~0xFFFF) | 0x7706;
2126                         wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL0, value);
2127                 }
2128                 value = rd32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0);
2129                 value = (value & ~0x7) | 0x0;
2130                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_ATT_LVL0, value);
2131                 /* 8. Set VR_XS_PMA_Gen5_12G_DFE_TAP_CTRL0 Register
2132                  * Bit[7:0](DFE_TAP1_0) = 8'd00
2133                  */
2134                 wr32_epcs(hw, TXGBE_PHY_DFE_TAP_CTL0, 0x0);
2135                 /* 9. Set VR_MII_Gen5_12G_AFE_DFE_EN_CTRL Register
2136                  * Bit[4](DFE_EN_0) = 1'b0, Bit[0](AFE_EN_0) = 1'b0
2137                  */
2138                 value = rd32_epcs(hw, TXGBE_PHY_RX_GEN_CTL3);
2139                 value = (value & ~0x7) | 0x4;
2140                 wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL3, value);
2141                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL0, 0x0020);
2142                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL3, 0x0046);
2143                 wr32_epcs(hw, TXGBE_PHY_VCO_CAL_LD0, 0x0540);
2144                 wr32_epcs(hw, TXGBE_PHY_VCO_CAL_REF0, 0x002A);
2145                 wr32_epcs(hw, TXGBE_PHY_AFE_DFE_ENABLE, 0x0);
2146                 wr32_epcs(hw, TXGBE_PHY_RX_EQ_CTL, 0x0010);
2147                 wr32_epcs(hw, TXGBE_PHY_TX_RATE_CTL, 0x0003);
2148                 wr32_epcs(hw, TXGBE_PHY_RX_RATE_CTL, 0x0003);
2149                 wr32_epcs(hw, TXGBE_PHY_TX_GEN_CTL2, 0x0100);
2150                 wr32_epcs(hw, TXGBE_PHY_RX_GEN_CTL2, 0x0100);
2151                 wr32_epcs(hw, TXGBE_PHY_MPLLA_CTL2, 0x0200);
2152                 wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0100);
2153         }
2154         /* 10. Initialize the mode by setting VR XS or PCS MMD Digital Control1
2155          * Register Bit[15](VR_RST)
2156          */
2157         wr32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1, 0xA000);
2158
2159         /* Wait phy initialization done */
2160         for (i = 0; i < 100; i++) {
2161                 if ((rd32_epcs(hw, VR_XS_OR_PCS_MMD_DIGI_CTL1) &
2162                         VR_XS_OR_PCS_MMD_DIGI_CTL1_VR_RST) == 0)
2163                         break;
2164                 msleep(100);
2165         }
2166         if (i == 100) {
2167                 err = TXGBE_ERR_PHY_INIT_NOT_DONE;
2168                 goto out;
2169         }
2170
2171         if (hw->phy.ffe_set == TXGBE_BP_M_SFI) {
2172                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0) & ~0x3F3F;
2173                 value |= hw->phy.ffe_main << 8 | hw->phy.ffe_pre;
2174                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
2175
2176                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0) & ~0x7F;
2177                 value |= hw->phy.ffe_post | (1 << 6);
2178                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2179         } else if (hw->fw_version <= TXGBE_FW_N_TXEQ) {
2180                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0);
2181                 value = (value & ~0x3F3F) | (24 << 8) | 4;
2182                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
2183
2184                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1);
2185                 value = (value & ~0x7F) | 16 | (1 << 6);
2186                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2187         }
2188 out:
2189         return err;
2190 }
2191
2192 /**
2193  *  txgbe_autoc_read - Hides MAC differences needed for AUTOC read
2194  *  @hw: pointer to hardware structure
2195  */
2196 u64 txgbe_autoc_read(struct txgbe_hw *hw)
2197 {
2198         u64 autoc;
2199         u32 sr_pcs_ctl;
2200         u32 sr_pma_ctl1;
2201         u32 sr_an_ctl;
2202         u32 sr_an_adv_reg2;
2203         u8 type = hw->subsystem_device_id & 0xFF;
2204
2205         autoc = hw->mac.autoc;
2206
2207         if (hw->phy.multispeed_fiber) {
2208                 autoc |= TXGBE_AUTOC_LMS_10G;
2209         } else if (type == TXGBE_DEV_ID_SFP) {
2210                 autoc |= TXGBE_AUTOC_LMS_10G;
2211                 autoc |= TXGBE_AUTOC_10GS_SFI;
2212         } else if (type == TXGBE_DEV_ID_QSFP) {
2213                 autoc = 0; /*TBD*/
2214         } else if (type == TXGBE_DEV_ID_XAUI || type == TXGBE_DEV_ID_SFI_XAUI) {
2215                 autoc |= TXGBE_AUTOC_LMS_10G_LINK_NO_AN;
2216                 autoc |= TXGBE_AUTOC_10G_XAUI;
2217                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_10GBASE_T;
2218         } else if (type == TXGBE_DEV_ID_SGMII) {
2219                 autoc |= TXGBE_AUTOC_LMS_SGMII_1G_100M;
2220                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_1000BASE_T |
2221                                 TXGBE_PHYSICAL_LAYER_100BASE_TX;
2222         } else if (type == TXGBE_DEV_ID_MAC_XAUI) {
2223                 autoc |= TXGBE_AUTOC_LMS_10G_LINK_NO_AN;
2224                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2225         } else if (type == TXGBE_DEV_ID_MAC_SGMII) {
2226                 autoc |= TXGBE_AUTOC_LMS_1G_LINK_NO_AN;
2227                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_1000BASE_KX;
2228         }
2229
2230         if (type != TXGBE_DEV_ID_KR_KX_KX4)
2231                 return autoc;
2232
2233         sr_pcs_ctl = rd32_epcs(hw, SR_XS_PCS_CTRL2);
2234         sr_pma_ctl1 = rd32_epcs(hw, SR_PMA_CTRL1);
2235         sr_an_ctl = rd32_epcs(hw, SR_AN_CTRL);
2236         sr_an_adv_reg2 = rd32_epcs(hw, SR_AN_MMD_ADV_REG2);
2237
2238         if ((sr_pcs_ctl & SR_PCS_CTRL2_TYPE_SEL) == SR_PCS_CTRL2_TYPE_SEL_X &&
2239             (sr_pma_ctl1 & SR_PMA_CTRL1_SS13) == SR_PMA_CTRL1_SS13_KX &&
2240             (sr_an_ctl & SR_AN_CTRL_AN_EN) == 0) {
2241                 /* 1G or KX - no backplane auto-negotiation */
2242                 autoc |= TXGBE_AUTOC_LMS_1G_LINK_NO_AN |
2243                          TXGBE_AUTOC_1G_KX;
2244                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_1000BASE_KX;
2245         } else if ((sr_pcs_ctl & SR_PCS_CTRL2_TYPE_SEL) ==
2246                 SR_PCS_CTRL2_TYPE_SEL_X &&
2247                 (sr_pma_ctl1 & SR_PMA_CTRL1_SS13) == SR_PMA_CTRL1_SS13_KX4 &&
2248                 (sr_an_ctl & SR_AN_CTRL_AN_EN) == 0) {
2249                 autoc |= TXGBE_AUTOC_LMS_10G |
2250                          TXGBE_AUTOC_10G_KX4;
2251                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2252         } else if ((sr_pcs_ctl & SR_PCS_CTRL2_TYPE_SEL) ==
2253                 SR_PCS_CTRL2_TYPE_SEL_R &&
2254                 (sr_an_ctl & SR_AN_CTRL_AN_EN) == 0) {
2255                 /* 10 GbE serial link (KR -no backplane auto-negotiation) */
2256                 autoc |= TXGBE_AUTOC_LMS_10G |
2257                          TXGBE_AUTOC_10GS_KR;
2258                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_10GBASE_KR;
2259         } else if ((sr_an_ctl & SR_AN_CTRL_AN_EN)) {
2260                 /* KX/KX4/KR backplane auto-negotiation enable */
2261                 if (sr_an_adv_reg2 & SR_AN_MMD_ADV_REG2_BP_TYPE_KR)
2262                         autoc |= TXGBE_AUTOC_KR_SUPP;
2263                 if (sr_an_adv_reg2 & SR_AN_MMD_ADV_REG2_BP_TYPE_KX4)
2264                         autoc |= TXGBE_AUTOC_KX4_SUPP;
2265                 if (sr_an_adv_reg2 & SR_AN_MMD_ADV_REG2_BP_TYPE_KX)
2266                         autoc |= TXGBE_AUTOC_KX_SUPP;
2267                 autoc |= TXGBE_AUTOC_LMS_KX4_KX_KR;
2268                 hw->phy.link_mode = TXGBE_PHYSICAL_LAYER_10GBASE_KR |
2269                                 TXGBE_PHYSICAL_LAYER_10GBASE_KX4 |
2270                                 TXGBE_PHYSICAL_LAYER_1000BASE_KX;
2271         }
2272
2273         return autoc;
2274 }
2275
2276 /**
2277  * txgbe_autoc_write - Hides MAC differences needed for AUTOC write
2278  * @hw: pointer to hardware structure
2279  * @autoc: value to write to AUTOC
2280  */
2281 void txgbe_autoc_write(struct txgbe_hw *hw, u64 autoc)
2282 {
2283         bool autoneg;
2284         u32 speed;
2285         u32 mactxcfg = 0;
2286         u8 device_type = hw->subsystem_device_id & 0xFF;
2287
2288         speed = TXGBD_AUTOC_SPEED(autoc);
2289         autoc &= ~TXGBE_AUTOC_SPEED_MASK;
2290         autoneg = (autoc & TXGBE_AUTOC_AUTONEG ? true : false);
2291         autoc &= ~TXGBE_AUTOC_AUTONEG;
2292
2293         if (device_type == TXGBE_DEV_ID_KR_KX_KX4) {
2294                 if (!autoneg) {
2295                         switch (hw->phy.link_mode) {
2296                         case TXGBE_PHYSICAL_LAYER_10GBASE_KR:
2297                                 txgbe_set_link_to_kr(hw, autoneg);
2298                                 break;
2299                         case TXGBE_PHYSICAL_LAYER_10GBASE_KX4:
2300                                 txgbe_set_link_to_kx4(hw, autoneg);
2301                                 break;
2302                         case TXGBE_PHYSICAL_LAYER_1000BASE_KX:
2303                                 txgbe_set_link_to_kx(hw, speed, autoneg);
2304                                 break;
2305                         default:
2306                                 return;
2307                         }
2308                 } else {
2309                         txgbe_set_link_to_kr(hw, !autoneg);
2310                 }
2311         } else if (device_type == TXGBE_DEV_ID_XAUI ||
2312                    device_type == TXGBE_DEV_ID_SGMII ||
2313                    device_type == TXGBE_DEV_ID_MAC_XAUI ||
2314                    device_type == TXGBE_DEV_ID_MAC_SGMII ||
2315                    (device_type == TXGBE_DEV_ID_SFI_XAUI &&
2316                    hw->phy.media_type == txgbe_media_type_copper)) {
2317                 if (speed == TXGBE_LINK_SPEED_10GB_FULL) {
2318                         txgbe_set_link_to_kx4(hw, 0);
2319                 } else {
2320                         txgbe_set_link_to_kx(hw, speed, 0);
2321                         if (hw->devarg.auto_neg == 1)
2322                                 txgbe_set_sgmii_an37_ability(hw);
2323                 }
2324         } else if (hw->phy.media_type == txgbe_media_type_fiber) {
2325                 txgbe_set_link_to_sfi(hw, speed);
2326         }
2327
2328         if (speed == TXGBE_LINK_SPEED_10GB_FULL)
2329                 mactxcfg = TXGBE_MACTXCFG_SPEED_10G;
2330         else if (speed == TXGBE_LINK_SPEED_1GB_FULL)
2331                 mactxcfg = TXGBE_MACTXCFG_SPEED_1G;
2332
2333         /* enable mac transmitter */
2334         wr32m(hw, TXGBE_MACTXCFG,
2335                 TXGBE_MACTXCFG_SPEED_MASK | TXGBE_MACTXCFG_TXE,
2336                 mactxcfg | TXGBE_MACTXCFG_TXE);
2337 }
2338
2339 void txgbe_bp_down_event(struct txgbe_hw *hw)
2340 {
2341         if (!(hw->devarg.auto_neg == 1))
2342                 return;
2343
2344         BP_LOG("restart phy power.\n");
2345         wr32_epcs(hw, VR_AN_KR_MODE_CL, 0);
2346         wr32_epcs(hw, SR_AN_CTRL, 0);
2347         wr32_epcs(hw, VR_AN_INTR_MSK, 0);
2348
2349         msleep(1050);
2350         txgbe_set_link_to_kr(hw, 0);
2351 }
2352
2353 void txgbe_bp_mode_set(struct txgbe_hw *hw)
2354 {
2355         if (hw->phy.ffe_set == TXGBE_BP_M_SFI)
2356                 hw->subsystem_device_id = TXGBE_DEV_ID_WX1820_SFP;
2357         else if (hw->phy.ffe_set == TXGBE_BP_M_KR)
2358                 hw->subsystem_device_id = TXGBE_DEV_ID_WX1820_KR_KX_KX4;
2359         else if (hw->phy.ffe_set == TXGBE_BP_M_KX4)
2360                 hw->subsystem_device_id = TXGBE_DEV_ID_WX1820_MAC_XAUI;
2361         else if (hw->phy.ffe_set == TXGBE_BP_M_KX)
2362                 hw->subsystem_device_id = TXGBE_DEV_ID_WX1820_MAC_SGMII;
2363 }
2364
2365 void txgbe_set_phy_temp(struct txgbe_hw *hw)
2366 {
2367         u32 value;
2368
2369         if (hw->phy.ffe_set == TXGBE_BP_M_SFI) {
2370                 BP_LOG("Set SFI TX_EQ MAIN:%d PRE:%d POST:%d\n",
2371                         hw->phy.ffe_main, hw->phy.ffe_pre, hw->phy.ffe_post);
2372
2373                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0);
2374                 value = (value & ~0x3F3F) | (hw->phy.ffe_main << 8) |
2375                         hw->phy.ffe_pre;
2376                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
2377
2378                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1);
2379                 value = (value & ~0x7F) | hw->phy.ffe_post | (1 << 6);
2380                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2381         }
2382
2383         if (hw->phy.ffe_set == TXGBE_BP_M_KR) {
2384                 BP_LOG("Set KR TX_EQ MAIN:%d PRE:%d POST:%d\n",
2385                         hw->phy.ffe_main, hw->phy.ffe_pre, hw->phy.ffe_post);
2386                 value = (0x1804 & ~0x3F3F);
2387                 value |= hw->phy.ffe_main << 8 | hw->phy.ffe_pre;
2388                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
2389
2390                 value = (0x50 & ~0x7F) | (1 << 6) | hw->phy.ffe_post;
2391                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2392                 wr32_epcs(hw, 0x18035, 0x00FF);
2393                 wr32_epcs(hw, 0x18055, 0x00FF);
2394         }
2395
2396         if (hw->phy.ffe_set == TXGBE_BP_M_KX) {
2397                 BP_LOG("Set KX TX_EQ MAIN:%d PRE:%d POST:%d\n",
2398                         hw->phy.ffe_main, hw->phy.ffe_pre, hw->phy.ffe_post);
2399                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0);
2400                 value = (value & ~0x3F3F) | (hw->phy.ffe_main << 8) |
2401                         hw->phy.ffe_pre;
2402                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL0, value);
2403
2404                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1);
2405                 value = (value & ~0x7F) | hw->phy.ffe_post | (1 << 6);
2406                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2407
2408                 wr32_epcs(hw, 0x18035, 0x00FF);
2409                 wr32_epcs(hw, 0x18055, 0x00FF);
2410         }
2411 }
2412
2413 /**
2414  * txgbe_kr_handle - Handle the interrupt of auto-negotiation
2415  * @hw: pointer to hardware structure
2416  */
2417 s32 txgbe_kr_handle(struct txgbe_hw *hw)
2418 {
2419         u32 value;
2420         s32 status = 0;
2421
2422         DEBUGFUNC("txgbe_kr_handle");
2423
2424         value = rd32_epcs(hw, VR_AN_INTR);
2425         BP_LOG("AN INTERRUPT!! value: 0x%x\n", value);
2426         if (!(value & VR_AN_INTR_PG_RCV)) {
2427                 wr32_epcs(hw, VR_AN_INTR, 0);
2428                 return status;
2429         }
2430
2431         status = txgbe_handle_bp_flow(0, hw);
2432
2433         return status;
2434 }
2435
2436 /**
2437  * txgbe_handle_bp_flow - Handle backplane AN73 flow
2438  * @hw: pointer to hardware structure
2439  * @link_mode: local AN73 link mode
2440  */
2441 static s32 txgbe_handle_bp_flow(u32 link_mode, struct txgbe_hw *hw)
2442 {
2443         u32 value, i, lp_reg, ld_reg;
2444         s32 status = 0;
2445         struct txgbe_backplane_ability local_ability, lp_ability;
2446
2447         DEBUGFUNC("txgbe_handle_bp_flow");
2448
2449         local_ability.current_link_mode = link_mode;
2450
2451         /* 1. Get the local AN73 Base Page Ability */
2452         BP_LOG("<1>. Get the local AN73 Base Page Ability ...\n");
2453         txgbe_get_bp_ability(&local_ability, 0, hw);
2454
2455         /* 2. Check and clear the AN73 Interrupt Status */
2456         BP_LOG("<2>. Check the AN73 Interrupt Status ...\n");
2457         txgbe_clear_bp_intr(2, 0, hw);
2458
2459         /* 3.1. Get the link partner AN73 Base Page Ability */
2460         BP_LOG("<3.1>. Get the link partner AN73 Base Page Ability ...\n");
2461         txgbe_get_bp_ability(&lp_ability, 1, hw);
2462
2463         /* 3.2. Check the AN73 Link Ability with Link Partner */
2464         BP_LOG("<3.2>. Check the AN73 Link Ability with Link Partner ...\n");
2465         BP_LOG("       Local Link Ability: 0x%x\n", local_ability.link_ability);
2466         BP_LOG("   Link Partner Link Ability: 0x%x\n", lp_ability.link_ability);
2467
2468         status = txgbe_check_bp_ability(&local_ability, &lp_ability, hw);
2469
2470         wr32_epcs(hw, SR_AN_CTRL, 0);
2471         wr32_epcs(hw, VR_AN_KR_MODE_CL, 0);
2472
2473         /* 3.3. Check the FEC and KR Training for KR mode */
2474         BP_LOG("<3.3>. Check the FEC for KR mode ...\n");
2475         if ((local_ability.fec_ability & lp_ability.fec_ability) == 0x03) {
2476                 BP_LOG("Enable the Backplane KR FEC ...\n");
2477                 wr32_epcs(hw, SR_PMA_KR_FEC_CTRL, SR_PMA_KR_FEC_CTRL_EN);
2478         } else {
2479                 BP_LOG("Backplane KR FEC is disabled.\n");
2480         }
2481
2482         printf("Enter training.\n");
2483         /* CL72 KR training on */
2484         for (i = 0; i < 2; i++) {
2485                 /* 3.4. Check the CL72 KR Training for KR mode */
2486                 BP_LOG("<3.4>. Check the CL72 KR Training for KR mode ...\n");
2487                 BP_LOG("==================%d==================\n", i);
2488                 status = txgbe_enable_kr_training(hw);
2489                 BP_LOG("Check the Clause 72 KR Training status ...\n");
2490                 status |= txgbe_check_kr_training(hw);
2491
2492                 lp_reg = rd32_epcs(hw, SR_PMA_KR_LP_CESTS);
2493                 lp_reg &= SR_PMA_KR_LP_CESTS_RR;
2494                 BP_LOG("SR PMA MMD 10GBASE-KR LP Coefficient Status Register: 0x%x\n",
2495                         lp_reg);
2496                 ld_reg = rd32_epcs(hw, SR_PMA_KR_LD_CESTS);
2497                 ld_reg &= SR_PMA_KR_LD_CESTS_RR;
2498                 BP_LOG("SR PMA MMD 10GBASE-KR LD Coefficient Status Register: 0x%x\n",
2499                         ld_reg);
2500                 if (hw->devarg.poll == 0 && status != 0)
2501                         lp_reg = SR_PMA_KR_LP_CESTS_RR;
2502
2503                 if (lp_reg & ld_reg) {
2504                         BP_LOG("==================out==================\n");
2505                         status = txgbe_disable_kr_training(hw, 0, 0);
2506                         wr32_epcs(hw, SR_AN_CTRL, 0);
2507                         txgbe_clear_bp_intr(2, 0, hw);
2508                         txgbe_clear_bp_intr(1, 0, hw);
2509                         txgbe_clear_bp_intr(0, 0, hw);
2510                         for (i = 0; i < 10; i++) {
2511                                 value = rd32_epcs(hw, SR_XS_PCS_KR_STS1);
2512                                 if (value & SR_XS_PCS_KR_STS1_PLU) {
2513                                         BP_LOG("\nINT_AN_INT_CMPLT =1, AN73 Done Success.\n");
2514                                         wr32_epcs(hw, SR_AN_CTRL, 0);
2515                                         return 0;
2516                                 }
2517                                 msec_delay(10);
2518                         }
2519                         msec_delay(1000);
2520                         txgbe_set_link_to_kr(hw, 0);
2521
2522                         return 0;
2523                 }
2524
2525                 status |= txgbe_disable_kr_training(hw, 0, 0);
2526         }
2527
2528         txgbe_clear_bp_intr(2, 0, hw);
2529         txgbe_clear_bp_intr(1, 0, hw);
2530         txgbe_clear_bp_intr(0, 0, hw);
2531
2532         return status;
2533 }
2534
2535 /**
2536  * txgbe_get_bp_ability
2537  * @hw: pointer to hardware structure
2538  * @ability: pointer to blackplane ability structure
2539  * @link_partner:
2540  *      1: Get Link Partner Base Page
2541  *      2: Get Link Partner Next Page
2542  *              (only get NXP Ability Register 1 at the moment)
2543  *      0: Get Local Device Base Page
2544  */
2545 static void txgbe_get_bp_ability(struct txgbe_backplane_ability *ability,
2546                 u32 link_partner, struct txgbe_hw *hw)
2547 {
2548         u32 value = 0;
2549
2550         DEBUGFUNC("txgbe_get_bp_ability");
2551
2552         /* Link Partner Base Page */
2553         if (link_partner == 1) {
2554                 /* Read the link partner AN73 Base Page Ability Registers */
2555                 BP_LOG("Read the link partner AN73 Base Page Ability Registers...\n");
2556                 value = rd32_epcs(hw, SR_AN_MMD_LP_ABL1);
2557                 BP_LOG("SR AN MMD LP Base Page Ability Register 1: 0x%x\n",
2558                         value);
2559                 ability->next_page = SR_MMD_LP_ABL1_ADV_NP(value);
2560                 BP_LOG("  Next Page (bit15): %d\n", ability->next_page);
2561
2562                 value = rd32_epcs(hw, SR_AN_MMD_LP_ABL2);
2563                 BP_LOG("SR AN MMD LP Base Page Ability Register 2: 0x%x\n",
2564                         value);
2565                 ability->link_ability =
2566                         value & SR_AN_MMD_LP_ABL2_BP_TYPE_KR_KX4_KX;
2567                 BP_LOG("  Link Ability (bit[15:0]): 0x%x\n",
2568                         ability->link_ability);
2569                 BP_LOG("  (0x20- KX_ONLY, 0x40- KX4_ONLY, 0x60- KX4_KX\n");
2570                 BP_LOG("   0x80- KR_ONLY, 0xA0- KR_KX, 0xC0- KR_KX4, 0xE0- KR_KX4_KX)\n");
2571
2572                 value = rd32_epcs(hw, SR_AN_MMD_LP_ABL3);
2573                 BP_LOG("SR AN MMD LP Base Page Ability Register 3: 0x%x\n",
2574                         value);
2575                 BP_LOG("  FEC Request (bit15): %d\n", ((value >> 15) & 0x01));
2576                 BP_LOG("  FEC Enable  (bit14): %d\n", ((value >> 14) & 0x01));
2577                 ability->fec_ability = SR_AN_MMD_LP_ABL3_FCE(value);
2578         } else if (link_partner == 2) {
2579                 /* Read the link partner AN73 Next Page Ability Registers */
2580                 BP_LOG("\nRead the link partner AN73 Next Page Ability Registers...\n");
2581                 value = rd32_epcs(hw, SR_AN_LP_XNP_ABL1);
2582                 BP_LOG(" SR AN MMD LP XNP Ability Register 1: 0x%x\n", value);
2583                 ability->next_page = SR_AN_LP_XNP_ABL1_NP(value);
2584                 BP_LOG("  Next Page (bit15): %d\n", ability->next_page);
2585         } else {
2586                 /* Read the local AN73 Base Page Ability Registers */
2587                 BP_LOG("Read the local AN73 Base Page Ability Registers...\n");
2588                 value = rd32_epcs(hw, SR_AN_MMD_ADV_REG1);
2589                 BP_LOG("SR AN MMD Advertisement Register 1: 0x%x\n", value);
2590                 ability->next_page = SR_AN_MMD_ADV_REG1_NP(value);
2591                 BP_LOG("  Next Page (bit15): %d\n", ability->next_page);
2592
2593                 value = rd32_epcs(hw, SR_AN_MMD_ADV_REG2);
2594                 BP_LOG("SR AN MMD Advertisement Register 2: 0x%x\n", value);
2595                 ability->link_ability =
2596                         value & SR_AN_MMD_ADV_REG2_BP_TYPE_KR_KX4_KX;
2597                 BP_LOG("  Link Ability (bit[15:0]): 0x%x\n",
2598                         ability->link_ability);
2599                 BP_LOG("  (0x20- KX_ONLY, 0x40- KX4_ONLY, 0x60- KX4_KX\n");
2600                 BP_LOG("   0x80- KR_ONLY, 0xA0- KR_KX, 0xC0- KR_KX4, 0xE0- KR_KX4_KX)\n");
2601
2602                 value = rd32_epcs(hw, SR_AN_MMD_ADV_REG3);
2603                 BP_LOG("SR AN MMD Advertisement Register 3: 0x%x\n", value);
2604                 BP_LOG("  FEC Request (bit15): %d\n", ((value >> 15) & 0x01));
2605                 BP_LOG("  FEC Enable  (bit14): %d\n", ((value >> 14) & 0x01));
2606                 ability->fec_ability = SR_AN_MMD_ADV_REG3_FCE(value);
2607         }
2608
2609         BP_LOG("done.\n");
2610 }
2611
2612 /**
2613  * txgbe_check_bp_ability
2614  * @hw: pointer to hardware structure
2615  * @ability: pointer to blackplane ability structure
2616  */
2617 static s32 txgbe_check_bp_ability(struct txgbe_backplane_ability *local_ability,
2618         struct txgbe_backplane_ability *lp_ability, struct txgbe_hw *hw)
2619 {
2620         u32 com_link_abi;
2621         s32 ret = 0;
2622
2623         DEBUGFUNC("txgbe_check_bp_ability");
2624
2625         com_link_abi = local_ability->link_ability & lp_ability->link_ability;
2626         BP_LOG("com_link_abi = 0x%x, local_ability = 0x%x, lp_ability = 0x%x\n",
2627                 com_link_abi, local_ability->link_ability,
2628                 lp_ability->link_ability);
2629
2630         if (!com_link_abi) {
2631                 BP_LOG("The Link Partner does not support any compatible speed mode.\n");
2632                 ret = -1;
2633         } else if (com_link_abi & BP_TYPE_KR) {
2634                 if (local_ability->current_link_mode) {
2635                         BP_LOG("Link mode is not matched with Link Partner: [LINK_KR].\n");
2636                         BP_LOG("Set the local link mode to [LINK_KR] ...\n");
2637                         txgbe_set_link_to_kr(hw, 0);
2638                         ret = 1;
2639                 } else {
2640                         BP_LOG("Link mode is matched with Link Partner: [LINK_KR].\n");
2641                         ret = 0;
2642                 }
2643         } else if (com_link_abi & BP_TYPE_KX4) {
2644                 if (local_ability->current_link_mode == 0x10) {
2645                         BP_LOG("Link mode is matched with Link Partner: [LINK_KX4].\n");
2646                         ret = 0;
2647                 } else {
2648                         BP_LOG("Link mode is not matched with Link Partner: [LINK_KX4].\n");
2649                         BP_LOG("Set the local link mode to [LINK_KX4] ...\n");
2650                         txgbe_set_link_to_kx4(hw, 1);
2651                         ret = 1;
2652                 }
2653         } else if (com_link_abi & BP_TYPE_KX) {
2654                 if (local_ability->current_link_mode == 0x1) {
2655                         BP_LOG("Link mode is matched with Link Partner: [LINK_KX].\n");
2656                         ret = 0;
2657                 } else {
2658                         BP_LOG("Link mode is not matched with Link Partner: [LINK_KX].\n");
2659                         BP_LOG("Set the local link mode to [LINK_KX] ...\n");
2660                         txgbe_set_link_to_kx(hw, 1, 1);
2661                         ret = 1;
2662                 }
2663         }
2664
2665         return ret;
2666 }
2667
2668 /**
2669  * txgbe_clear_bp_intr
2670  * @hw: pointer to hardware structure
2671  * @index: the bit will be cleared
2672  * @index_high:
2673  *      index_high = 0: Only the index bit will be cleared
2674  *      index_high != 0: the [index_high, index] range will be cleared
2675  */
2676 static void txgbe_clear_bp_intr(u32 bit, u32 bit_high, struct txgbe_hw *hw)
2677 {
2678         u32 rdata = 0, wdata, i;
2679
2680         DEBUGFUNC("txgbe_clear_bp_intr");
2681
2682         rdata = rd32_epcs(hw, VR_AN_INTR);
2683         BP_LOG("[Before clear]Read VR AN MMD Interrupt Register: 0x%x\n",
2684                         rdata);
2685         BP_LOG("Interrupt: 0- AN_INT_CMPLT, 1-  AN_INC_LINK, 2- AN_PG_RCV\n\n");
2686
2687         wdata = rdata;
2688         if (bit_high) {
2689                 for (i = bit; i <= bit_high; i++)
2690                         wdata &= ~(1 << i);
2691         } else {
2692                 wdata &= ~(1 << bit);
2693         }
2694
2695         wr32_epcs(hw, VR_AN_INTR, wdata);
2696
2697         rdata = rd32_epcs(hw, VR_AN_INTR);
2698         BP_LOG("[After clear]Read VR AN MMD Interrupt Register: 0x%x\n", rdata);
2699 }
2700
2701 static s32 txgbe_enable_kr_training(struct txgbe_hw *hw)
2702 {
2703         s32 status = 0;
2704         u32 value = 0;
2705
2706         DEBUGFUNC("txgbe_enable_kr_training");
2707
2708         BP_LOG("Enable Clause 72 KR Training ...\n");
2709
2710         if (CL72_KRTR_PRBS_MODE_EN != 0xFFFF) {
2711                 /* Set PRBS Timer Duration Control to maximum 6.7ms in
2712                  * VR_PMA_KRTR_PRBS_CTRL2 Register
2713                  */
2714                 value = CL72_KRTR_PRBS_MODE_EN;
2715                 wr32_epcs(hw, VR_PMA_KRTR_PRBS_CTRL2, value);
2716                 /* Set PRBS Timer Duration Control to maximum 6.7ms in
2717                  * VR_PMA_KRTR_PRBS_CTRL1 Register
2718                  */
2719                 wr32_epcs(hw, VR_PMA_KRTR_PRBS_CTRL1,
2720                         VR_PMA_KRTR_PRBS_TIME_LMT);
2721                 /* Enable PRBS Mode to determine KR Training Status by setting
2722                  * Bit 0 of VR_PMA_KRTR_PRBS_CTRL0 Register
2723                  */
2724                 value = VR_PMA_KRTR_PRBS_MODE_EN;
2725         }
2726 #ifdef CL72_KRTR_PRBS31_EN
2727         /* Enable PRBS Mode to determine KR Training Status by setting
2728          * Bit 1 of VR_PMA_KRTR_PRBS_CTRL0 Register
2729          */
2730         value = VR_PMA_KRTR_PRBS31_EN;
2731 #endif
2732         wr32_epcs(hw, VR_PMA_KRTR_PRBS_CTRL0, value);
2733         /* Read PHY Lane0 TX EQ before Clause 72 KR Training. */
2734         txgbe_read_phy_lane_tx_eq(0, hw, 0, 0);
2735
2736         /* Enable the Clause 72 start-up protocol
2737          *   by setting Bit 1 of SR_PMA_KR_PMD_CTRL Register.
2738          * Restart the Clause 72 start-up protocol
2739          *   by setting Bit 0 of SR_PMA_KR_PMD_CTRL Register.
2740          */
2741         wr32_epcs(hw, SR_PMA_KR_PMD_CTRL,
2742                 SR_PMA_KR_PMD_CTRL_EN_TR | SR_PMA_KR_PMD_CTRL_RS_TR);
2743
2744         return status;
2745 }
2746
2747 static s32 txgbe_disable_kr_training(struct txgbe_hw *hw, s32 post, s32 mode)
2748 {
2749         s32 status = 0;
2750
2751         DEBUGFUNC("txgbe_disable_kr_training");
2752
2753         BP_LOG("Disable Clause 72 KR Training ...\n");
2754         /* Read PHY Lane0 TX EQ before Clause 72 KR Training. */
2755         txgbe_read_phy_lane_tx_eq(0, hw, post, mode);
2756
2757         wr32_epcs(hw, SR_PMA_KR_PMD_CTRL, SR_PMA_KR_PMD_CTRL_RS_TR);
2758
2759         return status;
2760 }
2761
2762 static s32 txgbe_check_kr_training(struct txgbe_hw *hw)
2763 {
2764         s32 status = 0;
2765         u32 value, test;
2766         int i;
2767         int times = hw->devarg.poll ? 35 : 20;
2768
2769         DEBUGFUNC("txgbe_check_kr_training");
2770
2771         for (i = 0; i < times; i++) {
2772                 value = rd32_epcs(hw, SR_PMA_KR_LP_CEU);
2773                 BP_LOG("SR PMA MMD 10GBASE-KR LP Coefficient Update Register: 0x%x\n",
2774                         value);
2775                 value = rd32_epcs(hw, SR_PMA_KR_LP_CESTS);
2776                 BP_LOG("SR PMA MMD 10GBASE-KR LP Coefficient Status Register: 0x%x\n",
2777                         value);
2778                 value = rd32_epcs(hw, SR_PMA_KR_LD_CEU);
2779                 BP_LOG("SR PMA MMD 10GBASE-KR LD Coefficient Update: 0x%x\n",
2780                         value);
2781                 value = rd32_epcs(hw, SR_PMA_KR_LD_CESTS);
2782                 BP_LOG("SR PMA MMD 10GBASE-KR LD Coefficient Status: 0x%x\n",
2783                         value);
2784                 value = rd32_epcs(hw, SR_PMA_KR_PMD_STS);
2785                 BP_LOG("SR PMA MMD 10GBASE-KR Status Register: 0x%x\n", value);
2786                 BP_LOG("  Training Failure         (bit3): %d\n",
2787                         ((value >> 3) & 0x01));
2788                 BP_LOG("  Start-Up Protocol Status (bit2): %d\n",
2789                         ((value >> 2) & 0x01));
2790                 BP_LOG("  Frame Lock               (bit1): %d\n",
2791                         ((value >> 1) & 0x01));
2792                 BP_LOG("  Receiver Status          (bit0): %d\n",
2793                         ((value >> 0) & 0x01));
2794
2795                 test = rd32_epcs(hw, SR_PMA_KR_LP_CESTS);
2796                 if (test & SR_PMA_KR_LP_CESTS_RR) {
2797                         BP_LOG("TEST Coefficient Status Register: 0x%x\n",
2798                                 test);
2799                         status = 1;
2800                 }
2801
2802                 if (value & SR_PMA_KR_PMD_STS_TR_FAIL) {
2803                         BP_LOG("Training is completed with failure.\n");
2804                         txgbe_read_phy_lane_tx_eq(0, hw, 0, 0);
2805                         return 0;
2806                 }
2807
2808                 if (value & SR_PMA_KR_PMD_STS_RCV) {
2809                         BP_LOG("Receiver trained and ready to receive data.\n");
2810                         txgbe_read_phy_lane_tx_eq(0, hw, 0, 0);
2811                         return 0;
2812                 }
2813
2814                 msec_delay(20);
2815         }
2816
2817         BP_LOG("ERROR: Check Clause 72 KR Training Complete Timeout.\n");
2818         return status;
2819 }
2820
2821 static void txgbe_read_phy_lane_tx_eq(u16 lane, struct txgbe_hw *hw,
2822                                 s32 post, s32 mode)
2823 {
2824         u32 value = 0;
2825         u32 addr;
2826         u32 tx_main_cursor, tx_pre_cursor, tx_post_cursor, lmain;
2827
2828         DEBUGFUNC("txgbe_read_phy_lane_tx_eq");
2829
2830         addr = TXGBE_PHY_LANE0_TX_EQ_CTL1 | (lane << 8);
2831         value = rd32_ephy(hw, addr);
2832         BP_LOG("PHY LANE TX EQ Read Value: %x\n", lane);
2833         tx_main_cursor = TXGBE_PHY_LANE0_TX_EQ_CTL1_MAIN(value);
2834         BP_LOG("TX_MAIN_CURSOR: %x\n", tx_main_cursor);
2835         UNREFERENCED_PARAMETER(tx_main_cursor);
2836
2837         addr = TXGBE_PHY_LANE0_TX_EQ_CTL2 | (lane << 8);
2838         value = rd32_ephy(hw, addr);
2839         tx_pre_cursor = value & TXGBE_PHY_LANE0_TX_EQ_CTL2_PRE;
2840         tx_post_cursor = TXGBE_PHY_LANE0_TX_EQ_CTL2_POST(value);
2841         BP_LOG("TX_PRE_CURSOR: %x\n", tx_pre_cursor);
2842         BP_LOG("TX_POST_CURSOR: %x\n", tx_post_cursor);
2843
2844         if (mode == 1) {
2845                 lmain = 160 - tx_pre_cursor - tx_post_cursor;
2846                 if (lmain < 88)
2847                         lmain = 88;
2848
2849                 if (post)
2850                         tx_post_cursor = post;
2851
2852                 wr32_epcs(hw, TXGBE_PHY_EQ_INIT_CTL1, tx_post_cursor);
2853                 wr32_epcs(hw, TXGBE_PHY_EQ_INIT_CTL0,
2854                                 tx_pre_cursor | (lmain << 8));
2855                 value = rd32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1);
2856                 value &= ~TXGBE_PHY_TX_EQ_CTL1_DEF;
2857                 wr32_epcs(hw, TXGBE_PHY_TX_EQ_CTL1, value);
2858         }
2859 }