1 /*******************************************************************************
3 Intel 10 Gigabit PCI Express Linux driver
4 Copyright(c) 1999 - 2014 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
23 Linux NICS <linux.nics@intel.com>
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
29 #include <linux/pci.h>
30 #include <linux/delay.h>
31 #include <linux/sched.h>
34 #include "ixgbe_phy.h"
36 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
37 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
38 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
39 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
40 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
42 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
43 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
44 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
45 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
46 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw);
48 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id);
49 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw);
50 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw);
53 * ixgbe_out_i2c_byte_ack - Send I2C byte with ack
54 * @hw: pointer to the hardware structure
57 * Returns an error code on error.
59 static s32 ixgbe_out_i2c_byte_ack(struct ixgbe_hw *hw, u8 byte)
63 status = ixgbe_clock_out_i2c_byte(hw, byte);
66 return ixgbe_get_i2c_ack(hw);
70 * ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack
71 * @hw: pointer to the hardware structure
72 * @byte: pointer to a u8 to receive the byte
74 * Returns an error code on error.
76 static s32 ixgbe_in_i2c_byte_ack(struct ixgbe_hw *hw, u8 *byte)
80 status = ixgbe_clock_in_i2c_byte(hw, byte);
84 return ixgbe_clock_out_i2c_bit(hw, false);
88 * ixgbe_ones_comp_byte_add - Perform one's complement addition
92 * Returns one's complement 8-bit sum.
94 static u8 ixgbe_ones_comp_byte_add(u8 add1, u8 add2)
96 u16 sum = add1 + add2;
98 sum = (sum & 0xFF) + (sum >> 8);
103 * ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation
104 * @hw: pointer to the hardware structure
105 * @addr: I2C bus address to read from
106 * @reg: I2C device register to read from
107 * @val: pointer to location to receive read value
108 * @lock: true if to take and release semaphore
110 * Returns an error code on error.
112 s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
113 u16 reg, u16 *val, bool lock)
115 u32 swfw_mask = hw->phy.phy_semaphore_mask;
124 reg_high = ((reg >> 7) & 0xFE) | 1; /* Indicate read combined */
125 csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
128 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
129 return IXGBE_ERR_SWFW_SYNC;
131 /* Device Address and write indication */
132 if (ixgbe_out_i2c_byte_ack(hw, addr))
134 /* Write bits 14:8 */
135 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
138 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
141 if (ixgbe_out_i2c_byte_ack(hw, csum))
143 /* Re-start condition */
145 /* Device Address and read indication */
146 if (ixgbe_out_i2c_byte_ack(hw, addr | 1))
149 if (ixgbe_in_i2c_byte_ack(hw, &high_bits))
152 if (ixgbe_in_i2c_byte_ack(hw, &low_bits))
155 if (ixgbe_clock_in_i2c_byte(hw, &csum_byte))
158 if (ixgbe_clock_out_i2c_bit(hw, false))
162 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
163 *val = (high_bits << 8) | low_bits;
167 ixgbe_i2c_bus_clear(hw);
169 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
171 if (retry < max_retry)
172 hw_dbg(hw, "I2C byte read combined error - Retry.\n");
174 hw_dbg(hw, "I2C byte read combined error.\n");
175 } while (retry < max_retry);
177 return IXGBE_ERR_I2C;
181 * ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation
182 * @hw: pointer to the hardware structure
183 * @addr: I2C bus address to write to
184 * @reg: I2C device register to write to
185 * @val: value to write
186 * @lock: true if to take and release semaphore
188 * Returns an error code on error.
190 s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
191 u16 reg, u16 val, bool lock)
193 u32 swfw_mask = hw->phy.phy_semaphore_mask;
199 reg_high = (reg >> 7) & 0xFE; /* Indicate write combined */
200 csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
201 csum = ixgbe_ones_comp_byte_add(csum, val >> 8);
202 csum = ixgbe_ones_comp_byte_add(csum, val & 0xFF);
205 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
206 return IXGBE_ERR_SWFW_SYNC;
208 /* Device Address and write indication */
209 if (ixgbe_out_i2c_byte_ack(hw, addr))
211 /* Write bits 14:8 */
212 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
215 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
217 /* Write data 15:8 */
218 if (ixgbe_out_i2c_byte_ack(hw, val >> 8))
221 if (ixgbe_out_i2c_byte_ack(hw, val & 0xFF))
224 if (ixgbe_out_i2c_byte_ack(hw, csum))
228 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
232 ixgbe_i2c_bus_clear(hw);
234 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
236 if (retry < max_retry)
237 hw_dbg(hw, "I2C byte write combined error - Retry.\n");
239 hw_dbg(hw, "I2C byte write combined error.\n");
240 } while (retry < max_retry);
242 return IXGBE_ERR_I2C;
246 * ixgbe_probe_phy - Probe a single address for a PHY
247 * @hw: pointer to hardware structure
248 * @phy_addr: PHY address to probe
250 * Returns true if PHY found
252 static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr)
256 hw->phy.mdio.prtad = phy_addr;
257 if (mdio45_probe(&hw->phy.mdio, phy_addr) != 0)
260 if (ixgbe_get_phy_id(hw))
263 hw->phy.type = ixgbe_get_phy_type_from_id(hw->phy.id);
265 if (hw->phy.type == ixgbe_phy_unknown) {
266 hw->phy.ops.read_reg(hw,
271 (MDIO_PMA_EXTABLE_10GBT |
272 MDIO_PMA_EXTABLE_1000BT))
273 hw->phy.type = ixgbe_phy_cu_unknown;
275 hw->phy.type = ixgbe_phy_generic;
282 * ixgbe_identify_phy_generic - Get physical layer module
283 * @hw: pointer to hardware structure
285 * Determines the physical layer module found on the current adapter.
287 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
290 u32 status = IXGBE_ERR_PHY_ADDR_INVALID;
292 if (!hw->phy.phy_semaphore_mask) {
294 hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM;
296 hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM;
299 if (hw->phy.type != ixgbe_phy_unknown)
302 if (hw->phy.nw_mng_if_sel) {
303 phy_addr = (hw->phy.nw_mng_if_sel &
304 IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD) >>
305 IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT;
306 if (ixgbe_probe_phy(hw, phy_addr))
309 return IXGBE_ERR_PHY_ADDR_INVALID;
312 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
313 if (ixgbe_probe_phy(hw, phy_addr)) {
319 /* Certain media types do not have a phy so an address will not
320 * be found and the code will take this path. Caller has to
321 * decide if it is an error or not.
324 hw->phy.mdio.prtad = MDIO_PRTAD_NONE;
330 * ixgbe_check_reset_blocked - check status of MNG FW veto bit
331 * @hw: pointer to the hardware structure
333 * This function checks the MMNGC.MNG_VETO bit to see if there are
334 * any constraints on link from manageability. For MAC's that don't
335 * have this bit just return false since the link can not be blocked
338 bool ixgbe_check_reset_blocked(struct ixgbe_hw *hw)
342 /* If we don't have this bit, it can't be blocking */
343 if (hw->mac.type == ixgbe_mac_82598EB)
346 mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC);
347 if (mmngc & IXGBE_MMNGC_MNG_VETO) {
348 hw_dbg(hw, "MNG_VETO bit detected.\n");
356 * ixgbe_get_phy_id - Get the phy type
357 * @hw: pointer to hardware structure
360 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
366 status = hw->phy.ops.read_reg(hw, MDIO_DEVID1, MDIO_MMD_PMAPMD,
370 hw->phy.id = (u32)(phy_id_high << 16);
371 status = hw->phy.ops.read_reg(hw, MDIO_DEVID2, MDIO_MMD_PMAPMD,
373 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
374 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
380 * ixgbe_get_phy_type_from_id - Get the phy type
381 * @hw: pointer to hardware structure
384 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
386 enum ixgbe_phy_type phy_type;
390 phy_type = ixgbe_phy_tn;
395 phy_type = ixgbe_phy_aq;
398 phy_type = ixgbe_phy_qt;
401 phy_type = ixgbe_phy_nl;
405 phy_type = ixgbe_phy_x550em_ext_t;
408 phy_type = ixgbe_phy_unknown;
416 * ixgbe_reset_phy_generic - Performs a PHY reset
417 * @hw: pointer to hardware structure
419 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
425 if (hw->phy.type == ixgbe_phy_unknown)
426 status = ixgbe_identify_phy_generic(hw);
428 if (status != 0 || hw->phy.type == ixgbe_phy_none)
431 /* Don't reset PHY if it's shut down due to overtemp. */
432 if (!hw->phy.reset_if_overtemp &&
433 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
436 /* Blocked by MNG FW so bail */
437 if (ixgbe_check_reset_blocked(hw))
441 * Perform soft PHY reset to the PHY_XS.
442 * This will cause a soft reset to the PHY
444 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
449 * Poll for reset bit to self-clear indicating reset is complete.
450 * Some PHYs could take up to 3 seconds to complete and need about
451 * 1.7 usec delay after the reset is complete.
453 for (i = 0; i < 30; i++) {
455 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &ctrl);
456 if (!(ctrl & MDIO_CTRL1_RESET)) {
462 if (ctrl & MDIO_CTRL1_RESET) {
463 hw_dbg(hw, "PHY reset polling failed to complete.\n");
464 return IXGBE_ERR_RESET_FAILED;
471 * ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
473 * @hw: pointer to hardware structure
474 * @reg_addr: 32 bit address of PHY register to read
475 * @phy_data: Pointer to read data from PHY register
477 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
480 u32 i, data, command;
482 /* Setup and write the address cycle command */
483 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
484 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
485 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
486 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
488 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
490 /* Check every 10 usec to see if the address cycle completed.
491 * The MDI Command bit will clear when the operation is
494 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
497 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
498 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
503 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
504 hw_dbg(hw, "PHY address command did not complete.\n");
505 return IXGBE_ERR_PHY;
508 /* Address cycle complete, setup and write the read
511 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
512 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
513 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
514 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
516 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
518 /* Check every 10 usec to see if the address cycle
519 * completed. The MDI Command bit will clear when the
520 * operation is complete
522 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
525 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
526 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
530 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
531 hw_dbg(hw, "PHY read command didn't complete\n");
532 return IXGBE_ERR_PHY;
535 /* Read operation is complete. Get the data
538 data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
539 data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
540 *phy_data = (u16)(data);
546 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
547 * using the SWFW lock - this function is needed in most cases
548 * @hw: pointer to hardware structure
549 * @reg_addr: 32 bit address of PHY register to read
550 * @phy_data: Pointer to read data from PHY register
552 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
553 u32 device_type, u16 *phy_data)
556 u32 gssr = hw->phy.phy_semaphore_mask;
558 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
559 status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
561 hw->mac.ops.release_swfw_sync(hw, gssr);
563 return IXGBE_ERR_SWFW_SYNC;
570 * ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register
572 * @hw: pointer to hardware structure
573 * @reg_addr: 32 bit PHY register to write
574 * @device_type: 5 bit device type
575 * @phy_data: Data to write to the PHY register
577 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr,
578 u32 device_type, u16 phy_data)
582 /* Put the data in the MDI single read and write data register*/
583 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
585 /* Setup and write the address cycle command */
586 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
587 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
588 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
589 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
591 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
594 * Check every 10 usec to see if the address cycle completed.
595 * The MDI Command bit will clear when the operation is
598 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
601 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
602 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
606 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
607 hw_dbg(hw, "PHY address cmd didn't complete\n");
608 return IXGBE_ERR_PHY;
612 * Address cycle complete, setup and write the write
615 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
616 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
617 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
618 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
620 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
622 /* Check every 10 usec to see if the address cycle
623 * completed. The MDI Command bit will clear when the
624 * operation is complete
626 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
629 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
630 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
634 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
635 hw_dbg(hw, "PHY write cmd didn't complete\n");
636 return IXGBE_ERR_PHY;
643 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
644 * using SWFW lock- this function is needed in most cases
645 * @hw: pointer to hardware structure
646 * @reg_addr: 32 bit PHY register to write
647 * @device_type: 5 bit device type
648 * @phy_data: Data to write to the PHY register
650 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
651 u32 device_type, u16 phy_data)
654 u32 gssr = hw->phy.phy_semaphore_mask;
656 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
657 status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type,
659 hw->mac.ops.release_swfw_sync(hw, gssr);
661 return IXGBE_ERR_SWFW_SYNC;
668 * ixgbe_setup_phy_link_generic - Set and restart autoneg
669 * @hw: pointer to hardware structure
671 * Restart autonegotiation and PHY and waits for completion.
673 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
676 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
677 bool autoneg = false;
678 ixgbe_link_speed speed;
680 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
682 /* Set or unset auto-negotiation 10G advertisement */
683 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, &autoneg_reg);
685 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
686 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) &&
687 (speed & IXGBE_LINK_SPEED_10GB_FULL))
688 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
690 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, autoneg_reg);
692 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
693 MDIO_MMD_AN, &autoneg_reg);
695 if (hw->mac.type == ixgbe_mac_X550) {
696 /* Set or unset auto-negotiation 5G advertisement */
697 autoneg_reg &= ~IXGBE_MII_5GBASE_T_ADVERTISE;
698 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL) &&
699 (speed & IXGBE_LINK_SPEED_5GB_FULL))
700 autoneg_reg |= IXGBE_MII_5GBASE_T_ADVERTISE;
702 /* Set or unset auto-negotiation 2.5G advertisement */
703 autoneg_reg &= ~IXGBE_MII_2_5GBASE_T_ADVERTISE;
704 if ((hw->phy.autoneg_advertised &
705 IXGBE_LINK_SPEED_2_5GB_FULL) &&
706 (speed & IXGBE_LINK_SPEED_2_5GB_FULL))
707 autoneg_reg |= IXGBE_MII_2_5GBASE_T_ADVERTISE;
710 /* Set or unset auto-negotiation 1G advertisement */
711 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
712 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) &&
713 (speed & IXGBE_LINK_SPEED_1GB_FULL))
714 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
716 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
717 MDIO_MMD_AN, autoneg_reg);
719 /* Set or unset auto-negotiation 100M advertisement */
720 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, &autoneg_reg);
722 autoneg_reg &= ~(ADVERTISE_100FULL | ADVERTISE_100HALF);
723 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) &&
724 (speed & IXGBE_LINK_SPEED_100_FULL))
725 autoneg_reg |= ADVERTISE_100FULL;
727 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, autoneg_reg);
729 /* Blocked by MNG FW so don't reset PHY */
730 if (ixgbe_check_reset_blocked(hw))
733 /* Restart PHY autonegotiation and wait for completion */
734 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
735 MDIO_MMD_AN, &autoneg_reg);
737 autoneg_reg |= MDIO_AN_CTRL1_RESTART;
739 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
740 MDIO_MMD_AN, autoneg_reg);
746 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
747 * @hw: pointer to hardware structure
748 * @speed: new link speed
750 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
751 ixgbe_link_speed speed,
752 bool autoneg_wait_to_complete)
756 * Clear autoneg_advertised and set new values based on input link
759 hw->phy.autoneg_advertised = 0;
761 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
762 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
764 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
765 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
767 if (speed & IXGBE_LINK_SPEED_100_FULL)
768 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
770 /* Setup link based on the new speed settings */
771 hw->phy.ops.setup_link(hw);
777 * ixgbe_get_copper_speeds_supported - Get copper link speed from phy
778 * @hw: pointer to hardware structure
780 * Determines the supported link capabilities by reading the PHY auto
781 * negotiation register.
783 static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw)
788 status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
793 if (speed_ability & MDIO_SPEED_10G)
794 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL;
795 if (speed_ability & MDIO_PMA_SPEED_1000)
796 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL;
797 if (speed_ability & MDIO_PMA_SPEED_100)
798 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL;
800 switch (hw->mac.type) {
802 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL;
803 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL;
805 case ixgbe_mac_X550EM_x:
806 case ixgbe_mac_x550em_a:
807 hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL;
817 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
818 * @hw: pointer to hardware structure
819 * @speed: pointer to link speed
820 * @autoneg: boolean auto-negotiation value
822 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
823 ixgbe_link_speed *speed,
829 if (!hw->phy.speeds_supported)
830 status = ixgbe_get_copper_speeds_supported(hw);
832 *speed = hw->phy.speeds_supported;
837 * ixgbe_check_phy_link_tnx - Determine link and speed status
838 * @hw: pointer to hardware structure
840 * Reads the VS1 register to determine if link is up and the current speed for
843 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
848 u32 max_time_out = 10;
853 /* Initialize speed and link to default case */
855 *speed = IXGBE_LINK_SPEED_10GB_FULL;
858 * Check current speed and link status of the PHY register.
859 * This is a vendor specific register and may have to
860 * be changed for other copper PHYs.
862 for (time_out = 0; time_out < max_time_out; time_out++) {
864 status = hw->phy.ops.read_reg(hw,
868 phy_link = phy_data &
869 IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
870 phy_speed = phy_data &
871 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
872 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
875 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
876 *speed = IXGBE_LINK_SPEED_1GB_FULL;
885 * ixgbe_setup_phy_link_tnx - Set and restart autoneg
886 * @hw: pointer to hardware structure
888 * Restart autonegotiation and PHY and waits for completion.
889 * This function always returns success, this is nessary since
890 * it is called via a function pointer that could call other
891 * functions that could return an error.
893 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
895 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
896 bool autoneg = false;
897 ixgbe_link_speed speed;
899 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
901 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
902 /* Set or unset auto-negotiation 10G advertisement */
903 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
907 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
908 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
909 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
911 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
916 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
917 /* Set or unset auto-negotiation 1G advertisement */
918 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
922 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
923 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
924 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
926 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
931 if (speed & IXGBE_LINK_SPEED_100_FULL) {
932 /* Set or unset auto-negotiation 100M advertisement */
933 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
937 autoneg_reg &= ~(ADVERTISE_100FULL |
939 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
940 autoneg_reg |= ADVERTISE_100FULL;
942 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
947 /* Blocked by MNG FW so don't reset PHY */
948 if (ixgbe_check_reset_blocked(hw))
951 /* Restart PHY autonegotiation and wait for completion */
952 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
953 MDIO_MMD_AN, &autoneg_reg);
955 autoneg_reg |= MDIO_AN_CTRL1_RESTART;
957 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
958 MDIO_MMD_AN, autoneg_reg);
963 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
964 * @hw: pointer to hardware structure
965 * @firmware_version: pointer to the PHY Firmware Version
967 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
968 u16 *firmware_version)
972 status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
980 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
981 * @hw: pointer to hardware structure
982 * @firmware_version: pointer to the PHY Firmware Version
984 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
985 u16 *firmware_version)
989 status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
997 * ixgbe_reset_phy_nl - Performs a PHY reset
998 * @hw: pointer to hardware structure
1000 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
1002 u16 phy_offset, control, eword, edata, block_crc;
1003 bool end_data = false;
1004 u16 list_offset, data_offset;
1009 /* Blocked by MNG FW so bail */
1010 if (ixgbe_check_reset_blocked(hw))
1013 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &phy_data);
1015 /* reset the PHY and poll for completion */
1016 hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1017 (phy_data | MDIO_CTRL1_RESET));
1019 for (i = 0; i < 100; i++) {
1020 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1022 if ((phy_data & MDIO_CTRL1_RESET) == 0)
1024 usleep_range(10000, 20000);
1027 if ((phy_data & MDIO_CTRL1_RESET) != 0) {
1028 hw_dbg(hw, "PHY reset did not complete.\n");
1029 return IXGBE_ERR_PHY;
1032 /* Get init offsets */
1033 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
1038 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
1042 * Read control word from PHY init contents offset
1044 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
1047 control = (eword & IXGBE_CONTROL_MASK_NL) >>
1048 IXGBE_CONTROL_SHIFT_NL;
1049 edata = eword & IXGBE_DATA_MASK_NL;
1051 case IXGBE_DELAY_NL:
1053 hw_dbg(hw, "DELAY: %d MS\n", edata);
1054 usleep_range(edata * 1000, edata * 2000);
1057 hw_dbg(hw, "DATA:\n");
1059 ret_val = hw->eeprom.ops.read(hw, data_offset++,
1063 for (i = 0; i < edata; i++) {
1064 ret_val = hw->eeprom.ops.read(hw, data_offset,
1068 hw->phy.ops.write_reg(hw, phy_offset,
1069 MDIO_MMD_PMAPMD, eword);
1070 hw_dbg(hw, "Wrote %4.4x to %4.4x\n", eword,
1076 case IXGBE_CONTROL_NL:
1078 hw_dbg(hw, "CONTROL:\n");
1079 if (edata == IXGBE_CONTROL_EOL_NL) {
1080 hw_dbg(hw, "EOL\n");
1082 } else if (edata == IXGBE_CONTROL_SOL_NL) {
1083 hw_dbg(hw, "SOL\n");
1085 hw_dbg(hw, "Bad control value\n");
1086 return IXGBE_ERR_PHY;
1090 hw_dbg(hw, "Bad control type\n");
1091 return IXGBE_ERR_PHY;
1098 hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
1099 return IXGBE_ERR_PHY;
1103 * ixgbe_identify_module_generic - Identifies module type
1104 * @hw: pointer to hardware structure
1106 * Determines HW type and calls appropriate function.
1108 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
1110 switch (hw->mac.ops.get_media_type(hw)) {
1111 case ixgbe_media_type_fiber:
1112 return ixgbe_identify_sfp_module_generic(hw);
1113 case ixgbe_media_type_fiber_qsfp:
1114 return ixgbe_identify_qsfp_module_generic(hw);
1116 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1117 return IXGBE_ERR_SFP_NOT_PRESENT;
1120 return IXGBE_ERR_SFP_NOT_PRESENT;
1124 * ixgbe_identify_sfp_module_generic - Identifies SFP modules
1125 * @hw: pointer to hardware structure
1127 * Searches for and identifies the SFP module and assigns appropriate PHY type.
1129 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
1131 struct ixgbe_adapter *adapter = hw->back;
1134 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1136 u8 comp_codes_1g = 0;
1137 u8 comp_codes_10g = 0;
1138 u8 oui_bytes[3] = {0, 0, 0};
1141 u16 enforce_sfp = 0;
1143 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
1144 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1145 return IXGBE_ERR_SFP_NOT_PRESENT;
1148 /* LAN ID is needed for sfp_type determination */
1149 hw->mac.ops.set_lan_id(hw);
1151 status = hw->phy.ops.read_i2c_eeprom(hw,
1152 IXGBE_SFF_IDENTIFIER,
1156 goto err_read_i2c_eeprom;
1158 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
1159 hw->phy.type = ixgbe_phy_sfp_unsupported;
1160 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1162 status = hw->phy.ops.read_i2c_eeprom(hw,
1163 IXGBE_SFF_1GBE_COMP_CODES,
1167 goto err_read_i2c_eeprom;
1169 status = hw->phy.ops.read_i2c_eeprom(hw,
1170 IXGBE_SFF_10GBE_COMP_CODES,
1174 goto err_read_i2c_eeprom;
1175 status = hw->phy.ops.read_i2c_eeprom(hw,
1176 IXGBE_SFF_CABLE_TECHNOLOGY,
1180 goto err_read_i2c_eeprom;
1187 * 3 SFP_DA_CORE0 - 82599-specific
1188 * 4 SFP_DA_CORE1 - 82599-specific
1189 * 5 SFP_SR/LR_CORE0 - 82599-specific
1190 * 6 SFP_SR/LR_CORE1 - 82599-specific
1191 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific
1192 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific
1193 * 9 SFP_1g_cu_CORE0 - 82599-specific
1194 * 10 SFP_1g_cu_CORE1 - 82599-specific
1195 * 11 SFP_1g_sx_CORE0 - 82599-specific
1196 * 12 SFP_1g_sx_CORE1 - 82599-specific
1198 if (hw->mac.type == ixgbe_mac_82598EB) {
1199 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1200 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1201 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1202 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1203 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1204 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1206 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1208 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1209 if (hw->bus.lan_id == 0)
1211 ixgbe_sfp_type_da_cu_core0;
1214 ixgbe_sfp_type_da_cu_core1;
1215 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1216 hw->phy.ops.read_i2c_eeprom(
1217 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1220 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1221 if (hw->bus.lan_id == 0)
1223 ixgbe_sfp_type_da_act_lmt_core0;
1226 ixgbe_sfp_type_da_act_lmt_core1;
1229 ixgbe_sfp_type_unknown;
1231 } else if (comp_codes_10g &
1232 (IXGBE_SFF_10GBASESR_CAPABLE |
1233 IXGBE_SFF_10GBASELR_CAPABLE)) {
1234 if (hw->bus.lan_id == 0)
1236 ixgbe_sfp_type_srlr_core0;
1239 ixgbe_sfp_type_srlr_core1;
1240 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1241 if (hw->bus.lan_id == 0)
1243 ixgbe_sfp_type_1g_cu_core0;
1246 ixgbe_sfp_type_1g_cu_core1;
1247 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1248 if (hw->bus.lan_id == 0)
1250 ixgbe_sfp_type_1g_sx_core0;
1253 ixgbe_sfp_type_1g_sx_core1;
1254 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1255 if (hw->bus.lan_id == 0)
1257 ixgbe_sfp_type_1g_lx_core0;
1260 ixgbe_sfp_type_1g_lx_core1;
1262 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1266 if (hw->phy.sfp_type != stored_sfp_type)
1267 hw->phy.sfp_setup_needed = true;
1269 /* Determine if the SFP+ PHY is dual speed or not. */
1270 hw->phy.multispeed_fiber = false;
1271 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1272 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1273 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1274 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1275 hw->phy.multispeed_fiber = true;
1277 /* Determine PHY vendor */
1278 if (hw->phy.type != ixgbe_phy_nl) {
1279 hw->phy.id = identifier;
1280 status = hw->phy.ops.read_i2c_eeprom(hw,
1281 IXGBE_SFF_VENDOR_OUI_BYTE0,
1285 goto err_read_i2c_eeprom;
1287 status = hw->phy.ops.read_i2c_eeprom(hw,
1288 IXGBE_SFF_VENDOR_OUI_BYTE1,
1292 goto err_read_i2c_eeprom;
1294 status = hw->phy.ops.read_i2c_eeprom(hw,
1295 IXGBE_SFF_VENDOR_OUI_BYTE2,
1299 goto err_read_i2c_eeprom;
1302 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1303 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1304 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1306 switch (vendor_oui) {
1307 case IXGBE_SFF_VENDOR_OUI_TYCO:
1308 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1310 ixgbe_phy_sfp_passive_tyco;
1312 case IXGBE_SFF_VENDOR_OUI_FTL:
1313 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1314 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1316 hw->phy.type = ixgbe_phy_sfp_ftl;
1318 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1319 hw->phy.type = ixgbe_phy_sfp_avago;
1321 case IXGBE_SFF_VENDOR_OUI_INTEL:
1322 hw->phy.type = ixgbe_phy_sfp_intel;
1325 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1327 ixgbe_phy_sfp_passive_unknown;
1328 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1330 ixgbe_phy_sfp_active_unknown;
1332 hw->phy.type = ixgbe_phy_sfp_unknown;
1337 /* Allow any DA cable vendor */
1338 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1339 IXGBE_SFF_DA_ACTIVE_CABLE))
1342 /* Verify supported 1G SFP modules */
1343 if (comp_codes_10g == 0 &&
1344 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1345 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1346 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1347 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1348 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1349 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1350 hw->phy.type = ixgbe_phy_sfp_unsupported;
1351 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1354 /* Anything else 82598-based is supported */
1355 if (hw->mac.type == ixgbe_mac_82598EB)
1358 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1359 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1360 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1361 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1362 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1363 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1364 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1365 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1366 /* Make sure we're a supported PHY type */
1367 if (hw->phy.type == ixgbe_phy_sfp_intel)
1369 if (hw->allow_unsupported_sfp) {
1370 e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1373 hw_dbg(hw, "SFP+ module not supported\n");
1374 hw->phy.type = ixgbe_phy_sfp_unsupported;
1375 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1379 err_read_i2c_eeprom:
1380 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1381 if (hw->phy.type != ixgbe_phy_nl) {
1383 hw->phy.type = ixgbe_phy_unknown;
1385 return IXGBE_ERR_SFP_NOT_PRESENT;
1389 * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1390 * @hw: pointer to hardware structure
1392 * Searches for and identifies the QSFP module and assigns appropriate PHY type
1394 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1396 struct ixgbe_adapter *adapter = hw->back;
1399 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1401 u8 comp_codes_1g = 0;
1402 u8 comp_codes_10g = 0;
1403 u8 oui_bytes[3] = {0, 0, 0};
1404 u16 enforce_sfp = 0;
1406 u8 cable_length = 0;
1408 bool active_cable = false;
1410 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1411 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1412 return IXGBE_ERR_SFP_NOT_PRESENT;
1415 /* LAN ID is needed for sfp_type determination */
1416 hw->mac.ops.set_lan_id(hw);
1418 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1422 goto err_read_i2c_eeprom;
1424 if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1425 hw->phy.type = ixgbe_phy_sfp_unsupported;
1426 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1429 hw->phy.id = identifier;
1431 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1435 goto err_read_i2c_eeprom;
1437 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1441 goto err_read_i2c_eeprom;
1443 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1444 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1445 if (hw->bus.lan_id == 0)
1446 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1448 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1449 } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1450 IXGBE_SFF_10GBASELR_CAPABLE)) {
1451 if (hw->bus.lan_id == 0)
1452 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1454 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1456 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1457 active_cable = true;
1459 if (!active_cable) {
1460 /* check for active DA cables that pre-date
1463 hw->phy.ops.read_i2c_eeprom(hw,
1464 IXGBE_SFF_QSFP_CONNECTOR,
1467 hw->phy.ops.read_i2c_eeprom(hw,
1468 IXGBE_SFF_QSFP_CABLE_LENGTH,
1471 hw->phy.ops.read_i2c_eeprom(hw,
1472 IXGBE_SFF_QSFP_DEVICE_TECH,
1476 IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1477 (cable_length > 0) &&
1478 ((device_tech >> 4) ==
1479 IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1480 active_cable = true;
1484 hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1485 if (hw->bus.lan_id == 0)
1487 ixgbe_sfp_type_da_act_lmt_core0;
1490 ixgbe_sfp_type_da_act_lmt_core1;
1492 /* unsupported module type */
1493 hw->phy.type = ixgbe_phy_sfp_unsupported;
1494 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1498 if (hw->phy.sfp_type != stored_sfp_type)
1499 hw->phy.sfp_setup_needed = true;
1501 /* Determine if the QSFP+ PHY is dual speed or not. */
1502 hw->phy.multispeed_fiber = false;
1503 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1504 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1505 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1506 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1507 hw->phy.multispeed_fiber = true;
1509 /* Determine PHY vendor for optical modules */
1510 if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1511 IXGBE_SFF_10GBASELR_CAPABLE)) {
1512 status = hw->phy.ops.read_i2c_eeprom(hw,
1513 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1517 goto err_read_i2c_eeprom;
1519 status = hw->phy.ops.read_i2c_eeprom(hw,
1520 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1524 goto err_read_i2c_eeprom;
1526 status = hw->phy.ops.read_i2c_eeprom(hw,
1527 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1531 goto err_read_i2c_eeprom;
1534 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1535 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1536 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1538 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1539 hw->phy.type = ixgbe_phy_qsfp_intel;
1541 hw->phy.type = ixgbe_phy_qsfp_unknown;
1543 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1544 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1545 /* Make sure we're a supported PHY type */
1546 if (hw->phy.type == ixgbe_phy_qsfp_intel)
1548 if (hw->allow_unsupported_sfp) {
1549 e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1552 hw_dbg(hw, "QSFP module not supported\n");
1553 hw->phy.type = ixgbe_phy_sfp_unsupported;
1554 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1560 err_read_i2c_eeprom:
1561 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1563 hw->phy.type = ixgbe_phy_unknown;
1565 return IXGBE_ERR_SFP_NOT_PRESENT;
1569 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1570 * @hw: pointer to hardware structure
1571 * @list_offset: offset to the SFP ID list
1572 * @data_offset: offset to the SFP data block
1574 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1575 * so it returns the offsets to the phy init sequence block.
1577 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1582 u16 sfp_type = hw->phy.sfp_type;
1584 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1585 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1587 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1588 return IXGBE_ERR_SFP_NOT_PRESENT;
1590 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1591 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1592 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1595 * Limiting active cables and 1G Phys must be initialized as
1598 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1599 sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1600 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1601 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1602 sfp_type = ixgbe_sfp_type_srlr_core0;
1603 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1604 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1605 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1606 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1607 sfp_type = ixgbe_sfp_type_srlr_core1;
1609 /* Read offset to PHY init contents */
1610 if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1611 hw_err(hw, "eeprom read at %d failed\n",
1612 IXGBE_PHY_INIT_OFFSET_NL);
1613 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1616 if ((!*list_offset) || (*list_offset == 0xFFFF))
1617 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1619 /* Shift offset to first ID word */
1623 * Find the matching SFP ID in the EEPROM
1624 * and program the init sequence
1626 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1629 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1630 if (sfp_id == sfp_type) {
1632 if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1634 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1635 hw_dbg(hw, "SFP+ module not supported\n");
1636 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1641 (*list_offset) += 2;
1642 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1647 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1648 hw_dbg(hw, "No matching SFP+ module found\n");
1649 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1655 hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
1656 return IXGBE_ERR_PHY;
1660 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1661 * @hw: pointer to hardware structure
1662 * @byte_offset: EEPROM byte offset to read
1663 * @eeprom_data: value read
1665 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1667 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1670 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1671 IXGBE_I2C_EEPROM_DEV_ADDR,
1676 * ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1677 * @hw: pointer to hardware structure
1678 * @byte_offset: byte offset at address 0xA2
1679 * @eeprom_data: value read
1681 * Performs byte read operation to SFP module's SFF-8472 data over I2C
1683 s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1686 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1687 IXGBE_I2C_EEPROM_DEV_ADDR2,
1692 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1693 * @hw: pointer to hardware structure
1694 * @byte_offset: EEPROM byte offset to write
1695 * @eeprom_data: value to write
1697 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1699 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1702 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1703 IXGBE_I2C_EEPROM_DEV_ADDR,
1708 * ixgbe_is_sfp_probe - Returns true if SFP is being detected
1709 * @hw: pointer to hardware structure
1710 * @offset: eeprom offset to be read
1711 * @addr: I2C address to be read
1713 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr)
1715 if (addr == IXGBE_I2C_EEPROM_DEV_ADDR &&
1716 offset == IXGBE_SFF_IDENTIFIER &&
1717 hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1723 * ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C
1724 * @hw: pointer to hardware structure
1725 * @byte_offset: byte offset to read
1727 * @lock: true if to take and release semaphore
1729 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1730 * a specified device address.
1732 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
1733 u8 dev_addr, u8 *data, bool lock)
1738 u32 swfw_mask = hw->phy.phy_semaphore_mask;
1741 if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
1742 max_retry = IXGBE_SFP_DETECT_RETRIES;
1747 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1748 return IXGBE_ERR_SWFW_SYNC;
1750 ixgbe_i2c_start(hw);
1752 /* Device Address and write indication */
1753 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1757 status = ixgbe_get_i2c_ack(hw);
1761 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1765 status = ixgbe_get_i2c_ack(hw);
1769 ixgbe_i2c_start(hw);
1771 /* Device Address and read indication */
1772 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1776 status = ixgbe_get_i2c_ack(hw);
1780 status = ixgbe_clock_in_i2c_byte(hw, data);
1784 status = ixgbe_clock_out_i2c_bit(hw, nack);
1790 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1794 ixgbe_i2c_bus_clear(hw);
1796 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1800 if (retry < max_retry)
1801 hw_dbg(hw, "I2C byte read error - Retrying.\n");
1803 hw_dbg(hw, "I2C byte read error.\n");
1805 } while (retry < max_retry);
1811 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1812 * @hw: pointer to hardware structure
1813 * @byte_offset: byte offset to read
1816 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1817 * a specified device address.
1819 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1820 u8 dev_addr, u8 *data)
1822 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1827 * ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C
1828 * @hw: pointer to hardware structure
1829 * @byte_offset: byte offset to read
1832 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1833 * a specified device address.
1835 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
1836 u8 dev_addr, u8 *data)
1838 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1843 * ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C
1844 * @hw: pointer to hardware structure
1845 * @byte_offset: byte offset to write
1846 * @data: value to write
1847 * @lock: true if to take and release semaphore
1849 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1850 * a specified device address.
1852 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
1853 u8 dev_addr, u8 data, bool lock)
1858 u32 swfw_mask = hw->phy.phy_semaphore_mask;
1860 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1861 return IXGBE_ERR_SWFW_SYNC;
1864 ixgbe_i2c_start(hw);
1866 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1870 status = ixgbe_get_i2c_ack(hw);
1874 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1878 status = ixgbe_get_i2c_ack(hw);
1882 status = ixgbe_clock_out_i2c_byte(hw, data);
1886 status = ixgbe_get_i2c_ack(hw);
1892 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1896 ixgbe_i2c_bus_clear(hw);
1898 if (retry < max_retry)
1899 hw_dbg(hw, "I2C byte write error - Retrying.\n");
1901 hw_dbg(hw, "I2C byte write error.\n");
1902 } while (retry < max_retry);
1905 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1911 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1912 * @hw: pointer to hardware structure
1913 * @byte_offset: byte offset to write
1914 * @data: value to write
1916 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1917 * a specified device address.
1919 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1920 u8 dev_addr, u8 data)
1922 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1927 * ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C
1928 * @hw: pointer to hardware structure
1929 * @byte_offset: byte offset to write
1930 * @data: value to write
1932 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1933 * a specified device address.
1935 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
1936 u8 dev_addr, u8 data)
1938 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
1943 * ixgbe_i2c_start - Sets I2C start condition
1944 * @hw: pointer to hardware structure
1946 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1947 * Set bit-bang mode on X550 hardware.
1949 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1951 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
1953 i2cctl |= IXGBE_I2C_BB_EN(hw);
1955 /* Start condition must begin with data and clock high */
1956 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1957 ixgbe_raise_i2c_clk(hw, &i2cctl);
1959 /* Setup time for start condition (4.7us) */
1960 udelay(IXGBE_I2C_T_SU_STA);
1962 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1964 /* Hold time for start condition (4us) */
1965 udelay(IXGBE_I2C_T_HD_STA);
1967 ixgbe_lower_i2c_clk(hw, &i2cctl);
1969 /* Minimum low period of clock is 4.7 us */
1970 udelay(IXGBE_I2C_T_LOW);
1975 * ixgbe_i2c_stop - Sets I2C stop condition
1976 * @hw: pointer to hardware structure
1978 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1979 * Disables bit-bang mode and negates data output enable on X550
1982 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1984 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
1985 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
1986 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
1987 u32 bb_en_bit = IXGBE_I2C_BB_EN(hw);
1989 /* Stop condition must begin with data low and clock high */
1990 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1991 ixgbe_raise_i2c_clk(hw, &i2cctl);
1993 /* Setup time for stop condition (4us) */
1994 udelay(IXGBE_I2C_T_SU_STO);
1996 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1998 /* bus free time between stop and start (4.7us)*/
1999 udelay(IXGBE_I2C_T_BUF);
2001 if (bb_en_bit || data_oe_bit || clk_oe_bit) {
2002 i2cctl &= ~bb_en_bit;
2003 i2cctl |= data_oe_bit | clk_oe_bit;
2004 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2005 IXGBE_WRITE_FLUSH(hw);
2010 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
2011 * @hw: pointer to hardware structure
2012 * @data: data byte to clock in
2014 * Clocks in one byte data via I2C data/clock
2016 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
2022 for (i = 7; i >= 0; i--) {
2023 ixgbe_clock_in_i2c_bit(hw, &bit);
2031 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
2032 * @hw: pointer to hardware structure
2033 * @data: data byte clocked out
2035 * Clocks out one byte data via I2C data/clock
2037 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
2044 for (i = 7; i >= 0; i--) {
2045 bit = (data >> i) & 0x1;
2046 status = ixgbe_clock_out_i2c_bit(hw, bit);
2052 /* Release SDA line (set high) */
2053 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2054 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2055 i2cctl |= IXGBE_I2C_DATA_OE_N_EN(hw);
2056 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2057 IXGBE_WRITE_FLUSH(hw);
2063 * ixgbe_get_i2c_ack - Polls for I2C ACK
2064 * @hw: pointer to hardware structure
2066 * Clocks in/out one bit via I2C data/clock
2068 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
2070 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2073 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2078 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2079 i2cctl |= data_oe_bit;
2080 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2081 IXGBE_WRITE_FLUSH(hw);
2083 ixgbe_raise_i2c_clk(hw, &i2cctl);
2085 /* Minimum high period of clock is 4us */
2086 udelay(IXGBE_I2C_T_HIGH);
2088 /* Poll for ACK. Note that ACK in I2C spec is
2089 * transition from 1 to 0 */
2090 for (i = 0; i < timeout; i++) {
2091 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2092 ack = ixgbe_get_i2c_data(hw, &i2cctl);
2100 hw_dbg(hw, "I2C ack was not received.\n");
2101 status = IXGBE_ERR_I2C;
2104 ixgbe_lower_i2c_clk(hw, &i2cctl);
2106 /* Minimum low period of clock is 4.7 us */
2107 udelay(IXGBE_I2C_T_LOW);
2113 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
2114 * @hw: pointer to hardware structure
2115 * @data: read data value
2117 * Clocks in one bit via I2C data/clock
2119 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
2121 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2122 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2125 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2126 i2cctl |= data_oe_bit;
2127 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2128 IXGBE_WRITE_FLUSH(hw);
2130 ixgbe_raise_i2c_clk(hw, &i2cctl);
2132 /* Minimum high period of clock is 4us */
2133 udelay(IXGBE_I2C_T_HIGH);
2135 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2136 *data = ixgbe_get_i2c_data(hw, &i2cctl);
2138 ixgbe_lower_i2c_clk(hw, &i2cctl);
2140 /* Minimum low period of clock is 4.7 us */
2141 udelay(IXGBE_I2C_T_LOW);
2147 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
2148 * @hw: pointer to hardware structure
2149 * @data: data value to write
2151 * Clocks out one bit via I2C data/clock
2153 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
2156 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2158 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
2160 ixgbe_raise_i2c_clk(hw, &i2cctl);
2162 /* Minimum high period of clock is 4us */
2163 udelay(IXGBE_I2C_T_HIGH);
2165 ixgbe_lower_i2c_clk(hw, &i2cctl);
2167 /* Minimum low period of clock is 4.7 us.
2168 * This also takes care of the data hold time.
2170 udelay(IXGBE_I2C_T_LOW);
2172 hw_dbg(hw, "I2C data was not set to %X\n", data);
2173 return IXGBE_ERR_I2C;
2179 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
2180 * @hw: pointer to hardware structure
2181 * @i2cctl: Current value of I2CCTL register
2183 * Raises the I2C clock line '0'->'1'
2184 * Negates the I2C clock output enable on X550 hardware.
2186 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2188 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
2190 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
2194 *i2cctl |= clk_oe_bit;
2195 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2198 for (i = 0; i < timeout; i++) {
2199 *i2cctl |= IXGBE_I2C_CLK_OUT(hw);
2200 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2201 IXGBE_WRITE_FLUSH(hw);
2202 /* SCL rise time (1000ns) */
2203 udelay(IXGBE_I2C_T_RISE);
2205 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2206 if (i2cctl_r & IXGBE_I2C_CLK_IN(hw))
2212 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
2213 * @hw: pointer to hardware structure
2214 * @i2cctl: Current value of I2CCTL register
2216 * Lowers the I2C clock line '1'->'0'
2217 * Asserts the I2C clock output enable on X550 hardware.
2219 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2222 *i2cctl &= ~IXGBE_I2C_CLK_OUT(hw);
2223 *i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN(hw);
2225 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2226 IXGBE_WRITE_FLUSH(hw);
2228 /* SCL fall time (300ns) */
2229 udelay(IXGBE_I2C_T_FALL);
2233 * ixgbe_set_i2c_data - Sets the I2C data bit
2234 * @hw: pointer to hardware structure
2235 * @i2cctl: Current value of I2CCTL register
2236 * @data: I2C data value (0 or 1) to set
2238 * Sets the I2C data bit
2239 * Asserts the I2C data output enable on X550 hardware.
2241 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
2243 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2246 *i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2248 *i2cctl &= ~IXGBE_I2C_DATA_OUT(hw);
2249 *i2cctl &= ~data_oe_bit;
2251 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2252 IXGBE_WRITE_FLUSH(hw);
2254 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
2255 udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
2257 if (!data) /* Can't verify data in this case */
2260 *i2cctl |= data_oe_bit;
2261 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2262 IXGBE_WRITE_FLUSH(hw);
2265 /* Verify data was set correctly */
2266 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2267 if (data != ixgbe_get_i2c_data(hw, i2cctl)) {
2268 hw_dbg(hw, "Error - I2C data was not set to %X.\n", data);
2269 return IXGBE_ERR_I2C;
2276 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
2277 * @hw: pointer to hardware structure
2278 * @i2cctl: Current value of I2CCTL register
2280 * Returns the I2C data bit value
2281 * Negates the I2C data output enable on X550 hardware.
2283 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl)
2285 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2288 *i2cctl |= data_oe_bit;
2289 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2290 IXGBE_WRITE_FLUSH(hw);
2291 udelay(IXGBE_I2C_T_FALL);
2294 if (*i2cctl & IXGBE_I2C_DATA_IN(hw))
2300 * ixgbe_i2c_bus_clear - Clears the I2C bus
2301 * @hw: pointer to hardware structure
2303 * Clears the I2C bus by sending nine clock pulses.
2304 * Used when data line is stuck low.
2306 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
2311 ixgbe_i2c_start(hw);
2312 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2314 ixgbe_set_i2c_data(hw, &i2cctl, 1);
2316 for (i = 0; i < 9; i++) {
2317 ixgbe_raise_i2c_clk(hw, &i2cctl);
2319 /* Min high period of clock is 4us */
2320 udelay(IXGBE_I2C_T_HIGH);
2322 ixgbe_lower_i2c_clk(hw, &i2cctl);
2324 /* Min low period of clock is 4.7us*/
2325 udelay(IXGBE_I2C_T_LOW);
2328 ixgbe_i2c_start(hw);
2330 /* Put the i2c bus back to default state */
2335 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
2336 * @hw: pointer to hardware structure
2338 * Checks if the LASI temp alarm status was triggered due to overtemp
2340 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
2344 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
2347 /* Check that the LASI temp alarm status was triggered */
2348 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
2349 MDIO_MMD_PMAPMD, &phy_data);
2351 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
2354 return IXGBE_ERR_OVERTEMP;
2357 /** ixgbe_set_copper_phy_power - Control power for copper phy
2358 * @hw: pointer to hardware structure
2359 * @on: true for on, false for off
2361 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on)
2366 /* Bail if we don't have copper phy */
2367 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper)
2370 if (!on && ixgbe_mng_present(hw))
2373 status = hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, ®);
2378 reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2380 if (ixgbe_check_reset_blocked(hw))
2382 reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2385 status = hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, reg);