1 /******************************************************************************
3 Copyright (c) 2001-2012, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
32 ******************************************************************************/
35 #include "ixgbe_api.h"
36 #include "ixgbe_common.h"
37 #include "ixgbe_phy.h"
39 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
40 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
42 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
43 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
44 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
45 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
46 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
48 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
49 static bool ixgbe_get_i2c_data(u32 *i2cctl);
52 * ixgbe_init_phy_ops_generic - Inits PHY function ptrs
53 * @hw: pointer to the hardware structure
55 * Initialize the function pointers.
57 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
59 struct ixgbe_phy_info *phy = &hw->phy;
61 DEBUGFUNC("ixgbe_init_phy_ops_generic");
64 phy->ops.identify = &ixgbe_identify_phy_generic;
65 phy->ops.reset = &ixgbe_reset_phy_generic;
66 phy->ops.read_reg = &ixgbe_read_phy_reg_generic;
67 phy->ops.write_reg = &ixgbe_write_phy_reg_generic;
68 phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
69 phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
70 phy->ops.check_link = NULL;
71 phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
72 phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
73 phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
74 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
75 phy->ops.write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic;
76 phy->ops.i2c_bus_clear = &ixgbe_i2c_bus_clear;
77 phy->ops.identify_sfp = &ixgbe_identify_module_generic;
78 phy->sfp_type = ixgbe_sfp_type_unknown;
79 phy->ops.check_overtemp = &ixgbe_tn_check_overtemp;
84 * ixgbe_identify_phy_generic - Get physical layer module
85 * @hw: pointer to hardware structure
87 * Determines the physical layer module found on the current adapter.
89 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
91 s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
95 DEBUGFUNC("ixgbe_identify_phy_generic");
97 if (hw->phy.type == ixgbe_phy_unknown) {
98 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
99 if (ixgbe_validate_phy_addr(hw, phy_addr)) {
100 hw->phy.addr = phy_addr;
101 ixgbe_get_phy_id(hw);
103 ixgbe_get_phy_type_from_id(hw->phy.id);
105 if (hw->phy.type == ixgbe_phy_unknown) {
106 hw->phy.ops.read_reg(hw,
107 IXGBE_MDIO_PHY_EXT_ABILITY,
108 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
111 (IXGBE_MDIO_PHY_10GBASET_ABILITY |
112 IXGBE_MDIO_PHY_1000BASET_ABILITY))
114 ixgbe_phy_cu_unknown;
120 status = IXGBE_SUCCESS;
124 /* clear value if nothing found */
125 if (status != IXGBE_SUCCESS)
128 status = IXGBE_SUCCESS;
135 * ixgbe_validate_phy_addr - Determines phy address is valid
136 * @hw: pointer to hardware structure
139 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
144 DEBUGFUNC("ixgbe_validate_phy_addr");
146 hw->phy.addr = phy_addr;
147 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
148 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
150 if (phy_id != 0xFFFF && phy_id != 0x0)
157 * ixgbe_get_phy_id - Get the phy type
158 * @hw: pointer to hardware structure
161 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
167 DEBUGFUNC("ixgbe_get_phy_id");
169 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
170 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
173 if (status == IXGBE_SUCCESS) {
174 hw->phy.id = (u32)(phy_id_high << 16);
175 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW,
176 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
178 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
179 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
185 * ixgbe_get_phy_type_from_id - Get the phy type
186 * @hw: pointer to hardware structure
189 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
191 enum ixgbe_phy_type phy_type;
193 DEBUGFUNC("ixgbe_get_phy_type_from_id");
197 phy_type = ixgbe_phy_tn;
200 phy_type = ixgbe_phy_aq;
203 phy_type = ixgbe_phy_qt;
206 phy_type = ixgbe_phy_nl;
209 phy_type = ixgbe_phy_unknown;
213 DEBUGOUT1("phy type found is %d\n", phy_type);
218 * ixgbe_reset_phy_generic - Performs a PHY reset
219 * @hw: pointer to hardware structure
221 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
225 s32 status = IXGBE_SUCCESS;
227 DEBUGFUNC("ixgbe_reset_phy_generic");
229 if (hw->phy.type == ixgbe_phy_unknown)
230 status = ixgbe_identify_phy_generic(hw);
232 if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none)
235 /* Don't reset PHY if it's shut down due to overtemp. */
236 if (!hw->phy.reset_if_overtemp &&
237 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
241 * Perform soft PHY reset to the PHY_XS.
242 * This will cause a soft reset to the PHY
244 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
245 IXGBE_MDIO_PHY_XS_DEV_TYPE,
246 IXGBE_MDIO_PHY_XS_RESET);
249 * Poll for reset bit to self-clear indicating reset is complete.
250 * Some PHYs could take up to 3 seconds to complete and need about
251 * 1.7 usec delay after the reset is complete.
253 for (i = 0; i < 30; i++) {
255 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
256 IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl);
257 if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) {
263 if (ctrl & IXGBE_MDIO_PHY_XS_RESET) {
264 status = IXGBE_ERR_RESET_FAILED;
265 DEBUGOUT("PHY reset polling failed to complete.\n");
273 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
274 * @hw: pointer to hardware structure
275 * @reg_addr: 32 bit address of PHY register to read
276 * @phy_data: Pointer to read data from PHY register
278 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
279 u32 device_type, u16 *phy_data)
284 s32 status = IXGBE_SUCCESS;
287 DEBUGFUNC("ixgbe_read_phy_reg_generic");
289 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
290 gssr = IXGBE_GSSR_PHY1_SM;
292 gssr = IXGBE_GSSR_PHY0_SM;
294 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
295 status = IXGBE_ERR_SWFW_SYNC;
297 if (status == IXGBE_SUCCESS) {
298 /* Setup and write the address cycle command */
299 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
300 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
301 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
302 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
304 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
307 * Check every 10 usec to see if the address cycle completed.
308 * The MDI Command bit will clear when the operation is
311 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
314 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
316 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
320 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
321 DEBUGOUT("PHY address command did not complete.\n");
322 status = IXGBE_ERR_PHY;
325 if (status == IXGBE_SUCCESS) {
327 * Address cycle complete, setup and write the read
330 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
331 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
332 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
333 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
335 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
338 * Check every 10 usec to see if the address cycle
339 * completed. The MDI Command bit will clear when the
340 * operation is complete
342 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
345 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
347 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
351 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
352 DEBUGOUT("PHY read command didn't complete\n");
353 status = IXGBE_ERR_PHY;
356 * Read operation is complete. Get the data
359 data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
360 data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
361 *phy_data = (u16)(data);
365 hw->mac.ops.release_swfw_sync(hw, gssr);
372 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
373 * @hw: pointer to hardware structure
374 * @reg_addr: 32 bit PHY register to write
375 * @device_type: 5 bit device type
376 * @phy_data: Data to write to the PHY register
378 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
379 u32 device_type, u16 phy_data)
383 s32 status = IXGBE_SUCCESS;
386 DEBUGFUNC("ixgbe_write_phy_reg_generic");
388 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
389 gssr = IXGBE_GSSR_PHY1_SM;
391 gssr = IXGBE_GSSR_PHY0_SM;
393 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
394 status = IXGBE_ERR_SWFW_SYNC;
396 if (status == IXGBE_SUCCESS) {
397 /* Put the data in the MDI single read and write data register*/
398 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
400 /* Setup and write the address cycle command */
401 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
402 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
403 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
404 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
406 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
409 * Check every 10 usec to see if the address cycle completed.
410 * The MDI Command bit will clear when the operation is
413 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
416 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
418 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
422 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
423 DEBUGOUT("PHY address cmd didn't complete\n");
424 status = IXGBE_ERR_PHY;
427 if (status == IXGBE_SUCCESS) {
429 * Address cycle complete, setup and write the write
432 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
433 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
434 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
435 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
437 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
440 * Check every 10 usec to see if the address cycle
441 * completed. The MDI Command bit will clear when the
442 * operation is complete
444 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
447 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
449 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
453 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
454 DEBUGOUT("PHY address cmd didn't complete\n");
455 status = IXGBE_ERR_PHY;
459 hw->mac.ops.release_swfw_sync(hw, gssr);
466 * ixgbe_setup_phy_link_generic - Set and restart autoneg
467 * @hw: pointer to hardware structure
469 * Restart autonegotiation and PHY and waits for completion.
471 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
473 s32 status = IXGBE_SUCCESS;
475 u32 max_time_out = 10;
476 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
477 bool autoneg = FALSE;
478 ixgbe_link_speed speed;
480 DEBUGFUNC("ixgbe_setup_phy_link_generic");
482 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
484 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
485 /* Set or unset auto-negotiation 10G advertisement */
486 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
487 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
490 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
491 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
492 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
494 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
495 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
499 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
500 /* Set or unset auto-negotiation 1G advertisement */
501 hw->phy.ops.read_reg(hw,
502 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
503 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
506 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
507 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
508 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
510 hw->phy.ops.write_reg(hw,
511 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
512 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
516 if (speed & IXGBE_LINK_SPEED_100_FULL) {
517 /* Set or unset auto-negotiation 100M advertisement */
518 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
519 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
522 autoneg_reg &= ~(IXGBE_MII_100BASE_T_ADVERTISE |
523 IXGBE_MII_100BASE_T_ADVERTISE_HALF);
524 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
525 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
527 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
528 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
532 /* Restart PHY autonegotiation and wait for completion */
533 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
534 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
536 autoneg_reg |= IXGBE_MII_RESTART;
538 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
539 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
541 /* Wait for autonegotiation to finish */
542 for (time_out = 0; time_out < max_time_out; time_out++) {
544 /* Restart PHY autonegotiation and wait for completion */
545 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
546 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
549 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
550 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
554 if (time_out == max_time_out) {
555 status = IXGBE_ERR_LINK_SETUP;
556 DEBUGOUT("ixgbe_setup_phy_link_generic: time out");
563 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
564 * @hw: pointer to hardware structure
565 * @speed: new link speed
566 * @autoneg: TRUE if autonegotiation enabled
568 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
569 ixgbe_link_speed speed,
571 bool autoneg_wait_to_complete)
573 UNREFERENCED_2PARAMETER(autoneg, autoneg_wait_to_complete);
575 DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
578 * Clear autoneg_advertised and set new values based on input link
581 hw->phy.autoneg_advertised = 0;
583 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
584 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
586 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
587 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
589 if (speed & IXGBE_LINK_SPEED_100_FULL)
590 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
592 /* Setup link based on the new speed settings */
593 hw->phy.ops.setup_link(hw);
595 return IXGBE_SUCCESS;
599 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
600 * @hw: pointer to hardware structure
601 * @speed: pointer to link speed
602 * @autoneg: boolean auto-negotiation value
604 * Determines the link capabilities by reading the AUTOC register.
606 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
607 ixgbe_link_speed *speed,
610 s32 status = IXGBE_ERR_LINK_SETUP;
613 DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
618 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY,
619 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
622 if (status == IXGBE_SUCCESS) {
623 if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G)
624 *speed |= IXGBE_LINK_SPEED_10GB_FULL;
625 if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G)
626 *speed |= IXGBE_LINK_SPEED_1GB_FULL;
627 if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M)
628 *speed |= IXGBE_LINK_SPEED_100_FULL;
635 * ixgbe_check_phy_link_tnx - Determine link and speed status
636 * @hw: pointer to hardware structure
638 * Reads the VS1 register to determine if link is up and the current speed for
641 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
644 s32 status = IXGBE_SUCCESS;
646 u32 max_time_out = 10;
651 DEBUGFUNC("ixgbe_check_phy_link_tnx");
653 /* Initialize speed and link to default case */
655 *speed = IXGBE_LINK_SPEED_10GB_FULL;
658 * Check current speed and link status of the PHY register.
659 * This is a vendor specific register and may have to
660 * be changed for other copper PHYs.
662 for (time_out = 0; time_out < max_time_out; time_out++) {
664 status = hw->phy.ops.read_reg(hw,
665 IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS,
666 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
668 phy_link = phy_data & IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
669 phy_speed = phy_data &
670 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
671 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
674 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
675 *speed = IXGBE_LINK_SPEED_1GB_FULL;
684 * ixgbe_setup_phy_link_tnx - Set and restart autoneg
685 * @hw: pointer to hardware structure
687 * Restart autonegotiation and PHY and waits for completion.
689 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
691 s32 status = IXGBE_SUCCESS;
693 u32 max_time_out = 10;
694 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
695 bool autoneg = FALSE;
696 ixgbe_link_speed speed;
698 DEBUGFUNC("ixgbe_setup_phy_link_tnx");
700 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
702 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
703 /* Set or unset auto-negotiation 10G advertisement */
704 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
705 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
708 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
709 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
710 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
712 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
713 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
717 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
718 /* Set or unset auto-negotiation 1G advertisement */
719 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
720 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
723 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
724 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
725 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
727 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
728 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
732 if (speed & IXGBE_LINK_SPEED_100_FULL) {
733 /* Set or unset auto-negotiation 100M advertisement */
734 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
735 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
738 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
739 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
740 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
742 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
743 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
747 /* Restart PHY autonegotiation and wait for completion */
748 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
749 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
751 autoneg_reg |= IXGBE_MII_RESTART;
753 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
754 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
756 /* Wait for autonegotiation to finish */
757 for (time_out = 0; time_out < max_time_out; time_out++) {
759 /* Restart PHY autonegotiation and wait for completion */
760 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
761 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
764 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
765 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
769 if (time_out == max_time_out) {
770 status = IXGBE_ERR_LINK_SETUP;
771 DEBUGOUT("ixgbe_setup_phy_link_tnx: time out");
778 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
779 * @hw: pointer to hardware structure
780 * @firmware_version: pointer to the PHY Firmware Version
782 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
783 u16 *firmware_version)
785 s32 status = IXGBE_SUCCESS;
787 DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
789 status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
790 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
797 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
798 * @hw: pointer to hardware structure
799 * @firmware_version: pointer to the PHY Firmware Version
801 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
802 u16 *firmware_version)
804 s32 status = IXGBE_SUCCESS;
806 DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
808 status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
809 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
816 * ixgbe_reset_phy_nl - Performs a PHY reset
817 * @hw: pointer to hardware structure
819 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
821 u16 phy_offset, control, eword, edata, block_crc;
822 bool end_data = FALSE;
823 u16 list_offset, data_offset;
825 s32 ret_val = IXGBE_SUCCESS;
828 DEBUGFUNC("ixgbe_reset_phy_nl");
830 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
831 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
833 /* reset the PHY and poll for completion */
834 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
835 IXGBE_MDIO_PHY_XS_DEV_TYPE,
836 (phy_data | IXGBE_MDIO_PHY_XS_RESET));
838 for (i = 0; i < 100; i++) {
839 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
840 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
841 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0)
846 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) {
847 DEBUGOUT("PHY reset did not complete.\n");
848 ret_val = IXGBE_ERR_PHY;
852 /* Get init offsets */
853 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
855 if (ret_val != IXGBE_SUCCESS)
858 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
862 * Read control word from PHY init contents offset
864 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
865 control = (eword & IXGBE_CONTROL_MASK_NL) >>
866 IXGBE_CONTROL_SHIFT_NL;
867 edata = eword & IXGBE_DATA_MASK_NL;
871 DEBUGOUT1("DELAY: %d MS\n", edata);
877 hw->eeprom.ops.read(hw, data_offset++,
879 for (i = 0; i < edata; i++) {
880 hw->eeprom.ops.read(hw, data_offset, &eword);
881 hw->phy.ops.write_reg(hw, phy_offset,
882 IXGBE_TWINAX_DEV, eword);
883 DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword,
889 case IXGBE_CONTROL_NL:
891 DEBUGOUT("CONTROL:\n");
892 if (edata == IXGBE_CONTROL_EOL_NL) {
895 } else if (edata == IXGBE_CONTROL_SOL_NL) {
898 DEBUGOUT("Bad control value\n");
899 ret_val = IXGBE_ERR_PHY;
904 DEBUGOUT("Bad control type\n");
905 ret_val = IXGBE_ERR_PHY;
915 * ixgbe_identify_module_generic - Identifies module type
916 * @hw: pointer to hardware structure
918 * Determines HW type and calls appropriate function.
920 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
922 s32 status = IXGBE_ERR_SFP_NOT_PRESENT;
924 DEBUGFUNC("ixgbe_identify_module_generic");
926 switch (hw->mac.ops.get_media_type(hw)) {
927 case ixgbe_media_type_fiber:
928 status = ixgbe_identify_sfp_module_generic(hw);
933 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
934 status = IXGBE_ERR_SFP_NOT_PRESENT;
942 * ixgbe_identify_sfp_module_generic - Identifies SFP modules
943 * @hw: pointer to hardware structure
945 * Searches for and identifies the SFP module and assigns appropriate PHY type.
947 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
949 s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
951 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
953 u8 comp_codes_1g = 0;
954 u8 comp_codes_10g = 0;
955 u8 oui_bytes[3] = {0, 0, 0};
960 DEBUGFUNC("ixgbe_identify_sfp_module_generic");
962 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
963 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
964 status = IXGBE_ERR_SFP_NOT_PRESENT;
968 status = hw->phy.ops.read_i2c_eeprom(hw,
969 IXGBE_SFF_IDENTIFIER,
972 if (status == IXGBE_ERR_SWFW_SYNC ||
973 status == IXGBE_ERR_I2C ||
974 status == IXGBE_ERR_SFP_NOT_PRESENT)
975 goto err_read_i2c_eeprom;
977 /* LAN ID is needed for sfp_type determination */
978 hw->mac.ops.set_lan_id(hw);
980 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
981 hw->phy.type = ixgbe_phy_sfp_unsupported;
982 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
984 status = hw->phy.ops.read_i2c_eeprom(hw,
985 IXGBE_SFF_1GBE_COMP_CODES,
988 if (status == IXGBE_ERR_SWFW_SYNC ||
989 status == IXGBE_ERR_I2C ||
990 status == IXGBE_ERR_SFP_NOT_PRESENT)
991 goto err_read_i2c_eeprom;
993 status = hw->phy.ops.read_i2c_eeprom(hw,
994 IXGBE_SFF_10GBE_COMP_CODES,
997 if (status == IXGBE_ERR_SWFW_SYNC ||
998 status == IXGBE_ERR_I2C ||
999 status == IXGBE_ERR_SFP_NOT_PRESENT)
1000 goto err_read_i2c_eeprom;
1001 status = hw->phy.ops.read_i2c_eeprom(hw,
1002 IXGBE_SFF_CABLE_TECHNOLOGY,
1005 if (status == IXGBE_ERR_SWFW_SYNC ||
1006 status == IXGBE_ERR_I2C ||
1007 status == IXGBE_ERR_SFP_NOT_PRESENT)
1008 goto err_read_i2c_eeprom;
1015 * 3 SFP_DA_CORE0 - 82599-specific
1016 * 4 SFP_DA_CORE1 - 82599-specific
1017 * 5 SFP_SR/LR_CORE0 - 82599-specific
1018 * 6 SFP_SR/LR_CORE1 - 82599-specific
1019 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific
1020 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific
1021 * 9 SFP_1g_cu_CORE0 - 82599-specific
1022 * 10 SFP_1g_cu_CORE1 - 82599-specific
1023 * 11 SFP_1g_sx_CORE0 - 82599-specific
1024 * 12 SFP_1g_sx_CORE1 - 82599-specific
1026 if (hw->mac.type == ixgbe_mac_82598EB) {
1027 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1028 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1029 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1030 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1031 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1032 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1034 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1035 } else if (hw->mac.type == ixgbe_mac_82599EB) {
1036 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1037 if (hw->bus.lan_id == 0)
1039 ixgbe_sfp_type_da_cu_core0;
1042 ixgbe_sfp_type_da_cu_core1;
1043 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1044 hw->phy.ops.read_i2c_eeprom(
1045 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1048 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1049 if (hw->bus.lan_id == 0)
1051 ixgbe_sfp_type_da_act_lmt_core0;
1054 ixgbe_sfp_type_da_act_lmt_core1;
1057 ixgbe_sfp_type_unknown;
1059 } else if (comp_codes_10g &
1060 (IXGBE_SFF_10GBASESR_CAPABLE |
1061 IXGBE_SFF_10GBASELR_CAPABLE)) {
1062 if (hw->bus.lan_id == 0)
1064 ixgbe_sfp_type_srlr_core0;
1067 ixgbe_sfp_type_srlr_core1;
1068 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1069 if (hw->bus.lan_id == 0)
1071 ixgbe_sfp_type_1g_cu_core0;
1074 ixgbe_sfp_type_1g_cu_core1;
1075 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1076 if (hw->bus.lan_id == 0)
1078 ixgbe_sfp_type_1g_sx_core0;
1081 ixgbe_sfp_type_1g_sx_core1;
1083 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1087 if (hw->phy.sfp_type != stored_sfp_type)
1088 hw->phy.sfp_setup_needed = TRUE;
1090 /* Determine if the SFP+ PHY is dual speed or not. */
1091 hw->phy.multispeed_fiber = FALSE;
1092 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1093 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1094 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1095 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1096 hw->phy.multispeed_fiber = TRUE;
1098 /* Determine PHY vendor */
1099 if (hw->phy.type != ixgbe_phy_nl) {
1100 hw->phy.id = identifier;
1101 status = hw->phy.ops.read_i2c_eeprom(hw,
1102 IXGBE_SFF_VENDOR_OUI_BYTE0,
1105 if (status == IXGBE_ERR_SWFW_SYNC ||
1106 status == IXGBE_ERR_I2C ||
1107 status == IXGBE_ERR_SFP_NOT_PRESENT)
1108 goto err_read_i2c_eeprom;
1110 status = hw->phy.ops.read_i2c_eeprom(hw,
1111 IXGBE_SFF_VENDOR_OUI_BYTE1,
1114 if (status == IXGBE_ERR_SWFW_SYNC ||
1115 status == IXGBE_ERR_I2C ||
1116 status == IXGBE_ERR_SFP_NOT_PRESENT)
1117 goto err_read_i2c_eeprom;
1119 status = hw->phy.ops.read_i2c_eeprom(hw,
1120 IXGBE_SFF_VENDOR_OUI_BYTE2,
1123 if (status == IXGBE_ERR_SWFW_SYNC ||
1124 status == IXGBE_ERR_I2C ||
1125 status == IXGBE_ERR_SFP_NOT_PRESENT)
1126 goto err_read_i2c_eeprom;
1129 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1130 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1131 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1133 switch (vendor_oui) {
1134 case IXGBE_SFF_VENDOR_OUI_TYCO:
1135 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1137 ixgbe_phy_sfp_passive_tyco;
1139 case IXGBE_SFF_VENDOR_OUI_FTL:
1140 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1141 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1143 hw->phy.type = ixgbe_phy_sfp_ftl;
1145 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1146 hw->phy.type = ixgbe_phy_sfp_avago;
1148 case IXGBE_SFF_VENDOR_OUI_INTEL:
1149 hw->phy.type = ixgbe_phy_sfp_intel;
1152 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1154 ixgbe_phy_sfp_passive_unknown;
1155 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1157 ixgbe_phy_sfp_active_unknown;
1159 hw->phy.type = ixgbe_phy_sfp_unknown;
1164 /* Allow any DA cable vendor */
1165 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1166 IXGBE_SFF_DA_ACTIVE_CABLE)) {
1167 status = IXGBE_SUCCESS;
1171 /* Verify supported 1G SFP modules */
1172 if (comp_codes_10g == 0 &&
1173 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1174 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1175 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1176 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1177 hw->phy.type = ixgbe_phy_sfp_unsupported;
1178 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1182 /* Anything else 82598-based is supported */
1183 if (hw->mac.type == ixgbe_mac_82598EB) {
1184 status = IXGBE_SUCCESS;
1188 ixgbe_get_device_caps(hw, &enforce_sfp);
1189 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1190 !((hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0) ||
1191 (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1) ||
1192 (hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0) ||
1193 (hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1))) {
1194 /* Make sure we're a supported PHY type */
1195 if (hw->phy.type == ixgbe_phy_sfp_intel) {
1196 status = IXGBE_SUCCESS;
1198 if (hw->allow_unsupported_sfp == TRUE) {
1199 EWARN(hw, "WARNING: Intel (R) Network "
1200 "Connections are quality tested "
1201 "using Intel (R) Ethernet Optics."
1202 " Using untested modules is not "
1203 "supported and may cause unstable"
1204 " operation or damage to the "
1205 "module or the adapter. Intel "
1206 "Corporation is not responsible "
1207 "for any harm caused by using "
1208 "untested modules.\n", status);
1209 status = IXGBE_SUCCESS;
1211 DEBUGOUT("SFP+ module not supported\n");
1213 ixgbe_phy_sfp_unsupported;
1214 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1218 status = IXGBE_SUCCESS;
1225 err_read_i2c_eeprom:
1226 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1227 if (hw->phy.type != ixgbe_phy_nl) {
1229 hw->phy.type = ixgbe_phy_unknown;
1231 return IXGBE_ERR_SFP_NOT_PRESENT;
1237 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1238 * @hw: pointer to hardware structure
1239 * @list_offset: offset to the SFP ID list
1240 * @data_offset: offset to the SFP data block
1242 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1243 * so it returns the offsets to the phy init sequence block.
1245 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1250 u16 sfp_type = hw->phy.sfp_type;
1252 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1254 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1255 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1257 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1258 return IXGBE_ERR_SFP_NOT_PRESENT;
1260 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1261 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1262 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1265 * Limiting active cables and 1G Phys must be initialized as
1268 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1269 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1270 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1271 sfp_type = ixgbe_sfp_type_srlr_core0;
1272 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1273 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1274 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1275 sfp_type = ixgbe_sfp_type_srlr_core1;
1277 /* Read offset to PHY init contents */
1278 hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
1280 if ((!*list_offset) || (*list_offset == 0xFFFF))
1281 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1283 /* Shift offset to first ID word */
1287 * Find the matching SFP ID in the EEPROM
1288 * and program the init sequence
1290 hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
1292 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1293 if (sfp_id == sfp_type) {
1295 hw->eeprom.ops.read(hw, *list_offset, data_offset);
1296 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1297 DEBUGOUT("SFP+ module not supported\n");
1298 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1303 (*list_offset) += 2;
1304 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1305 return IXGBE_ERR_PHY;
1309 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1310 DEBUGOUT("No matching SFP+ module found\n");
1311 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1314 return IXGBE_SUCCESS;
1318 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1319 * @hw: pointer to hardware structure
1320 * @byte_offset: EEPROM byte offset to read
1321 * @eeprom_data: value read
1323 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1325 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1328 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1330 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1331 IXGBE_I2C_EEPROM_DEV_ADDR,
1336 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1337 * @hw: pointer to hardware structure
1338 * @byte_offset: EEPROM byte offset to write
1339 * @eeprom_data: value to write
1341 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1343 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1346 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1348 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1349 IXGBE_I2C_EEPROM_DEV_ADDR,
1354 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1355 * @hw: pointer to hardware structure
1356 * @byte_offset: byte offset to read
1359 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1360 * a specified device address.
1362 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1363 u8 dev_addr, u8 *data)
1365 s32 status = IXGBE_SUCCESS;
1372 DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1374 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1375 swfw_mask = IXGBE_GSSR_PHY1_SM;
1377 swfw_mask = IXGBE_GSSR_PHY0_SM;
1380 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
1382 status = IXGBE_ERR_SWFW_SYNC;
1386 ixgbe_i2c_start(hw);
1388 /* Device Address and write indication */
1389 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1390 if (status != IXGBE_SUCCESS)
1393 status = ixgbe_get_i2c_ack(hw);
1394 if (status != IXGBE_SUCCESS)
1397 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1398 if (status != IXGBE_SUCCESS)
1401 status = ixgbe_get_i2c_ack(hw);
1402 if (status != IXGBE_SUCCESS)
1405 ixgbe_i2c_start(hw);
1407 /* Device Address and read indication */
1408 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1409 if (status != IXGBE_SUCCESS)
1412 status = ixgbe_get_i2c_ack(hw);
1413 if (status != IXGBE_SUCCESS)
1416 status = ixgbe_clock_in_i2c_byte(hw, data);
1417 if (status != IXGBE_SUCCESS)
1420 status = ixgbe_clock_out_i2c_bit(hw, nack);
1421 if (status != IXGBE_SUCCESS)
1428 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1430 ixgbe_i2c_bus_clear(hw);
1432 if (retry < max_retry)
1433 DEBUGOUT("I2C byte read error - Retrying.\n");
1435 DEBUGOUT("I2C byte read error.\n");
1437 } while (retry < max_retry);
1439 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1446 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1447 * @hw: pointer to hardware structure
1448 * @byte_offset: byte offset to write
1449 * @data: value to write
1451 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1452 * a specified device address.
1454 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1455 u8 dev_addr, u8 data)
1457 s32 status = IXGBE_SUCCESS;
1462 DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1464 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1465 swfw_mask = IXGBE_GSSR_PHY1_SM;
1467 swfw_mask = IXGBE_GSSR_PHY0_SM;
1469 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1470 status = IXGBE_ERR_SWFW_SYNC;
1471 goto write_byte_out;
1475 ixgbe_i2c_start(hw);
1477 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1478 if (status != IXGBE_SUCCESS)
1481 status = ixgbe_get_i2c_ack(hw);
1482 if (status != IXGBE_SUCCESS)
1485 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1486 if (status != IXGBE_SUCCESS)
1489 status = ixgbe_get_i2c_ack(hw);
1490 if (status != IXGBE_SUCCESS)
1493 status = ixgbe_clock_out_i2c_byte(hw, data);
1494 if (status != IXGBE_SUCCESS)
1497 status = ixgbe_get_i2c_ack(hw);
1498 if (status != IXGBE_SUCCESS)
1505 ixgbe_i2c_bus_clear(hw);
1507 if (retry < max_retry)
1508 DEBUGOUT("I2C byte write error - Retrying.\n");
1510 DEBUGOUT("I2C byte write error.\n");
1511 } while (retry < max_retry);
1513 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1520 * ixgbe_i2c_start - Sets I2C start condition
1521 * @hw: pointer to hardware structure
1523 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1525 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1527 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1529 DEBUGFUNC("ixgbe_i2c_start");
1531 /* Start condition must begin with data and clock high */
1532 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1533 ixgbe_raise_i2c_clk(hw, &i2cctl);
1535 /* Setup time for start condition (4.7us) */
1536 usec_delay(IXGBE_I2C_T_SU_STA);
1538 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1540 /* Hold time for start condition (4us) */
1541 usec_delay(IXGBE_I2C_T_HD_STA);
1543 ixgbe_lower_i2c_clk(hw, &i2cctl);
1545 /* Minimum low period of clock is 4.7 us */
1546 usec_delay(IXGBE_I2C_T_LOW);
1551 * ixgbe_i2c_stop - Sets I2C stop condition
1552 * @hw: pointer to hardware structure
1554 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1556 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1558 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1560 DEBUGFUNC("ixgbe_i2c_stop");
1562 /* Stop condition must begin with data low and clock high */
1563 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1564 ixgbe_raise_i2c_clk(hw, &i2cctl);
1566 /* Setup time for stop condition (4us) */
1567 usec_delay(IXGBE_I2C_T_SU_STO);
1569 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1571 /* bus free time between stop and start (4.7us)*/
1572 usec_delay(IXGBE_I2C_T_BUF);
1576 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1577 * @hw: pointer to hardware structure
1578 * @data: data byte to clock in
1580 * Clocks in one byte data via I2C data/clock
1582 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1587 DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1589 for (i = 7; i >= 0; i--) {
1590 ixgbe_clock_in_i2c_bit(hw, &bit);
1594 return IXGBE_SUCCESS;
1598 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1599 * @hw: pointer to hardware structure
1600 * @data: data byte clocked out
1602 * Clocks out one byte data via I2C data/clock
1604 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1606 s32 status = IXGBE_SUCCESS;
1611 DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1613 for (i = 7; i >= 0; i--) {
1614 bit = (data >> i) & 0x1;
1615 status = ixgbe_clock_out_i2c_bit(hw, bit);
1617 if (status != IXGBE_SUCCESS)
1621 /* Release SDA line (set high) */
1622 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1623 i2cctl |= IXGBE_I2C_DATA_OUT;
1624 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1625 IXGBE_WRITE_FLUSH(hw);
1631 * ixgbe_get_i2c_ack - Polls for I2C ACK
1632 * @hw: pointer to hardware structure
1634 * Clocks in/out one bit via I2C data/clock
1636 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1638 s32 status = IXGBE_SUCCESS;
1640 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1644 DEBUGFUNC("ixgbe_get_i2c_ack");
1646 ixgbe_raise_i2c_clk(hw, &i2cctl);
1649 /* Minimum high period of clock is 4us */
1650 usec_delay(IXGBE_I2C_T_HIGH);
1652 /* Poll for ACK. Note that ACK in I2C spec is
1653 * transition from 1 to 0 */
1654 for (i = 0; i < timeout; i++) {
1655 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1656 ack = ixgbe_get_i2c_data(&i2cctl);
1664 DEBUGOUT("I2C ack was not received.\n");
1665 status = IXGBE_ERR_I2C;
1668 ixgbe_lower_i2c_clk(hw, &i2cctl);
1670 /* Minimum low period of clock is 4.7 us */
1671 usec_delay(IXGBE_I2C_T_LOW);
1677 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1678 * @hw: pointer to hardware structure
1679 * @data: read data value
1681 * Clocks in one bit via I2C data/clock
1683 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1685 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1687 DEBUGFUNC("ixgbe_clock_in_i2c_bit");
1689 ixgbe_raise_i2c_clk(hw, &i2cctl);
1691 /* Minimum high period of clock is 4us */
1692 usec_delay(IXGBE_I2C_T_HIGH);
1694 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1695 *data = ixgbe_get_i2c_data(&i2cctl);
1697 ixgbe_lower_i2c_clk(hw, &i2cctl);
1699 /* Minimum low period of clock is 4.7 us */
1700 usec_delay(IXGBE_I2C_T_LOW);
1702 return IXGBE_SUCCESS;
1706 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1707 * @hw: pointer to hardware structure
1708 * @data: data value to write
1710 * Clocks out one bit via I2C data/clock
1712 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1715 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1717 DEBUGFUNC("ixgbe_clock_out_i2c_bit");
1719 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1720 if (status == IXGBE_SUCCESS) {
1721 ixgbe_raise_i2c_clk(hw, &i2cctl);
1723 /* Minimum high period of clock is 4us */
1724 usec_delay(IXGBE_I2C_T_HIGH);
1726 ixgbe_lower_i2c_clk(hw, &i2cctl);
1728 /* Minimum low period of clock is 4.7 us.
1729 * This also takes care of the data hold time.
1731 usec_delay(IXGBE_I2C_T_LOW);
1733 status = IXGBE_ERR_I2C;
1734 DEBUGOUT1("I2C data was not set to %X\n", data);
1740 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1741 * @hw: pointer to hardware structure
1742 * @i2cctl: Current value of I2CCTL register
1744 * Raises the I2C clock line '0'->'1'
1746 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1749 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
1752 DEBUGFUNC("ixgbe_raise_i2c_clk");
1754 for (i = 0; i < timeout; i++) {
1755 *i2cctl |= IXGBE_I2C_CLK_OUT;
1757 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1758 IXGBE_WRITE_FLUSH(hw);
1759 /* SCL rise time (1000ns) */
1760 usec_delay(IXGBE_I2C_T_RISE);
1762 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1763 if (i2cctl_r & IXGBE_I2C_CLK_IN)
1769 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1770 * @hw: pointer to hardware structure
1771 * @i2cctl: Current value of I2CCTL register
1773 * Lowers the I2C clock line '1'->'0'
1775 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1778 DEBUGFUNC("ixgbe_lower_i2c_clk");
1780 *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1782 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1783 IXGBE_WRITE_FLUSH(hw);
1785 /* SCL fall time (300ns) */
1786 usec_delay(IXGBE_I2C_T_FALL);
1790 * ixgbe_set_i2c_data - Sets the I2C data bit
1791 * @hw: pointer to hardware structure
1792 * @i2cctl: Current value of I2CCTL register
1793 * @data: I2C data value (0 or 1) to set
1795 * Sets the I2C data bit
1797 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1799 s32 status = IXGBE_SUCCESS;
1801 DEBUGFUNC("ixgbe_set_i2c_data");
1804 *i2cctl |= IXGBE_I2C_DATA_OUT;
1806 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1808 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1809 IXGBE_WRITE_FLUSH(hw);
1811 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1812 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1814 /* Verify data was set correctly */
1815 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1816 if (data != ixgbe_get_i2c_data(i2cctl)) {
1817 status = IXGBE_ERR_I2C;
1818 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1825 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1826 * @hw: pointer to hardware structure
1827 * @i2cctl: Current value of I2CCTL register
1829 * Returns the I2C data bit value
1831 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1835 DEBUGFUNC("ixgbe_get_i2c_data");
1837 if (*i2cctl & IXGBE_I2C_DATA_IN)
1846 * ixgbe_i2c_bus_clear - Clears the I2C bus
1847 * @hw: pointer to hardware structure
1849 * Clears the I2C bus by sending nine clock pulses.
1850 * Used when data line is stuck low.
1852 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1854 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1857 DEBUGFUNC("ixgbe_i2c_bus_clear");
1859 ixgbe_i2c_start(hw);
1861 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1863 for (i = 0; i < 9; i++) {
1864 ixgbe_raise_i2c_clk(hw, &i2cctl);
1866 /* Min high period of clock is 4us */
1867 usec_delay(IXGBE_I2C_T_HIGH);
1869 ixgbe_lower_i2c_clk(hw, &i2cctl);
1871 /* Min low period of clock is 4.7us*/
1872 usec_delay(IXGBE_I2C_T_LOW);
1875 ixgbe_i2c_start(hw);
1877 /* Put the i2c bus back to default state */
1882 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
1883 * @hw: pointer to hardware structure
1885 * Checks if the LASI temp alarm status was triggered due to overtemp
1887 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1889 s32 status = IXGBE_SUCCESS;
1892 DEBUGFUNC("ixgbe_tn_check_overtemp");
1894 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1897 /* Check that the LASI temp alarm status was triggered */
1898 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1899 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
1901 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1904 status = IXGBE_ERR_OVERTEMP;