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)
639 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
640 bool autoneg = false;
641 ixgbe_link_speed speed;
643 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
645 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
646 /* Set or unset auto-negotiation 10G advertisement */
647 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
651 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
652 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
653 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
655 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
660 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
661 /* Set or unset auto-negotiation 1G advertisement */
662 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
666 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
667 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
668 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
670 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
675 if (speed & IXGBE_LINK_SPEED_100_FULL) {
676 /* Set or unset auto-negotiation 100M advertisement */
677 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
681 autoneg_reg &= ~(ADVERTISE_100FULL |
683 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
684 autoneg_reg |= ADVERTISE_100FULL;
686 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
691 /* Blocked by MNG FW so don't reset PHY */
692 if (ixgbe_check_reset_blocked(hw))
695 /* Restart PHY autonegotiation and wait for completion */
696 hw->phy.ops.read_reg(hw, MDIO_CTRL1,
697 MDIO_MMD_AN, &autoneg_reg);
699 autoneg_reg |= MDIO_AN_CTRL1_RESTART;
701 hw->phy.ops.write_reg(hw, MDIO_CTRL1,
702 MDIO_MMD_AN, autoneg_reg);
708 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
709 * @hw: pointer to hardware structure
710 * @firmware_version: pointer to the PHY Firmware Version
712 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
713 u16 *firmware_version)
717 status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
725 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
726 * @hw: pointer to hardware structure
727 * @firmware_version: pointer to the PHY Firmware Version
729 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
730 u16 *firmware_version)
734 status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
742 * ixgbe_reset_phy_nl - Performs a PHY reset
743 * @hw: pointer to hardware structure
745 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
747 u16 phy_offset, control, eword, edata, block_crc;
748 bool end_data = false;
749 u16 list_offset, data_offset;
754 /* Blocked by MNG FW so bail */
755 if (ixgbe_check_reset_blocked(hw))
758 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &phy_data);
760 /* reset the PHY and poll for completion */
761 hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
762 (phy_data | MDIO_CTRL1_RESET));
764 for (i = 0; i < 100; i++) {
765 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
767 if ((phy_data & MDIO_CTRL1_RESET) == 0)
769 usleep_range(10000, 20000);
772 if ((phy_data & MDIO_CTRL1_RESET) != 0) {
773 hw_dbg(hw, "PHY reset did not complete.\n");
774 return IXGBE_ERR_PHY;
777 /* Get init offsets */
778 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
783 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
787 * Read control word from PHY init contents offset
789 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
792 control = (eword & IXGBE_CONTROL_MASK_NL) >>
793 IXGBE_CONTROL_SHIFT_NL;
794 edata = eword & IXGBE_DATA_MASK_NL;
798 hw_dbg(hw, "DELAY: %d MS\n", edata);
799 usleep_range(edata * 1000, edata * 2000);
802 hw_dbg(hw, "DATA:\n");
804 ret_val = hw->eeprom.ops.read(hw, data_offset++,
808 for (i = 0; i < edata; i++) {
809 ret_val = hw->eeprom.ops.read(hw, data_offset,
813 hw->phy.ops.write_reg(hw, phy_offset,
814 MDIO_MMD_PMAPMD, eword);
815 hw_dbg(hw, "Wrote %4.4x to %4.4x\n", eword,
821 case IXGBE_CONTROL_NL:
823 hw_dbg(hw, "CONTROL:\n");
824 if (edata == IXGBE_CONTROL_EOL_NL) {
827 } else if (edata == IXGBE_CONTROL_SOL_NL) {
830 hw_dbg(hw, "Bad control value\n");
831 return IXGBE_ERR_PHY;
835 hw_dbg(hw, "Bad control type\n");
836 return IXGBE_ERR_PHY;
843 hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
844 return IXGBE_ERR_PHY;
848 * ixgbe_identify_module_generic - Identifies module type
849 * @hw: pointer to hardware structure
851 * Determines HW type and calls appropriate function.
853 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
855 switch (hw->mac.ops.get_media_type(hw)) {
856 case ixgbe_media_type_fiber:
857 return ixgbe_identify_sfp_module_generic(hw);
858 case ixgbe_media_type_fiber_qsfp:
859 return ixgbe_identify_qsfp_module_generic(hw);
861 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
862 return IXGBE_ERR_SFP_NOT_PRESENT;
865 return IXGBE_ERR_SFP_NOT_PRESENT;
869 * ixgbe_identify_sfp_module_generic - Identifies SFP modules
870 * @hw: pointer to hardware structure
872 * Searches for and identifies the SFP module and assigns appropriate PHY type.
874 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
876 struct ixgbe_adapter *adapter = hw->back;
879 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
881 u8 comp_codes_1g = 0;
882 u8 comp_codes_10g = 0;
883 u8 oui_bytes[3] = {0, 0, 0};
888 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
889 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
890 return IXGBE_ERR_SFP_NOT_PRESENT;
893 status = hw->phy.ops.read_i2c_eeprom(hw,
894 IXGBE_SFF_IDENTIFIER,
898 goto err_read_i2c_eeprom;
900 /* LAN ID is needed for sfp_type determination */
901 hw->mac.ops.set_lan_id(hw);
903 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
904 hw->phy.type = ixgbe_phy_sfp_unsupported;
905 return IXGBE_ERR_SFP_NOT_SUPPORTED;
907 status = hw->phy.ops.read_i2c_eeprom(hw,
908 IXGBE_SFF_1GBE_COMP_CODES,
912 goto err_read_i2c_eeprom;
914 status = hw->phy.ops.read_i2c_eeprom(hw,
915 IXGBE_SFF_10GBE_COMP_CODES,
919 goto err_read_i2c_eeprom;
920 status = hw->phy.ops.read_i2c_eeprom(hw,
921 IXGBE_SFF_CABLE_TECHNOLOGY,
925 goto err_read_i2c_eeprom;
932 * 3 SFP_DA_CORE0 - 82599-specific
933 * 4 SFP_DA_CORE1 - 82599-specific
934 * 5 SFP_SR/LR_CORE0 - 82599-specific
935 * 6 SFP_SR/LR_CORE1 - 82599-specific
936 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific
937 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific
938 * 9 SFP_1g_cu_CORE0 - 82599-specific
939 * 10 SFP_1g_cu_CORE1 - 82599-specific
940 * 11 SFP_1g_sx_CORE0 - 82599-specific
941 * 12 SFP_1g_sx_CORE1 - 82599-specific
943 if (hw->mac.type == ixgbe_mac_82598EB) {
944 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
945 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
946 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
947 hw->phy.sfp_type = ixgbe_sfp_type_sr;
948 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
949 hw->phy.sfp_type = ixgbe_sfp_type_lr;
951 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
952 } else if (hw->mac.type == ixgbe_mac_82599EB) {
953 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
954 if (hw->bus.lan_id == 0)
956 ixgbe_sfp_type_da_cu_core0;
959 ixgbe_sfp_type_da_cu_core1;
960 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
961 hw->phy.ops.read_i2c_eeprom(
962 hw, IXGBE_SFF_CABLE_SPEC_COMP,
965 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
966 if (hw->bus.lan_id == 0)
968 ixgbe_sfp_type_da_act_lmt_core0;
971 ixgbe_sfp_type_da_act_lmt_core1;
974 ixgbe_sfp_type_unknown;
976 } else if (comp_codes_10g &
977 (IXGBE_SFF_10GBASESR_CAPABLE |
978 IXGBE_SFF_10GBASELR_CAPABLE)) {
979 if (hw->bus.lan_id == 0)
981 ixgbe_sfp_type_srlr_core0;
984 ixgbe_sfp_type_srlr_core1;
985 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
986 if (hw->bus.lan_id == 0)
988 ixgbe_sfp_type_1g_cu_core0;
991 ixgbe_sfp_type_1g_cu_core1;
992 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
993 if (hw->bus.lan_id == 0)
995 ixgbe_sfp_type_1g_sx_core0;
998 ixgbe_sfp_type_1g_sx_core1;
999 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1000 if (hw->bus.lan_id == 0)
1002 ixgbe_sfp_type_1g_lx_core0;
1005 ixgbe_sfp_type_1g_lx_core1;
1007 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1011 if (hw->phy.sfp_type != stored_sfp_type)
1012 hw->phy.sfp_setup_needed = true;
1014 /* Determine if the SFP+ PHY is dual speed or not. */
1015 hw->phy.multispeed_fiber = false;
1016 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1017 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1018 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1019 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1020 hw->phy.multispeed_fiber = true;
1022 /* Determine PHY vendor */
1023 if (hw->phy.type != ixgbe_phy_nl) {
1024 hw->phy.id = identifier;
1025 status = hw->phy.ops.read_i2c_eeprom(hw,
1026 IXGBE_SFF_VENDOR_OUI_BYTE0,
1030 goto err_read_i2c_eeprom;
1032 status = hw->phy.ops.read_i2c_eeprom(hw,
1033 IXGBE_SFF_VENDOR_OUI_BYTE1,
1037 goto err_read_i2c_eeprom;
1039 status = hw->phy.ops.read_i2c_eeprom(hw,
1040 IXGBE_SFF_VENDOR_OUI_BYTE2,
1044 goto err_read_i2c_eeprom;
1047 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1048 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1049 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1051 switch (vendor_oui) {
1052 case IXGBE_SFF_VENDOR_OUI_TYCO:
1053 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1055 ixgbe_phy_sfp_passive_tyco;
1057 case IXGBE_SFF_VENDOR_OUI_FTL:
1058 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1059 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1061 hw->phy.type = ixgbe_phy_sfp_ftl;
1063 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1064 hw->phy.type = ixgbe_phy_sfp_avago;
1066 case IXGBE_SFF_VENDOR_OUI_INTEL:
1067 hw->phy.type = ixgbe_phy_sfp_intel;
1070 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1072 ixgbe_phy_sfp_passive_unknown;
1073 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1075 ixgbe_phy_sfp_active_unknown;
1077 hw->phy.type = ixgbe_phy_sfp_unknown;
1082 /* Allow any DA cable vendor */
1083 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1084 IXGBE_SFF_DA_ACTIVE_CABLE))
1087 /* Verify supported 1G SFP modules */
1088 if (comp_codes_10g == 0 &&
1089 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1090 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1091 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1092 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1093 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1094 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1095 hw->phy.type = ixgbe_phy_sfp_unsupported;
1096 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1099 /* Anything else 82598-based is supported */
1100 if (hw->mac.type == ixgbe_mac_82598EB)
1103 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1104 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1105 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1106 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1107 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1108 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1109 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1110 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1111 /* Make sure we're a supported PHY type */
1112 if (hw->phy.type == ixgbe_phy_sfp_intel)
1114 if (hw->allow_unsupported_sfp) {
1115 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");
1118 hw_dbg(hw, "SFP+ module not supported\n");
1119 hw->phy.type = ixgbe_phy_sfp_unsupported;
1120 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1124 err_read_i2c_eeprom:
1125 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1126 if (hw->phy.type != ixgbe_phy_nl) {
1128 hw->phy.type = ixgbe_phy_unknown;
1130 return IXGBE_ERR_SFP_NOT_PRESENT;
1134 * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1135 * @hw: pointer to hardware structure
1137 * Searches for and identifies the QSFP module and assigns appropriate PHY type
1139 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1141 struct ixgbe_adapter *adapter = hw->back;
1144 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1146 u8 comp_codes_1g = 0;
1147 u8 comp_codes_10g = 0;
1148 u8 oui_bytes[3] = {0, 0, 0};
1149 u16 enforce_sfp = 0;
1151 u8 cable_length = 0;
1153 bool active_cable = false;
1155 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1156 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1157 return IXGBE_ERR_SFP_NOT_PRESENT;
1160 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1164 goto err_read_i2c_eeprom;
1166 if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1167 hw->phy.type = ixgbe_phy_sfp_unsupported;
1168 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1171 hw->phy.id = identifier;
1173 /* LAN ID is needed for sfp_type determination */
1174 hw->mac.ops.set_lan_id(hw);
1176 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1180 goto err_read_i2c_eeprom;
1182 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1186 goto err_read_i2c_eeprom;
1188 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1189 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1190 if (hw->bus.lan_id == 0)
1191 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1193 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1194 } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1195 IXGBE_SFF_10GBASELR_CAPABLE)) {
1196 if (hw->bus.lan_id == 0)
1197 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1199 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1201 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1202 active_cable = true;
1204 if (!active_cable) {
1205 /* check for active DA cables that pre-date
1208 hw->phy.ops.read_i2c_eeprom(hw,
1209 IXGBE_SFF_QSFP_CONNECTOR,
1212 hw->phy.ops.read_i2c_eeprom(hw,
1213 IXGBE_SFF_QSFP_CABLE_LENGTH,
1216 hw->phy.ops.read_i2c_eeprom(hw,
1217 IXGBE_SFF_QSFP_DEVICE_TECH,
1221 IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1222 (cable_length > 0) &&
1223 ((device_tech >> 4) ==
1224 IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1225 active_cable = true;
1229 hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1230 if (hw->bus.lan_id == 0)
1232 ixgbe_sfp_type_da_act_lmt_core0;
1235 ixgbe_sfp_type_da_act_lmt_core1;
1237 /* unsupported module type */
1238 hw->phy.type = ixgbe_phy_sfp_unsupported;
1239 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1243 if (hw->phy.sfp_type != stored_sfp_type)
1244 hw->phy.sfp_setup_needed = true;
1246 /* Determine if the QSFP+ PHY is dual speed or not. */
1247 hw->phy.multispeed_fiber = false;
1248 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1249 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1250 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1251 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1252 hw->phy.multispeed_fiber = true;
1254 /* Determine PHY vendor for optical modules */
1255 if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1256 IXGBE_SFF_10GBASELR_CAPABLE)) {
1257 status = hw->phy.ops.read_i2c_eeprom(hw,
1258 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1262 goto err_read_i2c_eeprom;
1264 status = hw->phy.ops.read_i2c_eeprom(hw,
1265 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1269 goto err_read_i2c_eeprom;
1271 status = hw->phy.ops.read_i2c_eeprom(hw,
1272 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1276 goto err_read_i2c_eeprom;
1279 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1280 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1281 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1283 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1284 hw->phy.type = ixgbe_phy_qsfp_intel;
1286 hw->phy.type = ixgbe_phy_qsfp_unknown;
1288 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1289 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1290 /* Make sure we're a supported PHY type */
1291 if (hw->phy.type == ixgbe_phy_qsfp_intel)
1293 if (hw->allow_unsupported_sfp) {
1294 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");
1297 hw_dbg(hw, "QSFP module not supported\n");
1298 hw->phy.type = ixgbe_phy_sfp_unsupported;
1299 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1305 err_read_i2c_eeprom:
1306 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1308 hw->phy.type = ixgbe_phy_unknown;
1310 return IXGBE_ERR_SFP_NOT_PRESENT;
1314 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1315 * @hw: pointer to hardware structure
1316 * @list_offset: offset to the SFP ID list
1317 * @data_offset: offset to the SFP data block
1319 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1320 * so it returns the offsets to the phy init sequence block.
1322 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1327 u16 sfp_type = hw->phy.sfp_type;
1329 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1330 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1332 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1333 return IXGBE_ERR_SFP_NOT_PRESENT;
1335 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1336 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1337 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1340 * Limiting active cables and 1G Phys must be initialized as
1343 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1344 sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1345 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1346 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1347 sfp_type = ixgbe_sfp_type_srlr_core0;
1348 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1349 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1350 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1351 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1352 sfp_type = ixgbe_sfp_type_srlr_core1;
1354 /* Read offset to PHY init contents */
1355 if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1356 hw_err(hw, "eeprom read at %d failed\n",
1357 IXGBE_PHY_INIT_OFFSET_NL);
1358 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1361 if ((!*list_offset) || (*list_offset == 0xFFFF))
1362 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1364 /* Shift offset to first ID word */
1368 * Find the matching SFP ID in the EEPROM
1369 * and program the init sequence
1371 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1374 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1375 if (sfp_id == sfp_type) {
1377 if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1379 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1380 hw_dbg(hw, "SFP+ module not supported\n");
1381 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1386 (*list_offset) += 2;
1387 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1392 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1393 hw_dbg(hw, "No matching SFP+ module found\n");
1394 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1400 hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
1401 return IXGBE_ERR_PHY;
1405 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1406 * @hw: pointer to hardware structure
1407 * @byte_offset: EEPROM byte offset to read
1408 * @eeprom_data: value read
1410 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1412 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1415 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1416 IXGBE_I2C_EEPROM_DEV_ADDR,
1421 * ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1422 * @hw: pointer to hardware structure
1423 * @byte_offset: byte offset at address 0xA2
1424 * @eeprom_data: value read
1426 * Performs byte read operation to SFP module's SFF-8472 data over I2C
1428 s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1431 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1432 IXGBE_I2C_EEPROM_DEV_ADDR2,
1437 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1438 * @hw: pointer to hardware structure
1439 * @byte_offset: EEPROM byte offset to write
1440 * @eeprom_data: value to write
1442 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1444 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1447 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1448 IXGBE_I2C_EEPROM_DEV_ADDR,
1453 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1454 * @hw: pointer to hardware structure
1455 * @byte_offset: byte offset to read
1458 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1459 * a specified device address.
1461 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1462 u8 dev_addr, u8 *data)
1471 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1472 swfw_mask = IXGBE_GSSR_PHY1_SM;
1474 swfw_mask = IXGBE_GSSR_PHY0_SM;
1477 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1478 return IXGBE_ERR_SWFW_SYNC;
1480 ixgbe_i2c_start(hw);
1482 /* Device Address and write indication */
1483 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1487 status = ixgbe_get_i2c_ack(hw);
1491 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1495 status = ixgbe_get_i2c_ack(hw);
1499 ixgbe_i2c_start(hw);
1501 /* Device Address and read indication */
1502 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1506 status = ixgbe_get_i2c_ack(hw);
1510 status = ixgbe_clock_in_i2c_byte(hw, data);
1514 status = ixgbe_clock_out_i2c_bit(hw, nack);
1522 ixgbe_i2c_bus_clear(hw);
1523 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1526 if (retry < max_retry)
1527 hw_dbg(hw, "I2C byte read error - Retrying.\n");
1529 hw_dbg(hw, "I2C byte read error.\n");
1531 } while (retry < max_retry);
1533 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1539 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1540 * @hw: pointer to hardware structure
1541 * @byte_offset: byte offset to write
1542 * @data: value to write
1544 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1545 * a specified device address.
1547 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1548 u8 dev_addr, u8 data)
1555 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1556 swfw_mask = IXGBE_GSSR_PHY1_SM;
1558 swfw_mask = IXGBE_GSSR_PHY0_SM;
1560 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
1561 return IXGBE_ERR_SWFW_SYNC;
1564 ixgbe_i2c_start(hw);
1566 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1570 status = ixgbe_get_i2c_ack(hw);
1574 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1578 status = ixgbe_get_i2c_ack(hw);
1582 status = ixgbe_clock_out_i2c_byte(hw, data);
1586 status = ixgbe_get_i2c_ack(hw);
1594 ixgbe_i2c_bus_clear(hw);
1596 if (retry < max_retry)
1597 hw_dbg(hw, "I2C byte write error - Retrying.\n");
1599 hw_dbg(hw, "I2C byte write error.\n");
1600 } while (retry < max_retry);
1602 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1608 * ixgbe_i2c_start - Sets I2C start condition
1609 * @hw: pointer to hardware structure
1611 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1613 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1615 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1617 /* Start condition must begin with data and clock high */
1618 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1619 ixgbe_raise_i2c_clk(hw, &i2cctl);
1621 /* Setup time for start condition (4.7us) */
1622 udelay(IXGBE_I2C_T_SU_STA);
1624 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1626 /* Hold time for start condition (4us) */
1627 udelay(IXGBE_I2C_T_HD_STA);
1629 ixgbe_lower_i2c_clk(hw, &i2cctl);
1631 /* Minimum low period of clock is 4.7 us */
1632 udelay(IXGBE_I2C_T_LOW);
1637 * ixgbe_i2c_stop - Sets I2C stop condition
1638 * @hw: pointer to hardware structure
1640 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1642 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1644 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1646 /* Stop condition must begin with data low and clock high */
1647 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1648 ixgbe_raise_i2c_clk(hw, &i2cctl);
1650 /* Setup time for stop condition (4us) */
1651 udelay(IXGBE_I2C_T_SU_STO);
1653 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1655 /* bus free time between stop and start (4.7us)*/
1656 udelay(IXGBE_I2C_T_BUF);
1660 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1661 * @hw: pointer to hardware structure
1662 * @data: data byte to clock in
1664 * Clocks in one byte data via I2C data/clock
1666 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1671 for (i = 7; i >= 0; i--) {
1672 ixgbe_clock_in_i2c_bit(hw, &bit);
1680 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1681 * @hw: pointer to hardware structure
1682 * @data: data byte clocked out
1684 * Clocks out one byte data via I2C data/clock
1686 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1693 for (i = 7; i >= 0; i--) {
1694 bit = (data >> i) & 0x1;
1695 status = ixgbe_clock_out_i2c_bit(hw, bit);
1701 /* Release SDA line (set high) */
1702 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1703 i2cctl |= IXGBE_I2C_DATA_OUT;
1704 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1705 IXGBE_WRITE_FLUSH(hw);
1711 * ixgbe_get_i2c_ack - Polls for I2C ACK
1712 * @hw: pointer to hardware structure
1714 * Clocks in/out one bit via I2C data/clock
1716 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1720 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1724 ixgbe_raise_i2c_clk(hw, &i2cctl);
1727 /* Minimum high period of clock is 4us */
1728 udelay(IXGBE_I2C_T_HIGH);
1730 /* Poll for ACK. Note that ACK in I2C spec is
1731 * transition from 1 to 0 */
1732 for (i = 0; i < timeout; i++) {
1733 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1734 ack = ixgbe_get_i2c_data(&i2cctl);
1742 hw_dbg(hw, "I2C ack was not received.\n");
1743 status = IXGBE_ERR_I2C;
1746 ixgbe_lower_i2c_clk(hw, &i2cctl);
1748 /* Minimum low period of clock is 4.7 us */
1749 udelay(IXGBE_I2C_T_LOW);
1755 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1756 * @hw: pointer to hardware structure
1757 * @data: read data value
1759 * Clocks in one bit via I2C data/clock
1761 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1763 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1765 ixgbe_raise_i2c_clk(hw, &i2cctl);
1767 /* Minimum high period of clock is 4us */
1768 udelay(IXGBE_I2C_T_HIGH);
1770 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1771 *data = ixgbe_get_i2c_data(&i2cctl);
1773 ixgbe_lower_i2c_clk(hw, &i2cctl);
1775 /* Minimum low period of clock is 4.7 us */
1776 udelay(IXGBE_I2C_T_LOW);
1782 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1783 * @hw: pointer to hardware structure
1784 * @data: data value to write
1786 * Clocks out one bit via I2C data/clock
1788 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1791 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1793 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1795 ixgbe_raise_i2c_clk(hw, &i2cctl);
1797 /* Minimum high period of clock is 4us */
1798 udelay(IXGBE_I2C_T_HIGH);
1800 ixgbe_lower_i2c_clk(hw, &i2cctl);
1802 /* Minimum low period of clock is 4.7 us.
1803 * This also takes care of the data hold time.
1805 udelay(IXGBE_I2C_T_LOW);
1807 hw_dbg(hw, "I2C data was not set to %X\n", data);
1808 return IXGBE_ERR_I2C;
1814 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1815 * @hw: pointer to hardware structure
1816 * @i2cctl: Current value of I2CCTL register
1818 * Raises the I2C clock line '0'->'1'
1820 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1823 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
1826 for (i = 0; i < timeout; i++) {
1827 *i2cctl |= IXGBE_I2C_CLK_OUT;
1828 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1829 IXGBE_WRITE_FLUSH(hw);
1830 /* SCL rise time (1000ns) */
1831 udelay(IXGBE_I2C_T_RISE);
1833 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1834 if (i2cctl_r & IXGBE_I2C_CLK_IN)
1840 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1841 * @hw: pointer to hardware structure
1842 * @i2cctl: Current value of I2CCTL register
1844 * Lowers the I2C clock line '1'->'0'
1846 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1849 *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1851 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1852 IXGBE_WRITE_FLUSH(hw);
1854 /* SCL fall time (300ns) */
1855 udelay(IXGBE_I2C_T_FALL);
1859 * ixgbe_set_i2c_data - Sets the I2C data bit
1860 * @hw: pointer to hardware structure
1861 * @i2cctl: Current value of I2CCTL register
1862 * @data: I2C data value (0 or 1) to set
1864 * Sets the I2C data bit
1866 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1869 *i2cctl |= IXGBE_I2C_DATA_OUT;
1871 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1873 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1874 IXGBE_WRITE_FLUSH(hw);
1876 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1877 udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1879 /* Verify data was set correctly */
1880 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1881 if (data != ixgbe_get_i2c_data(i2cctl)) {
1882 hw_dbg(hw, "Error - I2C data was not set to %X.\n", data);
1883 return IXGBE_ERR_I2C;
1890 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1891 * @hw: pointer to hardware structure
1892 * @i2cctl: Current value of I2CCTL register
1894 * Returns the I2C data bit value
1896 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1898 if (*i2cctl & IXGBE_I2C_DATA_IN)
1904 * ixgbe_i2c_bus_clear - Clears the I2C bus
1905 * @hw: pointer to hardware structure
1907 * Clears the I2C bus by sending nine clock pulses.
1908 * Used when data line is stuck low.
1910 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1912 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1915 ixgbe_i2c_start(hw);
1917 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1919 for (i = 0; i < 9; i++) {
1920 ixgbe_raise_i2c_clk(hw, &i2cctl);
1922 /* Min high period of clock is 4us */
1923 udelay(IXGBE_I2C_T_HIGH);
1925 ixgbe_lower_i2c_clk(hw, &i2cctl);
1927 /* Min low period of clock is 4.7us*/
1928 udelay(IXGBE_I2C_T_LOW);
1931 ixgbe_i2c_start(hw);
1933 /* Put the i2c bus back to default state */
1938 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
1939 * @hw: pointer to hardware structure
1941 * Checks if the LASI temp alarm status was triggered due to overtemp
1943 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1947 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1950 /* Check that the LASI temp alarm status was triggered */
1951 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1952 MDIO_MMD_PMAPMD, &phy_data);
1954 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1957 return IXGBE_ERR_OVERTEMP;