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(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_identify_phy_generic - Get physical layer module
54 * @hw: pointer to hardware structure
56 * Determines the physical layer module found on the current adapter.
58 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
63 if (hw->phy.type == ixgbe_phy_unknown) {
64 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
65 hw->phy.mdio.prtad = phy_addr;
66 if (mdio45_probe(&hw->phy.mdio, phy_addr) == 0) {
69 ixgbe_get_phy_type_from_id(hw->phy.id);
71 if (hw->phy.type == ixgbe_phy_unknown) {
72 hw->phy.ops.read_reg(hw,
77 (MDIO_PMA_EXTABLE_10GBT |
78 MDIO_PMA_EXTABLE_1000BT))
89 /* clear value if nothing found */
90 hw->phy.mdio.prtad = 0;
91 return IXGBE_ERR_PHY_ADDR_INVALID;
97 * ixgbe_check_reset_blocked - check status of MNG FW veto bit
98 * @hw: pointer to the hardware structure
100 * This function checks the MMNGC.MNG_VETO bit to see if there are
101 * any constraints on link from manageability. For MAC's that don't
102 * have this bit just return false since the link can not be blocked
105 bool ixgbe_check_reset_blocked(struct ixgbe_hw *hw)
109 /* If we don't have this bit, it can't be blocking */
110 if (hw->mac.type == ixgbe_mac_82598EB)
113 mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC);
114 if (mmngc & IXGBE_MMNGC_MNG_VETO) {
115 hw_dbg(hw, "MNG_VETO bit detected.\n");
123 * ixgbe_get_phy_id - Get the phy type
124 * @hw: pointer to hardware structure
127 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
133 status = hw->phy.ops.read_reg(hw, MDIO_DEVID1, MDIO_MMD_PMAPMD,
137 hw->phy.id = (u32)(phy_id_high << 16);
138 status = hw->phy.ops.read_reg(hw, MDIO_DEVID2, MDIO_MMD_PMAPMD,
140 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
141 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
147 * ixgbe_get_phy_type_from_id - Get the phy type
148 * @hw: pointer to hardware structure
151 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
153 enum ixgbe_phy_type phy_type;
157 phy_type = ixgbe_phy_tn;
160 phy_type = ixgbe_phy_aq;
163 phy_type = ixgbe_phy_qt;
166 phy_type = ixgbe_phy_nl;
169 phy_type = ixgbe_phy_unknown;
177 * ixgbe_reset_phy_generic - Performs a PHY reset
178 * @hw: pointer to hardware structure
180 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
186 if (hw->phy.type == ixgbe_phy_unknown)
187 status = ixgbe_identify_phy_generic(hw);
189 if (status != 0 || hw->phy.type == ixgbe_phy_none)
192 /* Don't reset PHY if it's shut down due to overtemp. */
193 if (!hw->phy.reset_if_overtemp &&
194 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
197 /* Blocked by MNG FW so bail */
198 if (ixgbe_check_reset_blocked(hw))
202 * Perform soft PHY reset to the PHY_XS.
203 * This will cause a soft reset to the PHY
205 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
210 * Poll for reset bit to self-clear indicating reset is complete.
211 * Some PHYs could take up to 3 seconds to complete and need about
212 * 1.7 usec delay after the reset is complete.
214 for (i = 0; i < 30; i++) {
216 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
217 MDIO_MMD_PHYXS, &ctrl);
218 if (!(ctrl & MDIO_CTRL1_RESET)) {
224 if (ctrl & MDIO_CTRL1_RESET) {
225 hw_dbg(hw, "PHY reset polling failed to complete.\n");
226 return IXGBE_ERR_RESET_FAILED;
233 * ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
235 * @hw: pointer to hardware structure
236 * @reg_addr: 32 bit address of PHY register to read
237 * @phy_data: Pointer to read data from PHY register
239 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
242 u32 i, data, command;
244 /* Setup and write the address cycle command */
245 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
246 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
247 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
248 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
250 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
252 /* Check every 10 usec to see if the address cycle completed.
253 * The MDI Command bit will clear when the operation is
256 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
259 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
260 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
265 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
266 hw_dbg(hw, "PHY address command did not complete.\n");
267 return IXGBE_ERR_PHY;
270 /* Address cycle complete, setup and write the read
273 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
274 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
275 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
276 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
278 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
280 /* Check every 10 usec to see if the address cycle
281 * completed. The MDI Command bit will clear when the
282 * operation is complete
284 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
287 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
288 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
292 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
293 hw_dbg(hw, "PHY read command didn't complete\n");
294 return IXGBE_ERR_PHY;
297 /* Read operation is complete. Get the data
300 data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
301 data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
302 *phy_data = (u16)(data);
308 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
309 * using the SWFW lock - this function is needed in most cases
310 * @hw: pointer to hardware structure
311 * @reg_addr: 32 bit address of PHY register to read
312 * @phy_data: Pointer to read data from PHY register
314 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
315 u32 device_type, u16 *phy_data)
320 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
321 gssr = IXGBE_GSSR_PHY1_SM;
323 gssr = IXGBE_GSSR_PHY0_SM;
325 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
326 status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
328 hw->mac.ops.release_swfw_sync(hw, gssr);
330 return IXGBE_ERR_SWFW_SYNC;
337 * ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register
339 * @hw: pointer to hardware structure
340 * @reg_addr: 32 bit PHY register to write
341 * @device_type: 5 bit device type
342 * @phy_data: Data to write to the PHY register
344 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr,
345 u32 device_type, u16 phy_data)
349 /* Put the data in the MDI single read and write data register*/
350 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
352 /* Setup and write the address cycle command */
353 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
354 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
355 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
356 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
358 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
361 * Check every 10 usec to see if the address cycle completed.
362 * The MDI Command bit will clear when the operation is
365 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
368 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
369 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
373 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
374 hw_dbg(hw, "PHY address cmd didn't complete\n");
375 return IXGBE_ERR_PHY;
379 * Address cycle complete, setup and write the write
382 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
383 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
384 (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
385 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
387 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
389 /* Check every 10 usec to see if the address cycle
390 * completed. The MDI Command bit will clear when the
391 * operation is complete
393 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
396 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
397 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
401 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
402 hw_dbg(hw, "PHY write cmd didn't complete\n");
403 return IXGBE_ERR_PHY;
410 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
411 * using SWFW lock- this function is needed in most cases
412 * @hw: pointer to hardware structure
413 * @reg_addr: 32 bit PHY register to write
414 * @device_type: 5 bit device type
415 * @phy_data: Data to write to the PHY register
417 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
418 u32 device_type, u16 phy_data)
423 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
424 gssr = IXGBE_GSSR_PHY1_SM;
426 gssr = IXGBE_GSSR_PHY0_SM;
428 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
429 status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type,
431 hw->mac.ops.release_swfw_sync(hw, gssr);
433 return IXGBE_ERR_SWFW_SYNC;
440 * ixgbe_setup_phy_link_generic - Set and restart autoneg
441 * @hw: pointer to hardware structure
443 * Restart autonegotiation and PHY and waits for completion.
445 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
448 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
449 bool autoneg = false;
450 ixgbe_link_speed speed;
452 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
454 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
455 /* Set or unset auto-negotiation 10G advertisement */
456 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
460 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
461 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
462 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
464 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
469 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
470 /* Set or unset auto-negotiation 1G advertisement */
471 hw->phy.ops.read_reg(hw,
472 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
476 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
477 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
478 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
480 hw->phy.ops.write_reg(hw,
481 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
486 if (speed & IXGBE_LINK_SPEED_100_FULL) {
487 /* Set or unset auto-negotiation 100M advertisement */
488 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
492 autoneg_reg &= ~(ADVERTISE_100FULL |
494 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
495 autoneg_reg |= ADVERTISE_100FULL;
497 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
502 /* Blocked by MNG FW so don't reset PHY */
503 if (ixgbe_check_reset_blocked(hw))
506 /* Restart PHY autonegotiation and wait for completion */
507 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
508 MDIO_MMD_AN, &autoneg_reg);
510 autoneg_reg |= MDIO_AN_CTRL1_RESTART;
512 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
513 MDIO_MMD_AN, autoneg_reg);
519 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
520 * @hw: pointer to hardware structure
521 * @speed: new link speed
523 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
524 ixgbe_link_speed speed,
525 bool autoneg_wait_to_complete)
529 * Clear autoneg_advertised and set new values based on input link
532 hw->phy.autoneg_advertised = 0;
534 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
535 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
537 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
538 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
540 if (speed & IXGBE_LINK_SPEED_100_FULL)
541 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
543 /* Setup link based on the new speed settings */
544 hw->phy.ops.setup_link(hw);
550 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
551 * @hw: pointer to hardware structure
552 * @speed: pointer to link speed
553 * @autoneg: boolean auto-negotiation value
555 * Determines the link capabilities by reading the AUTOC register.
557 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
558 ixgbe_link_speed *speed,
567 status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
571 if (speed_ability & MDIO_SPEED_10G)
572 *speed |= IXGBE_LINK_SPEED_10GB_FULL;
573 if (speed_ability & MDIO_PMA_SPEED_1000)
574 *speed |= IXGBE_LINK_SPEED_1GB_FULL;
575 if (speed_ability & MDIO_PMA_SPEED_100)
576 *speed |= IXGBE_LINK_SPEED_100_FULL;
583 * ixgbe_check_phy_link_tnx - Determine link and speed status
584 * @hw: pointer to hardware structure
586 * Reads the VS1 register to determine if link is up and the current speed for
589 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
594 u32 max_time_out = 10;
599 /* Initialize speed and link to default case */
601 *speed = IXGBE_LINK_SPEED_10GB_FULL;
604 * Check current speed and link status of the PHY register.
605 * This is a vendor specific register and may have to
606 * be changed for other copper PHYs.
608 for (time_out = 0; time_out < max_time_out; time_out++) {
610 status = hw->phy.ops.read_reg(hw,
614 phy_link = phy_data &
615 IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
616 phy_speed = phy_data &
617 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
618 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
621 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
622 *speed = IXGBE_LINK_SPEED_1GB_FULL;
631 * ixgbe_setup_phy_link_tnx - Set and restart autoneg
632 * @hw: pointer to hardware structure
634 * Restart autonegotiation and PHY and waits for completion.
636 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
638 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
639 bool autoneg = false;
640 ixgbe_link_speed speed;
642 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
644 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
645 /* Set or unset auto-negotiation 10G advertisement */
646 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
650 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
651 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
652 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
654 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
659 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
660 /* Set or unset auto-negotiation 1G advertisement */
661 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
665 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
666 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
667 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
669 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
674 if (speed & IXGBE_LINK_SPEED_100_FULL) {
675 /* Set or unset auto-negotiation 100M advertisement */
676 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
680 autoneg_reg &= ~(ADVERTISE_100FULL |
682 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
683 autoneg_reg |= ADVERTISE_100FULL;
685 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
690 /* Blocked by MNG FW so don't reset PHY */
691 if (ixgbe_check_reset_blocked(hw))
694 /* Restart PHY autonegotiation and wait for completion */
695 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
696 MDIO_MMD_AN, &autoneg_reg);
698 autoneg_reg |= MDIO_AN_CTRL1_RESTART;
700 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
701 MDIO_MMD_AN, autoneg_reg);
706 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
707 * @hw: pointer to hardware structure
708 * @firmware_version: pointer to the PHY Firmware Version
710 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
711 u16 *firmware_version)
715 status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
723 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
724 * @hw: pointer to hardware structure
725 * @firmware_version: pointer to the PHY Firmware Version
727 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
728 u16 *firmware_version)
732 status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
740 * ixgbe_reset_phy_nl - Performs a PHY reset
741 * @hw: pointer to hardware structure
743 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
745 u16 phy_offset, control, eword, edata, block_crc;
746 bool end_data = false;
747 u16 list_offset, data_offset;
752 /* Blocked by MNG FW so bail */
753 if (ixgbe_check_reset_blocked(hw))
756 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &phy_data);
758 /* reset the PHY and poll for completion */
759 hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
760 (phy_data | MDIO_CTRL1_RESET));
762 for (i = 0; i < 100; i++) {
763 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
765 if ((phy_data & MDIO_CTRL1_RESET) == 0)
767 usleep_range(10000, 20000);
770 if ((phy_data & MDIO_CTRL1_RESET) != 0) {
771 hw_dbg(hw, "PHY reset did not complete.\n");
772 return IXGBE_ERR_PHY;
775 /* Get init offsets */
776 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
781 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
785 * Read control word from PHY init contents offset
787 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
790 control = (eword & IXGBE_CONTROL_MASK_NL) >>
791 IXGBE_CONTROL_SHIFT_NL;
792 edata = eword & IXGBE_DATA_MASK_NL;
796 hw_dbg(hw, "DELAY: %d MS\n", edata);
797 usleep_range(edata * 1000, edata * 2000);
800 hw_dbg(hw, "DATA:\n");
802 ret_val = hw->eeprom.ops.read(hw, data_offset++,
806 for (i = 0; i < edata; i++) {
807 ret_val = hw->eeprom.ops.read(hw, data_offset,
811 hw->phy.ops.write_reg(hw, phy_offset,
812 MDIO_MMD_PMAPMD, eword);
813 hw_dbg(hw, "Wrote %4.4x to %4.4x\n", eword,
819 case IXGBE_CONTROL_NL:
821 hw_dbg(hw, "CONTROL:\n");
822 if (edata == IXGBE_CONTROL_EOL_NL) {
825 } else if (edata == IXGBE_CONTROL_SOL_NL) {
828 hw_dbg(hw, "Bad control value\n");
829 return IXGBE_ERR_PHY;
833 hw_dbg(hw, "Bad control type\n");
834 return IXGBE_ERR_PHY;
841 hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
842 return IXGBE_ERR_PHY;
846 * ixgbe_identify_module_generic - Identifies module type
847 * @hw: pointer to hardware structure
849 * Determines HW type and calls appropriate function.
851 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
853 switch (hw->mac.ops.get_media_type(hw)) {
854 case ixgbe_media_type_fiber:
855 return ixgbe_identify_sfp_module_generic(hw);
856 case ixgbe_media_type_fiber_qsfp:
857 return ixgbe_identify_qsfp_module_generic(hw);
859 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
860 return IXGBE_ERR_SFP_NOT_PRESENT;
863 return IXGBE_ERR_SFP_NOT_PRESENT;
867 * ixgbe_identify_sfp_module_generic - Identifies SFP modules
868 * @hw: pointer to hardware structure
870 * Searches for and identifies the SFP module and assigns appropriate PHY type.
872 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
874 struct ixgbe_adapter *adapter = hw->back;
877 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
879 u8 comp_codes_1g = 0;
880 u8 comp_codes_10g = 0;
881 u8 oui_bytes[3] = {0, 0, 0};
886 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
887 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
888 return IXGBE_ERR_SFP_NOT_PRESENT;
891 status = hw->phy.ops.read_i2c_eeprom(hw,
892 IXGBE_SFF_IDENTIFIER,
896 goto err_read_i2c_eeprom;
898 /* LAN ID is needed for sfp_type determination */
899 hw->mac.ops.set_lan_id(hw);
901 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
902 hw->phy.type = ixgbe_phy_sfp_unsupported;
903 return IXGBE_ERR_SFP_NOT_SUPPORTED;
905 status = hw->phy.ops.read_i2c_eeprom(hw,
906 IXGBE_SFF_1GBE_COMP_CODES,
910 goto err_read_i2c_eeprom;
912 status = hw->phy.ops.read_i2c_eeprom(hw,
913 IXGBE_SFF_10GBE_COMP_CODES,
917 goto err_read_i2c_eeprom;
918 status = hw->phy.ops.read_i2c_eeprom(hw,
919 IXGBE_SFF_CABLE_TECHNOLOGY,
923 goto err_read_i2c_eeprom;
930 * 3 SFP_DA_CORE0 - 82599-specific
931 * 4 SFP_DA_CORE1 - 82599-specific
932 * 5 SFP_SR/LR_CORE0 - 82599-specific
933 * 6 SFP_SR/LR_CORE1 - 82599-specific
934 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific
935 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific
936 * 9 SFP_1g_cu_CORE0 - 82599-specific
937 * 10 SFP_1g_cu_CORE1 - 82599-specific
938 * 11 SFP_1g_sx_CORE0 - 82599-specific
939 * 12 SFP_1g_sx_CORE1 - 82599-specific
941 if (hw->mac.type == ixgbe_mac_82598EB) {
942 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
943 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
944 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
945 hw->phy.sfp_type = ixgbe_sfp_type_sr;
946 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
947 hw->phy.sfp_type = ixgbe_sfp_type_lr;
949 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
950 } else if (hw->mac.type == ixgbe_mac_82599EB) {
951 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
952 if (hw->bus.lan_id == 0)
954 ixgbe_sfp_type_da_cu_core0;
957 ixgbe_sfp_type_da_cu_core1;
958 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
959 hw->phy.ops.read_i2c_eeprom(
960 hw, IXGBE_SFF_CABLE_SPEC_COMP,
963 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
964 if (hw->bus.lan_id == 0)
966 ixgbe_sfp_type_da_act_lmt_core0;
969 ixgbe_sfp_type_da_act_lmt_core1;
972 ixgbe_sfp_type_unknown;
974 } else if (comp_codes_10g &
975 (IXGBE_SFF_10GBASESR_CAPABLE |
976 IXGBE_SFF_10GBASELR_CAPABLE)) {
977 if (hw->bus.lan_id == 0)
979 ixgbe_sfp_type_srlr_core0;
982 ixgbe_sfp_type_srlr_core1;
983 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
984 if (hw->bus.lan_id == 0)
986 ixgbe_sfp_type_1g_cu_core0;
989 ixgbe_sfp_type_1g_cu_core1;
990 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
991 if (hw->bus.lan_id == 0)
993 ixgbe_sfp_type_1g_sx_core0;
996 ixgbe_sfp_type_1g_sx_core1;
997 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
998 if (hw->bus.lan_id == 0)
1000 ixgbe_sfp_type_1g_lx_core0;
1003 ixgbe_sfp_type_1g_lx_core1;
1005 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1009 if (hw->phy.sfp_type != stored_sfp_type)
1010 hw->phy.sfp_setup_needed = true;
1012 /* Determine if the SFP+ PHY is dual speed or not. */
1013 hw->phy.multispeed_fiber = false;
1014 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1015 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1016 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1017 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1018 hw->phy.multispeed_fiber = true;
1020 /* Determine PHY vendor */
1021 if (hw->phy.type != ixgbe_phy_nl) {
1022 hw->phy.id = identifier;
1023 status = hw->phy.ops.read_i2c_eeprom(hw,
1024 IXGBE_SFF_VENDOR_OUI_BYTE0,
1028 goto err_read_i2c_eeprom;
1030 status = hw->phy.ops.read_i2c_eeprom(hw,
1031 IXGBE_SFF_VENDOR_OUI_BYTE1,
1035 goto err_read_i2c_eeprom;
1037 status = hw->phy.ops.read_i2c_eeprom(hw,
1038 IXGBE_SFF_VENDOR_OUI_BYTE2,
1042 goto err_read_i2c_eeprom;
1045 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1046 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1047 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1049 switch (vendor_oui) {
1050 case IXGBE_SFF_VENDOR_OUI_TYCO:
1051 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1053 ixgbe_phy_sfp_passive_tyco;
1055 case IXGBE_SFF_VENDOR_OUI_FTL:
1056 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1057 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1059 hw->phy.type = ixgbe_phy_sfp_ftl;
1061 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1062 hw->phy.type = ixgbe_phy_sfp_avago;
1064 case IXGBE_SFF_VENDOR_OUI_INTEL:
1065 hw->phy.type = ixgbe_phy_sfp_intel;
1068 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1070 ixgbe_phy_sfp_passive_unknown;
1071 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1073 ixgbe_phy_sfp_active_unknown;
1075 hw->phy.type = ixgbe_phy_sfp_unknown;
1080 /* Allow any DA cable vendor */
1081 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1082 IXGBE_SFF_DA_ACTIVE_CABLE))
1085 /* Verify supported 1G SFP modules */
1086 if (comp_codes_10g == 0 &&
1087 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1088 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1089 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1090 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1091 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1092 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1093 hw->phy.type = ixgbe_phy_sfp_unsupported;
1094 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1097 /* Anything else 82598-based is supported */
1098 if (hw->mac.type == ixgbe_mac_82598EB)
1101 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1102 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1103 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1104 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1105 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1106 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1107 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1108 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1109 /* Make sure we're a supported PHY type */
1110 if (hw->phy.type == ixgbe_phy_sfp_intel)
1112 if (hw->allow_unsupported_sfp) {
1113 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");
1116 hw_dbg(hw, "SFP+ module not supported\n");
1117 hw->phy.type = ixgbe_phy_sfp_unsupported;
1118 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1122 err_read_i2c_eeprom:
1123 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1124 if (hw->phy.type != ixgbe_phy_nl) {
1126 hw->phy.type = ixgbe_phy_unknown;
1128 return IXGBE_ERR_SFP_NOT_PRESENT;
1132 * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1133 * @hw: pointer to hardware structure
1135 * Searches for and identifies the QSFP module and assigns appropriate PHY type
1137 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1139 struct ixgbe_adapter *adapter = hw->back;
1142 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1144 u8 comp_codes_1g = 0;
1145 u8 comp_codes_10g = 0;
1146 u8 oui_bytes[3] = {0, 0, 0};
1147 u16 enforce_sfp = 0;
1149 u8 cable_length = 0;
1151 bool active_cable = false;
1153 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1154 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1155 return IXGBE_ERR_SFP_NOT_PRESENT;
1158 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1162 goto err_read_i2c_eeprom;
1164 if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1165 hw->phy.type = ixgbe_phy_sfp_unsupported;
1166 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1169 hw->phy.id = identifier;
1171 /* LAN ID is needed for sfp_type determination */
1172 hw->mac.ops.set_lan_id(hw);
1174 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1178 goto err_read_i2c_eeprom;
1180 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1184 goto err_read_i2c_eeprom;
1186 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1187 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1188 if (hw->bus.lan_id == 0)
1189 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1191 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1192 } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1193 IXGBE_SFF_10GBASELR_CAPABLE)) {
1194 if (hw->bus.lan_id == 0)
1195 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1197 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1199 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1200 active_cable = true;
1202 if (!active_cable) {
1203 /* check for active DA cables that pre-date
1206 hw->phy.ops.read_i2c_eeprom(hw,
1207 IXGBE_SFF_QSFP_CONNECTOR,
1210 hw->phy.ops.read_i2c_eeprom(hw,
1211 IXGBE_SFF_QSFP_CABLE_LENGTH,
1214 hw->phy.ops.read_i2c_eeprom(hw,
1215 IXGBE_SFF_QSFP_DEVICE_TECH,
1219 IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1220 (cable_length > 0) &&
1221 ((device_tech >> 4) ==
1222 IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1223 active_cable = true;
1227 hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1228 if (hw->bus.lan_id == 0)
1230 ixgbe_sfp_type_da_act_lmt_core0;
1233 ixgbe_sfp_type_da_act_lmt_core1;
1235 /* unsupported module type */
1236 hw->phy.type = ixgbe_phy_sfp_unsupported;
1237 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1241 if (hw->phy.sfp_type != stored_sfp_type)
1242 hw->phy.sfp_setup_needed = true;
1244 /* Determine if the QSFP+ PHY is dual speed or not. */
1245 hw->phy.multispeed_fiber = false;
1246 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1247 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1248 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1249 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1250 hw->phy.multispeed_fiber = true;
1252 /* Determine PHY vendor for optical modules */
1253 if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1254 IXGBE_SFF_10GBASELR_CAPABLE)) {
1255 status = hw->phy.ops.read_i2c_eeprom(hw,
1256 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1260 goto err_read_i2c_eeprom;
1262 status = hw->phy.ops.read_i2c_eeprom(hw,
1263 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1267 goto err_read_i2c_eeprom;
1269 status = hw->phy.ops.read_i2c_eeprom(hw,
1270 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1274 goto err_read_i2c_eeprom;
1277 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1278 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1279 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1281 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1282 hw->phy.type = ixgbe_phy_qsfp_intel;
1284 hw->phy.type = ixgbe_phy_qsfp_unknown;
1286 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1287 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1288 /* Make sure we're a supported PHY type */
1289 if (hw->phy.type == ixgbe_phy_qsfp_intel)
1291 if (hw->allow_unsupported_sfp) {
1292 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");
1295 hw_dbg(hw, "QSFP module not supported\n");
1296 hw->phy.type = ixgbe_phy_sfp_unsupported;
1297 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1303 err_read_i2c_eeprom:
1304 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1306 hw->phy.type = ixgbe_phy_unknown;
1308 return IXGBE_ERR_SFP_NOT_PRESENT;
1312 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1313 * @hw: pointer to hardware structure
1314 * @list_offset: offset to the SFP ID list
1315 * @data_offset: offset to the SFP data block
1317 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1318 * so it returns the offsets to the phy init sequence block.
1320 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1325 u16 sfp_type = hw->phy.sfp_type;
1327 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1328 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1330 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1331 return IXGBE_ERR_SFP_NOT_PRESENT;
1333 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1334 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1335 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1338 * Limiting active cables and 1G Phys must be initialized as
1341 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1342 sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1343 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1344 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1345 sfp_type = ixgbe_sfp_type_srlr_core0;
1346 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1347 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1348 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1349 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1350 sfp_type = ixgbe_sfp_type_srlr_core1;
1352 /* Read offset to PHY init contents */
1353 if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1354 hw_err(hw, "eeprom read at %d failed\n",
1355 IXGBE_PHY_INIT_OFFSET_NL);
1356 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1359 if ((!*list_offset) || (*list_offset == 0xFFFF))
1360 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1362 /* Shift offset to first ID word */
1366 * Find the matching SFP ID in the EEPROM
1367 * and program the init sequence
1369 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1372 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1373 if (sfp_id == sfp_type) {
1375 if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1377 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1378 hw_dbg(hw, "SFP+ module not supported\n");
1379 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1384 (*list_offset) += 2;
1385 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1390 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1391 hw_dbg(hw, "No matching SFP+ module found\n");
1392 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1398 hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
1399 return IXGBE_ERR_PHY;
1403 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1404 * @hw: pointer to hardware structure
1405 * @byte_offset: EEPROM byte offset to read
1406 * @eeprom_data: value read
1408 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1410 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1413 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1414 IXGBE_I2C_EEPROM_DEV_ADDR,
1419 * ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1420 * @hw: pointer to hardware structure
1421 * @byte_offset: byte offset at address 0xA2
1422 * @eeprom_data: value read
1424 * Performs byte read operation to SFP module's SFF-8472 data over I2C
1426 s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1429 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1430 IXGBE_I2C_EEPROM_DEV_ADDR2,
1435 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1436 * @hw: pointer to hardware structure
1437 * @byte_offset: EEPROM byte offset to write
1438 * @eeprom_data: value to write
1440 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1442 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1445 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1446 IXGBE_I2C_EEPROM_DEV_ADDR,
1451 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1452 * @hw: pointer to hardware structure
1453 * @byte_offset: byte offset to read
1456 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1457 * a specified device address.
1459 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1460 u8 dev_addr, u8 *data)
1469 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1470 swfw_mask = IXGBE_GSSR_PHY1_SM;
1472 swfw_mask = IXGBE_GSSR_PHY0_SM;
1475 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1476 return IXGBE_ERR_SWFW_SYNC;
1478 ixgbe_i2c_start(hw);
1480 /* Device Address and write indication */
1481 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1485 status = ixgbe_get_i2c_ack(hw);
1489 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1493 status = ixgbe_get_i2c_ack(hw);
1497 ixgbe_i2c_start(hw);
1499 /* Device Address and read indication */
1500 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1504 status = ixgbe_get_i2c_ack(hw);
1508 status = ixgbe_clock_in_i2c_byte(hw, data);
1512 status = ixgbe_clock_out_i2c_bit(hw, nack);
1520 ixgbe_i2c_bus_clear(hw);
1521 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1524 if (retry < max_retry)
1525 hw_dbg(hw, "I2C byte read error - Retrying.\n");
1527 hw_dbg(hw, "I2C byte read error.\n");
1529 } while (retry < max_retry);
1531 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1537 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1538 * @hw: pointer to hardware structure
1539 * @byte_offset: byte offset to write
1540 * @data: value to write
1542 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1543 * a specified device address.
1545 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1546 u8 dev_addr, u8 data)
1553 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1554 swfw_mask = IXGBE_GSSR_PHY1_SM;
1556 swfw_mask = IXGBE_GSSR_PHY0_SM;
1558 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1559 return IXGBE_ERR_SWFW_SYNC;
1562 ixgbe_i2c_start(hw);
1564 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1568 status = ixgbe_get_i2c_ack(hw);
1572 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1576 status = ixgbe_get_i2c_ack(hw);
1580 status = ixgbe_clock_out_i2c_byte(hw, data);
1584 status = ixgbe_get_i2c_ack(hw);
1592 ixgbe_i2c_bus_clear(hw);
1594 if (retry < max_retry)
1595 hw_dbg(hw, "I2C byte write error - Retrying.\n");
1597 hw_dbg(hw, "I2C byte write error.\n");
1598 } while (retry < max_retry);
1600 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1606 * ixgbe_i2c_start - Sets I2C start condition
1607 * @hw: pointer to hardware structure
1609 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1611 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1613 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1615 /* Start condition must begin with data and clock high */
1616 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1617 ixgbe_raise_i2c_clk(hw, &i2cctl);
1619 /* Setup time for start condition (4.7us) */
1620 udelay(IXGBE_I2C_T_SU_STA);
1622 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1624 /* Hold time for start condition (4us) */
1625 udelay(IXGBE_I2C_T_HD_STA);
1627 ixgbe_lower_i2c_clk(hw, &i2cctl);
1629 /* Minimum low period of clock is 4.7 us */
1630 udelay(IXGBE_I2C_T_LOW);
1635 * ixgbe_i2c_stop - Sets I2C stop condition
1636 * @hw: pointer to hardware structure
1638 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1640 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1642 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1644 /* Stop condition must begin with data low and clock high */
1645 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1646 ixgbe_raise_i2c_clk(hw, &i2cctl);
1648 /* Setup time for stop condition (4us) */
1649 udelay(IXGBE_I2C_T_SU_STO);
1651 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1653 /* bus free time between stop and start (4.7us)*/
1654 udelay(IXGBE_I2C_T_BUF);
1658 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1659 * @hw: pointer to hardware structure
1660 * @data: data byte to clock in
1662 * Clocks in one byte data via I2C data/clock
1664 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1669 for (i = 7; i >= 0; i--) {
1670 ixgbe_clock_in_i2c_bit(hw, &bit);
1678 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1679 * @hw: pointer to hardware structure
1680 * @data: data byte clocked out
1682 * Clocks out one byte data via I2C data/clock
1684 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1691 for (i = 7; i >= 0; i--) {
1692 bit = (data >> i) & 0x1;
1693 status = ixgbe_clock_out_i2c_bit(hw, bit);
1699 /* Release SDA line (set high) */
1700 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1701 i2cctl |= IXGBE_I2C_DATA_OUT;
1702 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1703 IXGBE_WRITE_FLUSH(hw);
1709 * ixgbe_get_i2c_ack - Polls for I2C ACK
1710 * @hw: pointer to hardware structure
1712 * Clocks in/out one bit via I2C data/clock
1714 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1718 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1722 ixgbe_raise_i2c_clk(hw, &i2cctl);
1725 /* Minimum high period of clock is 4us */
1726 udelay(IXGBE_I2C_T_HIGH);
1728 /* Poll for ACK. Note that ACK in I2C spec is
1729 * transition from 1 to 0 */
1730 for (i = 0; i < timeout; i++) {
1731 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1732 ack = ixgbe_get_i2c_data(&i2cctl);
1740 hw_dbg(hw, "I2C ack was not received.\n");
1741 status = IXGBE_ERR_I2C;
1744 ixgbe_lower_i2c_clk(hw, &i2cctl);
1746 /* Minimum low period of clock is 4.7 us */
1747 udelay(IXGBE_I2C_T_LOW);
1753 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1754 * @hw: pointer to hardware structure
1755 * @data: read data value
1757 * Clocks in one bit via I2C data/clock
1759 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1761 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1763 ixgbe_raise_i2c_clk(hw, &i2cctl);
1765 /* Minimum high period of clock is 4us */
1766 udelay(IXGBE_I2C_T_HIGH);
1768 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1769 *data = ixgbe_get_i2c_data(&i2cctl);
1771 ixgbe_lower_i2c_clk(hw, &i2cctl);
1773 /* Minimum low period of clock is 4.7 us */
1774 udelay(IXGBE_I2C_T_LOW);
1780 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1781 * @hw: pointer to hardware structure
1782 * @data: data value to write
1784 * Clocks out one bit via I2C data/clock
1786 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1789 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1791 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1793 ixgbe_raise_i2c_clk(hw, &i2cctl);
1795 /* Minimum high period of clock is 4us */
1796 udelay(IXGBE_I2C_T_HIGH);
1798 ixgbe_lower_i2c_clk(hw, &i2cctl);
1800 /* Minimum low period of clock is 4.7 us.
1801 * This also takes care of the data hold time.
1803 udelay(IXGBE_I2C_T_LOW);
1805 hw_dbg(hw, "I2C data was not set to %X\n", data);
1806 return IXGBE_ERR_I2C;
1812 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1813 * @hw: pointer to hardware structure
1814 * @i2cctl: Current value of I2CCTL register
1816 * Raises the I2C clock line '0'->'1'
1818 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1821 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
1824 for (i = 0; i < timeout; i++) {
1825 *i2cctl |= IXGBE_I2C_CLK_OUT;
1826 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1827 IXGBE_WRITE_FLUSH(hw);
1828 /* SCL rise time (1000ns) */
1829 udelay(IXGBE_I2C_T_RISE);
1831 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1832 if (i2cctl_r & IXGBE_I2C_CLK_IN)
1838 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1839 * @hw: pointer to hardware structure
1840 * @i2cctl: Current value of I2CCTL register
1842 * Lowers the I2C clock line '1'->'0'
1844 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1847 *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1849 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1850 IXGBE_WRITE_FLUSH(hw);
1852 /* SCL fall time (300ns) */
1853 udelay(IXGBE_I2C_T_FALL);
1857 * ixgbe_set_i2c_data - Sets the I2C data bit
1858 * @hw: pointer to hardware structure
1859 * @i2cctl: Current value of I2CCTL register
1860 * @data: I2C data value (0 or 1) to set
1862 * Sets the I2C data bit
1864 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1867 *i2cctl |= IXGBE_I2C_DATA_OUT;
1869 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1871 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1872 IXGBE_WRITE_FLUSH(hw);
1874 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1875 udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1877 /* Verify data was set correctly */
1878 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1879 if (data != ixgbe_get_i2c_data(i2cctl)) {
1880 hw_dbg(hw, "Error - I2C data was not set to %X.\n", data);
1881 return IXGBE_ERR_I2C;
1888 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1889 * @hw: pointer to hardware structure
1890 * @i2cctl: Current value of I2CCTL register
1892 * Returns the I2C data bit value
1894 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1896 if (*i2cctl & IXGBE_I2C_DATA_IN)
1902 * ixgbe_i2c_bus_clear - Clears the I2C bus
1903 * @hw: pointer to hardware structure
1905 * Clears the I2C bus by sending nine clock pulses.
1906 * Used when data line is stuck low.
1908 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1910 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1913 ixgbe_i2c_start(hw);
1915 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1917 for (i = 0; i < 9; i++) {
1918 ixgbe_raise_i2c_clk(hw, &i2cctl);
1920 /* Min high period of clock is 4us */
1921 udelay(IXGBE_I2C_T_HIGH);
1923 ixgbe_lower_i2c_clk(hw, &i2cctl);
1925 /* Min low period of clock is 4.7us*/
1926 udelay(IXGBE_I2C_T_LOW);
1929 ixgbe_i2c_start(hw);
1931 /* Put the i2c bus back to default state */
1936 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
1937 * @hw: pointer to hardware structure
1939 * Checks if the LASI temp alarm status was triggered due to overtemp
1941 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1945 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1948 /* Check that the LASI temp alarm status was triggered */
1949 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1950 MDIO_MMD_PMAPMD, &phy_data);
1952 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1955 return IXGBE_ERR_OVERTEMP;