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
1024 if (hw->mac.type == ixgbe_mac_82598EB) {
1025 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1026 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1027 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1028 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1029 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1030 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1032 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1033 } else if (hw->mac.type == ixgbe_mac_82599EB) {
1034 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1035 if (hw->bus.lan_id == 0)
1037 ixgbe_sfp_type_da_cu_core0;
1040 ixgbe_sfp_type_da_cu_core1;
1041 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1042 hw->phy.ops.read_i2c_eeprom(
1043 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1046 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1047 if (hw->bus.lan_id == 0)
1049 ixgbe_sfp_type_da_act_lmt_core0;
1052 ixgbe_sfp_type_da_act_lmt_core1;
1055 ixgbe_sfp_type_unknown;
1057 } else if (comp_codes_10g &
1058 (IXGBE_SFF_10GBASESR_CAPABLE |
1059 IXGBE_SFF_10GBASELR_CAPABLE)) {
1060 if (hw->bus.lan_id == 0)
1062 ixgbe_sfp_type_srlr_core0;
1065 ixgbe_sfp_type_srlr_core1;
1066 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1067 if (hw->bus.lan_id == 0)
1069 ixgbe_sfp_type_1g_cu_core0;
1072 ixgbe_sfp_type_1g_cu_core1;
1074 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1078 if (hw->phy.sfp_type != stored_sfp_type)
1079 hw->phy.sfp_setup_needed = TRUE;
1081 /* Determine if the SFP+ PHY is dual speed or not. */
1082 hw->phy.multispeed_fiber = FALSE;
1083 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1084 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1085 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1086 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1087 hw->phy.multispeed_fiber = TRUE;
1089 /* Determine PHY vendor */
1090 if (hw->phy.type != ixgbe_phy_nl) {
1091 hw->phy.id = identifier;
1092 status = hw->phy.ops.read_i2c_eeprom(hw,
1093 IXGBE_SFF_VENDOR_OUI_BYTE0,
1096 if (status == IXGBE_ERR_SWFW_SYNC ||
1097 status == IXGBE_ERR_I2C ||
1098 status == IXGBE_ERR_SFP_NOT_PRESENT)
1099 goto err_read_i2c_eeprom;
1101 status = hw->phy.ops.read_i2c_eeprom(hw,
1102 IXGBE_SFF_VENDOR_OUI_BYTE1,
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_BYTE2,
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;
1120 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1121 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1122 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1124 switch (vendor_oui) {
1125 case IXGBE_SFF_VENDOR_OUI_TYCO:
1126 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1128 ixgbe_phy_sfp_passive_tyco;
1130 case IXGBE_SFF_VENDOR_OUI_FTL:
1131 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1132 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1134 hw->phy.type = ixgbe_phy_sfp_ftl;
1136 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1137 hw->phy.type = ixgbe_phy_sfp_avago;
1139 case IXGBE_SFF_VENDOR_OUI_INTEL:
1140 hw->phy.type = ixgbe_phy_sfp_intel;
1143 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1145 ixgbe_phy_sfp_passive_unknown;
1146 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1148 ixgbe_phy_sfp_active_unknown;
1150 hw->phy.type = ixgbe_phy_sfp_unknown;
1155 /* Allow any DA cable vendor */
1156 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1157 IXGBE_SFF_DA_ACTIVE_CABLE)) {
1158 status = IXGBE_SUCCESS;
1162 /* Verify supported 1G SFP modules */
1163 if (comp_codes_10g == 0 &&
1164 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1165 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0)) {
1166 hw->phy.type = ixgbe_phy_sfp_unsupported;
1167 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1171 /* Anything else 82598-based is supported */
1172 if (hw->mac.type == ixgbe_mac_82598EB) {
1173 status = IXGBE_SUCCESS;
1177 ixgbe_get_device_caps(hw, &enforce_sfp);
1178 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1179 !((hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0) ||
1180 (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1))) {
1181 /* Make sure we're a supported PHY type */
1182 if (hw->phy.type == ixgbe_phy_sfp_intel) {
1183 status = IXGBE_SUCCESS;
1185 DEBUGOUT("SFP+ module not supported\n");
1186 hw->phy.type = ixgbe_phy_sfp_unsupported;
1187 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1190 status = IXGBE_SUCCESS;
1197 err_read_i2c_eeprom:
1198 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1199 if (hw->phy.type != ixgbe_phy_nl) {
1201 hw->phy.type = ixgbe_phy_unknown;
1203 return IXGBE_ERR_SFP_NOT_PRESENT;
1209 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1210 * @hw: pointer to hardware structure
1211 * @list_offset: offset to the SFP ID list
1212 * @data_offset: offset to the SFP data block
1214 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1215 * so it returns the offsets to the phy init sequence block.
1217 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1222 u16 sfp_type = hw->phy.sfp_type;
1224 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1226 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1227 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1229 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1230 return IXGBE_ERR_SFP_NOT_PRESENT;
1232 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1233 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1234 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1237 * Limiting active cables and 1G Phys must be initialized as
1240 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1241 sfp_type == ixgbe_sfp_type_1g_cu_core0)
1242 sfp_type = ixgbe_sfp_type_srlr_core0;
1243 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1244 sfp_type == ixgbe_sfp_type_1g_cu_core1)
1245 sfp_type = ixgbe_sfp_type_srlr_core1;
1247 /* Read offset to PHY init contents */
1248 hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
1250 if ((!*list_offset) || (*list_offset == 0xFFFF))
1251 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1253 /* Shift offset to first ID word */
1257 * Find the matching SFP ID in the EEPROM
1258 * and program the init sequence
1260 hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
1262 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1263 if (sfp_id == sfp_type) {
1265 hw->eeprom.ops.read(hw, *list_offset, data_offset);
1266 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1267 DEBUGOUT("SFP+ module not supported\n");
1268 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1273 (*list_offset) += 2;
1274 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1275 return IXGBE_ERR_PHY;
1279 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1280 DEBUGOUT("No matching SFP+ module found\n");
1281 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1284 return IXGBE_SUCCESS;
1288 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1289 * @hw: pointer to hardware structure
1290 * @byte_offset: EEPROM byte offset to read
1291 * @eeprom_data: value read
1293 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1295 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1298 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1300 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1301 IXGBE_I2C_EEPROM_DEV_ADDR,
1306 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1307 * @hw: pointer to hardware structure
1308 * @byte_offset: EEPROM byte offset to write
1309 * @eeprom_data: value to write
1311 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1313 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1316 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1318 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1319 IXGBE_I2C_EEPROM_DEV_ADDR,
1324 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1325 * @hw: pointer to hardware structure
1326 * @byte_offset: byte offset to read
1329 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1330 * a specified device address.
1332 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1333 u8 dev_addr, u8 *data)
1335 s32 status = IXGBE_SUCCESS;
1342 DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1344 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1345 swfw_mask = IXGBE_GSSR_PHY1_SM;
1347 swfw_mask = IXGBE_GSSR_PHY0_SM;
1350 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
1352 status = IXGBE_ERR_SWFW_SYNC;
1356 ixgbe_i2c_start(hw);
1358 /* Device Address and write indication */
1359 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1360 if (status != IXGBE_SUCCESS)
1363 status = ixgbe_get_i2c_ack(hw);
1364 if (status != IXGBE_SUCCESS)
1367 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1368 if (status != IXGBE_SUCCESS)
1371 status = ixgbe_get_i2c_ack(hw);
1372 if (status != IXGBE_SUCCESS)
1375 ixgbe_i2c_start(hw);
1377 /* Device Address and read indication */
1378 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1379 if (status != IXGBE_SUCCESS)
1382 status = ixgbe_get_i2c_ack(hw);
1383 if (status != IXGBE_SUCCESS)
1386 status = ixgbe_clock_in_i2c_byte(hw, data);
1387 if (status != IXGBE_SUCCESS)
1390 status = ixgbe_clock_out_i2c_bit(hw, nack);
1391 if (status != IXGBE_SUCCESS)
1398 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1400 ixgbe_i2c_bus_clear(hw);
1402 if (retry < max_retry)
1403 DEBUGOUT("I2C byte read error - Retrying.\n");
1405 DEBUGOUT("I2C byte read error.\n");
1407 } while (retry < max_retry);
1409 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1416 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1417 * @hw: pointer to hardware structure
1418 * @byte_offset: byte offset to write
1419 * @data: value to write
1421 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1422 * a specified device address.
1424 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1425 u8 dev_addr, u8 data)
1427 s32 status = IXGBE_SUCCESS;
1432 DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1434 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1435 swfw_mask = IXGBE_GSSR_PHY1_SM;
1437 swfw_mask = IXGBE_GSSR_PHY0_SM;
1439 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1440 status = IXGBE_ERR_SWFW_SYNC;
1441 goto write_byte_out;
1445 ixgbe_i2c_start(hw);
1447 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1448 if (status != IXGBE_SUCCESS)
1451 status = ixgbe_get_i2c_ack(hw);
1452 if (status != IXGBE_SUCCESS)
1455 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1456 if (status != IXGBE_SUCCESS)
1459 status = ixgbe_get_i2c_ack(hw);
1460 if (status != IXGBE_SUCCESS)
1463 status = ixgbe_clock_out_i2c_byte(hw, data);
1464 if (status != IXGBE_SUCCESS)
1467 status = ixgbe_get_i2c_ack(hw);
1468 if (status != IXGBE_SUCCESS)
1475 ixgbe_i2c_bus_clear(hw);
1477 if (retry < max_retry)
1478 DEBUGOUT("I2C byte write error - Retrying.\n");
1480 DEBUGOUT("I2C byte write error.\n");
1481 } while (retry < max_retry);
1483 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1490 * ixgbe_i2c_start - Sets I2C start condition
1491 * @hw: pointer to hardware structure
1493 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1495 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1497 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1499 DEBUGFUNC("ixgbe_i2c_start");
1501 /* Start condition must begin with data and clock high */
1502 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1503 ixgbe_raise_i2c_clk(hw, &i2cctl);
1505 /* Setup time for start condition (4.7us) */
1506 usec_delay(IXGBE_I2C_T_SU_STA);
1508 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1510 /* Hold time for start condition (4us) */
1511 usec_delay(IXGBE_I2C_T_HD_STA);
1513 ixgbe_lower_i2c_clk(hw, &i2cctl);
1515 /* Minimum low period of clock is 4.7 us */
1516 usec_delay(IXGBE_I2C_T_LOW);
1521 * ixgbe_i2c_stop - Sets I2C stop condition
1522 * @hw: pointer to hardware structure
1524 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1526 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1528 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1530 DEBUGFUNC("ixgbe_i2c_stop");
1532 /* Stop condition must begin with data low and clock high */
1533 ixgbe_set_i2c_data(hw, &i2cctl, 0);
1534 ixgbe_raise_i2c_clk(hw, &i2cctl);
1536 /* Setup time for stop condition (4us) */
1537 usec_delay(IXGBE_I2C_T_SU_STO);
1539 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1541 /* bus free time between stop and start (4.7us)*/
1542 usec_delay(IXGBE_I2C_T_BUF);
1546 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1547 * @hw: pointer to hardware structure
1548 * @data: data byte to clock in
1550 * Clocks in one byte data via I2C data/clock
1552 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1557 DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1559 for (i = 7; i >= 0; i--) {
1560 ixgbe_clock_in_i2c_bit(hw, &bit);
1564 return IXGBE_SUCCESS;
1568 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1569 * @hw: pointer to hardware structure
1570 * @data: data byte clocked out
1572 * Clocks out one byte data via I2C data/clock
1574 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1576 s32 status = IXGBE_SUCCESS;
1581 DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1583 for (i = 7; i >= 0; i--) {
1584 bit = (data >> i) & 0x1;
1585 status = ixgbe_clock_out_i2c_bit(hw, bit);
1587 if (status != IXGBE_SUCCESS)
1591 /* Release SDA line (set high) */
1592 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1593 i2cctl |= IXGBE_I2C_DATA_OUT;
1594 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1595 IXGBE_WRITE_FLUSH(hw);
1601 * ixgbe_get_i2c_ack - Polls for I2C ACK
1602 * @hw: pointer to hardware structure
1604 * Clocks in/out one bit via I2C data/clock
1606 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1608 s32 status = IXGBE_SUCCESS;
1610 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1614 DEBUGFUNC("ixgbe_get_i2c_ack");
1616 ixgbe_raise_i2c_clk(hw, &i2cctl);
1619 /* Minimum high period of clock is 4us */
1620 usec_delay(IXGBE_I2C_T_HIGH);
1622 /* Poll for ACK. Note that ACK in I2C spec is
1623 * transition from 1 to 0 */
1624 for (i = 0; i < timeout; i++) {
1625 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1626 ack = ixgbe_get_i2c_data(&i2cctl);
1634 DEBUGOUT("I2C ack was not received.\n");
1635 status = IXGBE_ERR_I2C;
1638 ixgbe_lower_i2c_clk(hw, &i2cctl);
1640 /* Minimum low period of clock is 4.7 us */
1641 usec_delay(IXGBE_I2C_T_LOW);
1647 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1648 * @hw: pointer to hardware structure
1649 * @data: read data value
1651 * Clocks in one bit via I2C data/clock
1653 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1655 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1657 DEBUGFUNC("ixgbe_clock_in_i2c_bit");
1659 ixgbe_raise_i2c_clk(hw, &i2cctl);
1661 /* Minimum high period of clock is 4us */
1662 usec_delay(IXGBE_I2C_T_HIGH);
1664 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1665 *data = ixgbe_get_i2c_data(&i2cctl);
1667 ixgbe_lower_i2c_clk(hw, &i2cctl);
1669 /* Minimum low period of clock is 4.7 us */
1670 usec_delay(IXGBE_I2C_T_LOW);
1672 return IXGBE_SUCCESS;
1676 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1677 * @hw: pointer to hardware structure
1678 * @data: data value to write
1680 * Clocks out one bit via I2C data/clock
1682 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1685 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1687 DEBUGFUNC("ixgbe_clock_out_i2c_bit");
1689 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1690 if (status == IXGBE_SUCCESS) {
1691 ixgbe_raise_i2c_clk(hw, &i2cctl);
1693 /* Minimum high period of clock is 4us */
1694 usec_delay(IXGBE_I2C_T_HIGH);
1696 ixgbe_lower_i2c_clk(hw, &i2cctl);
1698 /* Minimum low period of clock is 4.7 us.
1699 * This also takes care of the data hold time.
1701 usec_delay(IXGBE_I2C_T_LOW);
1703 status = IXGBE_ERR_I2C;
1704 DEBUGOUT1("I2C data was not set to %X\n", data);
1710 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1711 * @hw: pointer to hardware structure
1712 * @i2cctl: Current value of I2CCTL register
1714 * Raises the I2C clock line '0'->'1'
1716 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1718 DEBUGFUNC("ixgbe_raise_i2c_clk");
1720 *i2cctl |= IXGBE_I2C_CLK_OUT;
1722 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1723 IXGBE_WRITE_FLUSH(hw);
1725 /* SCL rise time (1000ns) */
1726 usec_delay(IXGBE_I2C_T_RISE);
1730 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1731 * @hw: pointer to hardware structure
1732 * @i2cctl: Current value of I2CCTL register
1734 * Lowers the I2C clock line '1'->'0'
1736 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1739 DEBUGFUNC("ixgbe_lower_i2c_clk");
1741 *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1743 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1744 IXGBE_WRITE_FLUSH(hw);
1746 /* SCL fall time (300ns) */
1747 usec_delay(IXGBE_I2C_T_FALL);
1751 * ixgbe_set_i2c_data - Sets the I2C data bit
1752 * @hw: pointer to hardware structure
1753 * @i2cctl: Current value of I2CCTL register
1754 * @data: I2C data value (0 or 1) to set
1756 * Sets the I2C data bit
1758 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1760 s32 status = IXGBE_SUCCESS;
1762 DEBUGFUNC("ixgbe_set_i2c_data");
1765 *i2cctl |= IXGBE_I2C_DATA_OUT;
1767 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1769 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1770 IXGBE_WRITE_FLUSH(hw);
1772 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1773 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1775 /* Verify data was set correctly */
1776 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1777 if (data != ixgbe_get_i2c_data(i2cctl)) {
1778 status = IXGBE_ERR_I2C;
1779 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1786 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1787 * @hw: pointer to hardware structure
1788 * @i2cctl: Current value of I2CCTL register
1790 * Returns the I2C data bit value
1792 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1796 DEBUGFUNC("ixgbe_get_i2c_data");
1798 if (*i2cctl & IXGBE_I2C_DATA_IN)
1807 * ixgbe_i2c_bus_clear - Clears the I2C bus
1808 * @hw: pointer to hardware structure
1810 * Clears the I2C bus by sending nine clock pulses.
1811 * Used when data line is stuck low.
1813 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1815 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1818 DEBUGFUNC("ixgbe_i2c_bus_clear");
1820 ixgbe_i2c_start(hw);
1822 ixgbe_set_i2c_data(hw, &i2cctl, 1);
1824 for (i = 0; i < 9; i++) {
1825 ixgbe_raise_i2c_clk(hw, &i2cctl);
1827 /* Min high period of clock is 4us */
1828 usec_delay(IXGBE_I2C_T_HIGH);
1830 ixgbe_lower_i2c_clk(hw, &i2cctl);
1832 /* Min low period of clock is 4.7us*/
1833 usec_delay(IXGBE_I2C_T_LOW);
1836 ixgbe_i2c_start(hw);
1838 /* Put the i2c bus back to default state */
1843 * ixgbe_tn_check_overtemp - Checks if an overtemp occured.
1844 * @hw: pointer to hardware structure
1846 * Checks if the LASI temp alarm status was triggered due to overtemp
1848 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1850 s32 status = IXGBE_SUCCESS;
1853 DEBUGFUNC("ixgbe_tn_check_overtemp");
1855 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1858 /* Check that the LASI temp alarm status was triggered */
1859 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1860 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
1862 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1865 status = IXGBE_ERR_OVERTEMP;