FreeBSD kernel IXGBE device code
ixgbe_phy.c File Reference
#include "ixgbe_api.h"
#include "ixgbe_common.h"
#include "ixgbe_phy.h"
Include dependency graph for ixgbe_phy.c:

Go to the source code of this file.

Functions

static void ixgbe_i2c_start (struct ixgbe_hw *hw)
 
static void ixgbe_i2c_stop (struct ixgbe_hw *hw)
 
static void ixgbe_clock_in_i2c_byte (struct ixgbe_hw *hw, u8 *data)
 
static s32 ixgbe_clock_out_i2c_byte (struct ixgbe_hw *hw, u8 data)
 
static s32 ixgbe_get_i2c_ack (struct ixgbe_hw *hw)
 
static void ixgbe_clock_in_i2c_bit (struct ixgbe_hw *hw, bool *data)
 
static s32 ixgbe_clock_out_i2c_bit (struct ixgbe_hw *hw, bool data)
 
static void ixgbe_raise_i2c_clk (struct ixgbe_hw *hw, u32 *i2cctl)
 
static void ixgbe_lower_i2c_clk (struct ixgbe_hw *hw, u32 *i2cctl)
 
static s32 ixgbe_set_i2c_data (struct ixgbe_hw *hw, u32 *i2cctl, bool data)
 
static bool ixgbe_get_i2c_data (struct ixgbe_hw *hw, u32 *i2cctl)
 
static s32 ixgbe_read_i2c_sff8472_generic (struct ixgbe_hw *hw, u8 byte_offset, u8 *sff8472_data)
 
static s32 ixgbe_out_i2c_byte_ack (struct ixgbe_hw *hw, u8 byte)
 
static s32 ixgbe_in_i2c_byte_ack (struct ixgbe_hw *hw, u8 *byte)
 
static u8 ixgbe_ones_comp_byte_add (u8 add1, u8 add2)
 
s32 ixgbe_read_i2c_combined_generic_int (struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val, bool lock)
 
s32 ixgbe_write_i2c_combined_generic_int (struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val, bool lock)
 
s32 ixgbe_init_phy_ops_generic (struct ixgbe_hw *hw)
 
static bool ixgbe_probe_phy (struct ixgbe_hw *hw, u16 phy_addr)
 
s32 ixgbe_identify_phy_generic (struct ixgbe_hw *hw)
 
s32 ixgbe_check_reset_blocked (struct ixgbe_hw *hw)
 
bool ixgbe_validate_phy_addr (struct ixgbe_hw *hw, u32 phy_addr)
 
s32 ixgbe_get_phy_id (struct ixgbe_hw *hw)
 
enum ixgbe_phy_type ixgbe_get_phy_type_from_id (u32 phy_id)
 
s32 ixgbe_reset_phy_generic (struct ixgbe_hw *hw)
 
void ixgbe_restart_auto_neg (struct ixgbe_hw *hw)
 
s32 ixgbe_read_phy_reg_mdi (struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, u16 *phy_data)
 
s32 ixgbe_read_phy_reg_generic (struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, u16 *phy_data)
 
s32 ixgbe_write_phy_reg_mdi (struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, u16 phy_data)
 
s32 ixgbe_write_phy_reg_generic (struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, u16 phy_data)
 
s32 ixgbe_setup_phy_link_generic (struct ixgbe_hw *hw)
 
s32 ixgbe_setup_phy_link_speed_generic (struct ixgbe_hw *hw, ixgbe_link_speed speed, bool autoneg_wait_to_complete)
 
static s32 ixgbe_get_copper_speeds_supported (struct ixgbe_hw *hw)
 
s32 ixgbe_get_copper_link_capabilities_generic (struct ixgbe_hw *hw, ixgbe_link_speed *speed, bool *autoneg)
 
s32 ixgbe_check_phy_link_tnx (struct ixgbe_hw *hw, ixgbe_link_speed *speed, bool *link_up)
 
s32 ixgbe_setup_phy_link_tnx (struct ixgbe_hw *hw)
 
s32 ixgbe_get_phy_firmware_version_tnx (struct ixgbe_hw *hw, u16 *firmware_version)
 
s32 ixgbe_get_phy_firmware_version_generic (struct ixgbe_hw *hw, u16 *firmware_version)
 
s32 ixgbe_reset_phy_nl (struct ixgbe_hw *hw)
 
s32 ixgbe_identify_module_generic (struct ixgbe_hw *hw)
 
s32 ixgbe_identify_sfp_module_generic (struct ixgbe_hw *hw)
 
u64 ixgbe_get_supported_phy_sfp_layer_generic (struct ixgbe_hw *hw)
 
s32 ixgbe_identify_qsfp_module_generic (struct ixgbe_hw *hw)
 
s32 ixgbe_get_sfp_init_sequence_offsets (struct ixgbe_hw *hw, u16 *list_offset, u16 *data_offset)
 
s32 ixgbe_read_i2c_eeprom_generic (struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
 
s32 ixgbe_write_i2c_eeprom_generic (struct ixgbe_hw *hw, u8 byte_offset, u8 eeprom_data)
 
static bool ixgbe_is_sfp_probe (struct ixgbe_hw *hw, u8 offset, u8 addr)
 
static s32 ixgbe_read_i2c_byte_generic_int (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 *data, bool lock)
 
s32 ixgbe_read_i2c_byte_generic (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 *data)
 
s32 ixgbe_read_i2c_byte_generic_unlocked (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 *data)
 
static s32 ixgbe_write_i2c_byte_generic_int (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 data, bool lock)
 
s32 ixgbe_write_i2c_byte_generic (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 data)
 
s32 ixgbe_write_i2c_byte_generic_unlocked (struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, u8 data)
 
void ixgbe_i2c_bus_clear (struct ixgbe_hw *hw)
 
s32 ixgbe_tn_check_overtemp (struct ixgbe_hw *hw)
 
s32 ixgbe_set_copper_phy_power (struct ixgbe_hw *hw, bool on)
 

Function Documentation

◆ ixgbe_check_phy_link_tnx()

s32 ixgbe_check_phy_link_tnx ( struct ixgbe_hw hw,
ixgbe_link_speed speed,
bool link_up 
)

ixgbe_check_phy_link_tnx - Determine link and speed status @hw: pointer to hardware structure @speed: current link speed @link_up: true is link is up, false otherwise

Reads the VS1 register to determine if link is up and the current speed for the PHY.

Definition at line 995 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_LINK_SPEED_10GB_FULL, IXGBE_LINK_SPEED_1GB_FULL, IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS, IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS, IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS, IXGBE_SUCCESS, ixgbe_phy_info::ops, ixgbe_hw::phy, phy_speed, ixgbe_phy_operations::read_reg, and usec_delay.

Referenced by ixgbe_init_phy_ops_82598(), and ixgbe_init_phy_ops_82599().

Here is the caller graph for this function:

◆ ixgbe_check_reset_blocked()

s32 ixgbe_check_reset_blocked ( struct ixgbe_hw hw)

ixgbe_check_reset_blocked - check status of MNG FW veto bit @hw: pointer to the hardware structure

This function checks the MMNGC.MNG_VETO bit to see if there are any constraints on link from manageability. For MAC's that don't have this bit just return faluse since the link can not be blocked via this method.

Definition at line 375 of file ixgbe_phy.c.

References DEBUGFUNC, ERROR_REPORT1, IXGBE_ERROR_SOFTWARE, ixgbe_mac_82598EB, IXGBE_MMNGC, IXGBE_MMNGC_MNG_VETO, IXGBE_READ_REG, ixgbe_hw::mac, and ixgbe_mac_info::type.

Referenced by ixgbe_disable_tx_laser_multispeed_fiber(), ixgbe_enter_lplu_t_x550em(), ixgbe_flap_tx_laser_multispeed_fiber(), ixgbe_reset_phy_fw(), ixgbe_reset_phy_generic(), ixgbe_reset_phy_nl(), ixgbe_restart_auto_neg(), ixgbe_set_copper_phy_power(), ixgbe_setup_fw_link(), ixgbe_setup_kr_x550em(), and prot_autoc_write_82599().

Here is the caller graph for this function:

◆ ixgbe_clock_in_i2c_bit()

static void ixgbe_clock_in_i2c_bit ( struct ixgbe_hw hw,
bool data 
)
static

ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock @hw: pointer to hardware structure @data: read data value

Clocks in one bit via I2C data/clock

Definition at line 2399 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_get_i2c_data(), IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_DATA_OUT_BY_MAC, IXGBE_I2C_T_HIGH, IXGBE_I2C_T_LOW, IXGBE_I2CCTL_BY_MAC, ixgbe_lower_i2c_clk(), ixgbe_raise_i2c_clk(), IXGBE_READ_REG, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_clock_in_i2c_byte().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_clock_in_i2c_byte()

static void ixgbe_clock_in_i2c_byte ( struct ixgbe_hw hw,
u8 data 
)
static

ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C @hw: pointer to hardware structure @data: data byte to clock in

Clocks in one byte data via I2C data/clock

Definition at line 2292 of file ixgbe_phy.c.

References DEBUGFUNC, and ixgbe_clock_in_i2c_bit().

Referenced by ixgbe_in_i2c_byte_ack(), ixgbe_read_i2c_byte_generic_int(), and ixgbe_read_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_clock_out_i2c_bit()

static s32 ixgbe_clock_out_i2c_bit ( struct ixgbe_hw hw,
bool  data 
)
static

ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock @hw: pointer to hardware structure @data: data value to write

Clocks out one bit via I2C data/clock

Definition at line 2433 of file ixgbe_phy.c.

References DEBUGFUNC, ERROR_REPORT2, IXGBE_ERR_I2C, IXGBE_ERROR_INVALID_STATE, IXGBE_I2C_T_HIGH, IXGBE_I2C_T_LOW, IXGBE_I2CCTL_BY_MAC, ixgbe_lower_i2c_clk(), ixgbe_raise_i2c_clk(), IXGBE_READ_REG, ixgbe_set_i2c_data(), IXGBE_SUCCESS, and usec_delay.

Referenced by ixgbe_clock_out_i2c_byte(), ixgbe_in_i2c_byte_ack(), ixgbe_read_i2c_byte_generic_int(), and ixgbe_read_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_clock_out_i2c_byte()

static s32 ixgbe_clock_out_i2c_byte ( struct ixgbe_hw hw,
u8  data 
)
static

ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C @hw: pointer to hardware structure @data: data byte clocked out

Clocks out one byte data via I2C data/clock

Definition at line 2313 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_clock_out_i2c_bit(), IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_DATA_OUT_BY_MAC, IXGBE_I2CCTL_BY_MAC, IXGBE_READ_REG, IXGBE_SUCCESS, IXGBE_WRITE_FLUSH, and IXGBE_WRITE_REG.

Referenced by ixgbe_out_i2c_byte_ack(), ixgbe_read_i2c_byte_generic_int(), and ixgbe_write_i2c_byte_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_get_copper_link_capabilities_generic()

s32 ixgbe_get_copper_link_capabilities_generic ( struct ixgbe_hw hw,
ixgbe_link_speed speed,
bool autoneg 
)

ixgbe_get_copper_link_capabilities_generic - Determines link capabilities @hw: pointer to hardware structure @speed: pointer to link speed @autoneg: boolean auto-negotiation value

Definition at line 970 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_get_copper_speeds_supported(), IXGBE_SUCCESS, ixgbe_hw::phy, and ixgbe_phy_info::speeds_supported.

Referenced by ixgbe_get_link_capabilities_X540(), ixgbe_init_ops_X540(), ixgbe_init_phy_ops_82598(), ixgbe_init_phy_ops_82599(), ixgbe_setup_phy_link_generic(), and ixgbe_setup_phy_link_tnx().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_get_copper_speeds_supported()

static s32 ixgbe_get_copper_speeds_supported ( struct ixgbe_hw hw)
static

ixgbe_get_copper_speeds_supported - Get copper link speeds from phy @hw: pointer to hardware structure

Determines the supported link capabilities by reading the PHY auto negotiation register.

Definition at line 930 of file ixgbe_phy.c.

References IXGBE_LINK_SPEED_100_FULL, IXGBE_LINK_SPEED_10GB_FULL, IXGBE_LINK_SPEED_1GB_FULL, IXGBE_LINK_SPEED_2_5GB_FULL, IXGBE_LINK_SPEED_5GB_FULL, ixgbe_mac_X550, ixgbe_mac_X550EM_a, ixgbe_mac_X550EM_x, IXGBE_MDIO_PHY_SPEED_100M, IXGBE_MDIO_PHY_SPEED_10G, IXGBE_MDIO_PHY_SPEED_1G, IXGBE_MDIO_PHY_SPEED_ABILITY, IXGBE_MDIO_PMA_PMD_DEV_TYPE, ixgbe_hw::mac, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, ixgbe_phy_info::speeds_supported, and ixgbe_mac_info::type.

Referenced by ixgbe_get_copper_link_capabilities_generic().

Here is the caller graph for this function:

◆ ixgbe_get_i2c_ack()

static s32 ixgbe_get_i2c_ack ( struct ixgbe_hw hw)
static

ixgbe_get_i2c_ack - Polls for I2C ACK @hw: pointer to hardware structure

Clocks in/out one bit via I2C data/clock

Definition at line 2346 of file ixgbe_phy.c.

References DEBUGFUNC, DEBUGOUT, IXGBE_ERR_I2C, ixgbe_get_i2c_data(), IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_DATA_OUT_BY_MAC, IXGBE_I2C_T_HIGH, IXGBE_I2C_T_LOW, IXGBE_I2CCTL_BY_MAC, ixgbe_lower_i2c_clk(), ixgbe_raise_i2c_clk(), IXGBE_READ_REG, IXGBE_SUCCESS, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_out_i2c_byte_ack(), ixgbe_read_i2c_byte_generic_int(), and ixgbe_write_i2c_byte_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_get_i2c_data()

static bool ixgbe_get_i2c_data ( struct ixgbe_hw hw,
u32 i2cctl 
)
static

ixgbe_get_i2c_data - Reads the I2C SDA data bit @hw: pointer to hardware structure @i2cctl: Current value of I2CCTL register

Returns the I2C data bit value Negates the I2C data output enable on X550 hardware.

Definition at line 2576 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_DATA_IN_BY_MAC, IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_T_FALL, IXGBE_I2CCTL_BY_MAC, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_clock_in_i2c_bit(), ixgbe_get_i2c_ack(), and ixgbe_set_i2c_data().

Here is the caller graph for this function:

◆ ixgbe_get_phy_firmware_version_generic()

s32 ixgbe_get_phy_firmware_version_generic ( struct ixgbe_hw hw,
u16 firmware_version 
)

ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version @hw: pointer to hardware structure @firmware_version: pointer to the PHY Firmware Version

Definition at line 1127 of file ixgbe_phy.c.

References AQ_FW_REV, DEBUGFUNC, IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::read_reg.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_get_phy_firmware_version_tnx()

s32 ixgbe_get_phy_firmware_version_tnx ( struct ixgbe_hw hw,
u16 firmware_version 
)

ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version @hw: pointer to hardware structure @firmware_version: pointer to the PHY Firmware Version

Definition at line 1108 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, and TNX_FW_REV.

Referenced by ixgbe_init_phy_ops_82598(), and ixgbe_init_phy_ops_82599().

Here is the caller graph for this function:

◆ ixgbe_get_phy_id()

s32 ixgbe_get_phy_id ( struct ixgbe_hw hw)

ixgbe_get_phy_id - Get the phy type @hw: pointer to hardware structure

Definition at line 425 of file ixgbe_phy.c.

References DEBUGFUNC, DEBUGOUT2, ixgbe_phy_info::id, IXGBE_MDIO_PHY_ID_HIGH, IXGBE_MDIO_PHY_ID_LOW, IXGBE_MDIO_PMA_PMD_DEV_TYPE, IXGBE_PHY_REVISION_MASK, IXGBE_SUCCESS, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, and ixgbe_phy_info::revision.

Referenced by ixgbe_probe_phy().

Here is the caller graph for this function:

◆ ixgbe_get_phy_type_from_id()

enum ixgbe_phy_type ixgbe_get_phy_type_from_id ( u32  phy_id)

ixgbe_get_phy_type_from_id - Get the phy type @phy_id: PHY ID information

Definition at line 456 of file ixgbe_phy.c.

References ATH_PHY_ID, DEBUGFUNC, IXGBE_M88E1500_E_PHY_ID, IXGBE_M88E1543_E_PHY_ID, ixgbe_phy_aq, ixgbe_phy_ext_1g_t, ixgbe_phy_nl, ixgbe_phy_qt, ixgbe_phy_tn, ixgbe_phy_unknown, ixgbe_phy_x550em_ext_t, QT2022_PHY_ID, TN1010_PHY_ID, X540_PHY_ID, X550_PHY_ID2, X550_PHY_ID3, X557_PHY_ID, and X557_PHY_ID2.

Referenced by ixgbe_probe_phy().

Here is the caller graph for this function:

◆ ixgbe_get_sfp_init_sequence_offsets()

s32 ixgbe_get_sfp_init_sequence_offsets ( struct ixgbe_hw hw,
u16 list_offset,
u16 data_offset 
)

◆ ixgbe_get_supported_phy_sfp_layer_generic()

◆ ixgbe_i2c_bus_clear()

void ixgbe_i2c_bus_clear ( struct ixgbe_hw hw)

ixgbe_i2c_bus_clear - Clears the I2C bus @hw: pointer to hardware structure

Clears the I2C bus by sending nine clock pulses. Used when data line is stuck low.

Definition at line 2605 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_i2c_start(), ixgbe_i2c_stop(), IXGBE_I2C_T_HIGH, IXGBE_I2C_T_LOW, IXGBE_I2CCTL_BY_MAC, ixgbe_lower_i2c_clk(), ixgbe_raise_i2c_clk(), IXGBE_READ_REG, ixgbe_set_i2c_data(), and usec_delay.

Referenced by ixgbe_init_phy_ops_generic(), ixgbe_read_i2c_byte_generic_int(), ixgbe_read_i2c_combined_generic_int(), ixgbe_write_i2c_byte_generic_int(), and ixgbe_write_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_i2c_start()

static void ixgbe_i2c_start ( struct ixgbe_hw hw)
static

ixgbe_i2c_start - Sets I2C start condition @hw: pointer to hardware structure

Sets I2C start condition (High -> Low on SDA while SCL is High) Set bit-bang mode on X550 hardware.

Definition at line 2221 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_BB_EN_BY_MAC, IXGBE_I2C_T_HD_STA, IXGBE_I2C_T_LOW, IXGBE_I2C_T_SU_STA, IXGBE_I2CCTL_BY_MAC, ixgbe_lower_i2c_clk(), ixgbe_raise_i2c_clk(), IXGBE_READ_REG, ixgbe_set_i2c_data(), and usec_delay.

Referenced by ixgbe_i2c_bus_clear(), ixgbe_read_i2c_byte_generic_int(), ixgbe_read_i2c_combined_generic_int(), ixgbe_write_i2c_byte_generic_int(), and ixgbe_write_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_i2c_stop()

static void ixgbe_i2c_stop ( struct ixgbe_hw hw)
static

ixgbe_i2c_stop - Sets I2C stop condition @hw: pointer to hardware structure

Sets I2C stop condition (Low -> High on SDA while SCL is High) Disables bit-bang mode and negates data output enable on X550 hardware.

Definition at line 2256 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_BB_EN_BY_MAC, IXGBE_I2C_CLK_OE_N_EN_BY_MAC, IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_T_BUF, IXGBE_I2C_T_SU_STO, IXGBE_I2CCTL_BY_MAC, ixgbe_raise_i2c_clk(), IXGBE_READ_REG, ixgbe_set_i2c_data(), IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_i2c_bus_clear(), ixgbe_read_i2c_byte_generic_int(), ixgbe_read_i2c_combined_generic_int(), ixgbe_write_i2c_byte_generic_int(), and ixgbe_write_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_identify_module_generic()

s32 ixgbe_identify_module_generic ( struct ixgbe_hw hw)

ixgbe_identify_module_generic - Identifies module type @hw: pointer to hardware structure

Determines HW type and calls appropriate function.

Definition at line 1263 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_mac_operations::get_media_type, IXGBE_ERR_SFP_NOT_PRESENT, ixgbe_identify_qsfp_module_generic(), ixgbe_identify_sfp_module_generic(), ixgbe_media_type_fiber, ixgbe_media_type_fiber_qsfp, ixgbe_sfp_type_not_present, ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_hw::phy, and ixgbe_phy_info::sfp_type.

Referenced by ixgbe_identify_phy_82599(), ixgbe_identify_sfp_module_X550em(), and ixgbe_init_phy_ops_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_identify_phy_generic()

s32 ixgbe_identify_phy_generic ( struct ixgbe_hw hw)

ixgbe_identify_phy_generic - Get physical layer module @hw: pointer to hardware structure

Determines the physical layer module found on the current adapter.

Definition at line 322 of file ixgbe_phy.c.

References ixgbe_phy_info::addr, ixgbe_hw::bus, DEBUGFUNC, IXGBE_ERR_PHY_ADDR_INVALID, IXGBE_GSSR_PHY0_SM, IXGBE_GSSR_PHY1_SM, IXGBE_MAX_PHY_ADDR, IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD, IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT, ixgbe_phy_unknown, ixgbe_probe_phy(), IXGBE_SUCCESS, ixgbe_bus_info::lan_id, ixgbe_phy_info::nw_mng_if_sel, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, and ixgbe_phy_info::type.

Referenced by ixgbe_identify_phy_82599(), ixgbe_identify_phy_x550em(), ixgbe_init_phy_ops_generic(), and ixgbe_reset_phy_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_identify_qsfp_module_generic()

s32 ixgbe_identify_qsfp_module_generic ( struct ixgbe_hw hw)

ixgbe_identify_qsfp_module_generic - Identifies QSFP modules @hw: pointer to hardware structure

Searches for and identifies the QSFP module and assigns appropriate PHY type

Definition at line 1636 of file ixgbe_phy.c.

References ixgbe_hw::allow_unsupported_sfp, ixgbe_hw::bus, DEBUGFUNC, DEBUGOUT, EWARN, ixgbe_mac_operations::get_media_type, ixgbe_phy_info::id, IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP, IXGBE_ERR_PHY_ADDR_INVALID, IXGBE_ERR_SFP_NOT_PRESENT, IXGBE_ERR_SFP_NOT_SUPPORTED, ixgbe_get_device_caps(), ixgbe_media_type_fiber_qsfp, ixgbe_phy_qsfp_active_unknown, ixgbe_phy_qsfp_intel, ixgbe_phy_qsfp_passive_unknown, ixgbe_phy_qsfp_unknown, ixgbe_phy_sfp_unsupported, ixgbe_phy_unknown, IXGBE_SFF_10GBASELR_CAPABLE, IXGBE_SFF_10GBASESR_CAPABLE, IXGBE_SFF_1GBASELX_CAPABLE, IXGBE_SFF_1GBASESX_CAPABLE, IXGBE_SFF_IDENTIFIER, IXGBE_SFF_IDENTIFIER_QSFP_PLUS, IXGBE_SFF_QSFP_10GBE_COMP, IXGBE_SFF_QSFP_1GBE_COMP, IXGBE_SFF_QSFP_CABLE_LENGTH, IXGBE_SFF_QSFP_CONNECTOR, IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE, IXGBE_SFF_QSFP_DA_ACTIVE_CABLE, IXGBE_SFF_QSFP_DA_PASSIVE_CABLE, IXGBE_SFF_QSFP_DEVICE_TECH, IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL, IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0, IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1, IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2, IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT, IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT, IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT, IXGBE_SFF_VENDOR_OUI_INTEL, ixgbe_sfp_type_da_act_lmt_core0, ixgbe_sfp_type_da_act_lmt_core1, ixgbe_sfp_type_da_cu_core0, ixgbe_sfp_type_da_cu_core1, ixgbe_sfp_type_not_present, ixgbe_sfp_type_srlr_core0, ixgbe_sfp_type_srlr_core1, IXGBE_SUCCESS, ixgbe_bus_info::lan_id, ixgbe_hw::mac, ixgbe_phy_info::multispeed_fiber, ixgbe_mac_info::ops, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_i2c_eeprom, ixgbe_mac_operations::set_lan_id, ixgbe_phy_info::sfp_setup_needed, ixgbe_phy_info::sfp_type, and ixgbe_phy_info::type.

Referenced by ixgbe_identify_module_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_identify_sfp_module_generic()

s32 ixgbe_identify_sfp_module_generic ( struct ixgbe_hw hw)

ixgbe_identify_sfp_module_generic - Identifies SFP modules @hw: pointer to hardware structure

Searches for and identifies the SFP module and assigns appropriate PHY type.

Definition at line 1293 of file ixgbe_phy.c.

References ixgbe_hw::allow_unsupported_sfp, ixgbe_hw::bus, DEBUGFUNC, DEBUGOUT, EWARN, ixgbe_mac_operations::get_media_type, ixgbe_phy_info::id, IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP, IXGBE_ERR_PHY_ADDR_INVALID, IXGBE_ERR_SFP_NOT_PRESENT, IXGBE_ERR_SFP_NOT_SUPPORTED, ixgbe_get_device_caps(), ixgbe_mac_82598EB, ixgbe_media_type_fiber, ixgbe_phy_nl, ixgbe_phy_sfp_active_unknown, ixgbe_phy_sfp_avago, ixgbe_phy_sfp_ftl, ixgbe_phy_sfp_ftl_active, ixgbe_phy_sfp_intel, ixgbe_phy_sfp_passive_tyco, ixgbe_phy_sfp_passive_unknown, ixgbe_phy_sfp_unknown, ixgbe_phy_sfp_unsupported, ixgbe_phy_unknown, IXGBE_SFF_10GBASELR_CAPABLE, IXGBE_SFF_10GBASESR_CAPABLE, IXGBE_SFF_10GBE_COMP_CODES, IXGBE_SFF_1GBASELX_CAPABLE, IXGBE_SFF_1GBASESX_CAPABLE, IXGBE_SFF_1GBASET_CAPABLE, IXGBE_SFF_1GBE_COMP_CODES, IXGBE_SFF_CABLE_SPEC_COMP, IXGBE_SFF_CABLE_TECHNOLOGY, IXGBE_SFF_DA_ACTIVE_CABLE, IXGBE_SFF_DA_PASSIVE_CABLE, IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING, IXGBE_SFF_IDENTIFIER, IXGBE_SFF_IDENTIFIER_SFP, IXGBE_SFF_VENDOR_OUI_AVAGO, IXGBE_SFF_VENDOR_OUI_BYTE0, IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT, IXGBE_SFF_VENDOR_OUI_BYTE1, IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT, IXGBE_SFF_VENDOR_OUI_BYTE2, IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT, IXGBE_SFF_VENDOR_OUI_FTL, IXGBE_SFF_VENDOR_OUI_INTEL, IXGBE_SFF_VENDOR_OUI_TYCO, ixgbe_sfp_type_1g_cu_core0, ixgbe_sfp_type_1g_cu_core1, ixgbe_sfp_type_1g_lx_core0, ixgbe_sfp_type_1g_lx_core1, ixgbe_sfp_type_1g_sx_core0, ixgbe_sfp_type_1g_sx_core1, ixgbe_sfp_type_da_act_lmt_core0, ixgbe_sfp_type_da_act_lmt_core1, ixgbe_sfp_type_da_cu, ixgbe_sfp_type_da_cu_core0, ixgbe_sfp_type_da_cu_core1, ixgbe_sfp_type_lr, ixgbe_sfp_type_not_present, ixgbe_sfp_type_sr, ixgbe_sfp_type_srlr_core0, ixgbe_sfp_type_srlr_core1, ixgbe_sfp_type_unknown, IXGBE_SUCCESS, ixgbe_bus_info::lan_id, ixgbe_hw::mac, ixgbe_phy_info::multispeed_fiber, ixgbe_mac_info::ops, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_i2c_eeprom, ixgbe_mac_operations::set_lan_id, ixgbe_phy_info::sfp_setup_needed, ixgbe_phy_info::sfp_type, ixgbe_mac_info::type, and ixgbe_phy_info::type.

Referenced by ixgbe_identify_module_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_in_i2c_byte_ack()

static s32 ixgbe_in_i2c_byte_ack ( struct ixgbe_hw hw,
u8 byte 
)
static

ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack @hw: pointer to the hardware structure @byte: pointer to a u8 to receive the byte

Returns an error code on error.

Definition at line 78 of file ixgbe_phy.c.

References ixgbe_clock_in_i2c_byte(), and ixgbe_clock_out_i2c_bit().

Referenced by ixgbe_read_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_init_phy_ops_generic()

s32 ixgbe_init_phy_ops_generic ( struct ixgbe_hw hw)

ixgbe_init_phy_ops_generic - Inits PHY function ptrs @hw: pointer to the hardware structure

Initialize the function pointers.

Definition at line 248 of file ixgbe_phy.c.

References ixgbe_phy_operations::check_link, ixgbe_phy_operations::check_overtemp, DEBUGFUNC, ixgbe_phy_operations::get_firmware_version, ixgbe_phy_operations::i2c_bus_clear, ixgbe_phy_operations::identify, ixgbe_phy_operations::identify_sfp, ixgbe_get_phy_firmware_version_generic(), ixgbe_i2c_bus_clear(), ixgbe_identify_module_generic(), ixgbe_identify_phy_generic(), ixgbe_read_i2c_byte_generic(), ixgbe_read_i2c_byte_generic_unlocked(), ixgbe_read_i2c_eeprom_generic(), ixgbe_read_i2c_sff8472_generic(), ixgbe_read_phy_reg_generic(), ixgbe_read_phy_reg_mdi(), ixgbe_reset_phy_generic(), ixgbe_setup_phy_link_generic(), ixgbe_setup_phy_link_speed_generic(), ixgbe_sfp_type_unknown, IXGBE_SUCCESS, ixgbe_tn_check_overtemp(), ixgbe_write_i2c_byte_generic(), ixgbe_write_i2c_byte_generic_unlocked(), ixgbe_write_i2c_eeprom_generic(), ixgbe_write_phy_reg_generic(), ixgbe_write_phy_reg_mdi(), ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_i2c_byte, ixgbe_phy_operations::read_i2c_byte_unlocked, ixgbe_phy_operations::read_i2c_eeprom, ixgbe_phy_operations::read_i2c_sff8472, ixgbe_phy_operations::read_reg, ixgbe_phy_operations::read_reg_mdi, ixgbe_phy_operations::reset, ixgbe_phy_operations::setup_link, ixgbe_phy_operations::setup_link_speed, ixgbe_phy_info::sfp_type, ixgbe_phy_operations::write_i2c_byte, ixgbe_phy_operations::write_i2c_byte_unlocked, ixgbe_phy_operations::write_i2c_eeprom, ixgbe_phy_operations::write_reg, and ixgbe_phy_operations::write_reg_mdi.

Referenced by ixgbe_init_ops_82598(), ixgbe_init_ops_82599(), and ixgbe_init_ops_X540().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_is_sfp_probe()

static bool ixgbe_is_sfp_probe ( struct ixgbe_hw hw,
u8  offset,
u8  addr 
)
static

ixgbe_is_sfp_probe - Returns true if SFP is being detected @hw: pointer to hardware structure @offset: eeprom offset to be read @addr: I2C address to be read

Definition at line 1976 of file ixgbe_phy.c.

References ixgbe_phy_info::addr, IXGBE_I2C_EEPROM_DEV_ADDR, IXGBE_SFF_IDENTIFIER, ixgbe_sfp_type_not_present, ixgbe_hw::phy, and ixgbe_phy_info::sfp_type.

Referenced by ixgbe_read_i2c_byte_generic_int().

Here is the caller graph for this function:

◆ ixgbe_lower_i2c_clk()

static void ixgbe_lower_i2c_clk ( struct ixgbe_hw hw,
u32 i2cctl 
)
static

ixgbe_lower_i2c_clk - Lowers the I2C SCL clock @hw: pointer to hardware structure @i2cctl: Current value of I2CCTL register

Lowers the I2C clock line '1'->'0' Asserts the I2C clock output enable on X550 hardware.

Definition at line 2506 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_CLK_OUT_BY_MAC, IXGBE_I2C_T_FALL, IXGBE_I2CCTL_BY_MAC, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_clock_in_i2c_bit(), ixgbe_clock_out_i2c_bit(), ixgbe_get_i2c_ack(), ixgbe_i2c_bus_clear(), and ixgbe_i2c_start().

Here is the caller graph for this function:

◆ ixgbe_ones_comp_byte_add()

static u8 ixgbe_ones_comp_byte_add ( u8  add1,
u8  add2 
)
static

ixgbe_ones_comp_byte_add - Perform one's complement addition @add1: addend 1 @add2: addend 2

Returns one's complement 8-bit sum.

Definition at line 92 of file ixgbe_phy.c.

Referenced by ixgbe_read_i2c_combined_generic_int(), and ixgbe_write_i2c_combined_generic_int().

Here is the caller graph for this function:

◆ ixgbe_out_i2c_byte_ack()

static s32 ixgbe_out_i2c_byte_ack ( struct ixgbe_hw hw,
u8  byte 
)
static

ixgbe_out_i2c_byte_ack - Send I2C byte with ack @hw: pointer to the hardware structure @byte: byte to send

Returns an error code on error.

Definition at line 61 of file ixgbe_phy.c.

References ixgbe_clock_out_i2c_byte(), and ixgbe_get_i2c_ack().

Referenced by ixgbe_read_i2c_combined_generic_int(), and ixgbe_write_i2c_combined_generic_int().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_probe_phy()

static bool ixgbe_probe_phy ( struct ixgbe_hw hw,
u16  phy_addr 
)
static

ixgbe_probe_phy - Probe a single address for a PHY @hw: pointer to hardware structure @phy_addr: PHY address to probe

Returns true if PHY found

Definition at line 287 of file ixgbe_phy.c.

References DEBUGOUT1, ixgbe_phy_info::id, ixgbe_get_phy_id(), ixgbe_get_phy_type_from_id(), IXGBE_MDIO_PHY_1000BASET_ABILITY, IXGBE_MDIO_PHY_10GBASET_ABILITY, IXGBE_MDIO_PHY_EXT_ABILITY, IXGBE_MDIO_PMA_PMD_DEV_TYPE, ixgbe_phy_cu_unknown, ixgbe_phy_generic, ixgbe_phy_unknown, ixgbe_validate_phy_addr(), ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, and ixgbe_phy_info::type.

Referenced by ixgbe_identify_phy_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_raise_i2c_clk()

static void ixgbe_raise_i2c_clk ( struct ixgbe_hw hw,
u32 i2cctl 
)
static

ixgbe_raise_i2c_clk - Raises the I2C SCL clock @hw: pointer to hardware structure @i2cctl: Current value of I2CCTL register

Raises the I2C clock line '0'->'1' Negates the I2C clock output enable on X550 hardware.

Definition at line 2470 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_CLK_IN_BY_MAC, IXGBE_I2C_CLK_OE_N_EN_BY_MAC, IXGBE_I2C_CLK_OUT_BY_MAC, IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT, IXGBE_I2C_T_RISE, IXGBE_I2CCTL_BY_MAC, IXGBE_READ_REG, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_clock_in_i2c_bit(), ixgbe_clock_out_i2c_bit(), ixgbe_get_i2c_ack(), ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), and ixgbe_i2c_stop().

Here is the caller graph for this function:

◆ ixgbe_read_i2c_byte_generic()

s32 ixgbe_read_i2c_byte_generic ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8 data 
)

ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to read @dev_addr: address to read from @data: value read

Performs byte read operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 2084 of file ixgbe_phy.c.

References ixgbe_read_i2c_byte_generic_int().

Referenced by ixgbe_init_phy_ops_generic(), and ixgbe_read_i2c_byte_82599().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_read_i2c_byte_generic_int()

static s32 ixgbe_read_i2c_byte_generic_int ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8 data,
bool  lock 
)
static

ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to read @dev_addr: address to read from @data: value read @lock: true if to take and release semaphore

Performs byte read operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 1996 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGFUNC, DEBUGOUT, ixgbe_clock_in_i2c_byte(), ixgbe_clock_out_i2c_bit(), ixgbe_clock_out_i2c_byte(), IXGBE_ERR_SWFW_SYNC, ixgbe_get_i2c_ack(), ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), ixgbe_i2c_stop(), ixgbe_is_sfp_probe(), ixgbe_mac_X550, IXGBE_SFP_DETECT_RETRIES, IXGBE_SUCCESS, ixgbe_hw::mac, msec_delay, ixgbe_mac_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, ixgbe_mac_operations::release_swfw_sync, and ixgbe_mac_info::type.

Referenced by ixgbe_read_i2c_byte_generic(), and ixgbe_read_i2c_byte_generic_unlocked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_read_i2c_byte_generic_unlocked()

s32 ixgbe_read_i2c_byte_generic_unlocked ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8 data 
)

ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to read @dev_addr: address to read from @data: value read

Performs byte read operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 2101 of file ixgbe_phy.c.

References ixgbe_read_i2c_byte_generic_int().

Referenced by ixgbe_init_phy_ops_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_read_i2c_combined_generic_int()

s32 ixgbe_read_i2c_combined_generic_int ( struct ixgbe_hw hw,
u8  addr,
u16  reg,
u16 val,
bool  lock 
)

ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation @hw: pointer to the hardware structure @addr: I2C bus address to read from @reg: I2C device register to read from @val: pointer to location to receive read value @lock: true if to take and release semaphore

Returns an error code on error.

Definition at line 110 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGOUT, ixgbe_clock_in_i2c_byte(), ixgbe_clock_out_i2c_bit(), IXGBE_ERR_I2C, IXGBE_ERR_SWFW_SYNC, ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), ixgbe_i2c_stop(), ixgbe_in_i2c_byte_ack(), ixgbe_ones_comp_byte_add(), ixgbe_out_i2c_byte_ack(), ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, and ixgbe_mac_operations::release_swfw_sync.

Referenced by ixgbe_read_i2c_combined_generic(), and ixgbe_read_i2c_combined_generic_unlocked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_read_i2c_eeprom_generic()

s32 ixgbe_read_i2c_eeprom_generic ( struct ixgbe_hw hw,
u8  byte_offset,
u8 eeprom_data 
)

ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface @hw: pointer to hardware structure @byte_offset: EEPROM byte offset to read @eeprom_data: value read

Performs byte read operation to SFP module's EEPROM over I2C interface.

Definition at line 1926 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_EEPROM_DEV_ADDR, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::read_i2c_byte.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_read_i2c_sff8472_generic()

static s32 ixgbe_read_i2c_sff8472_generic ( struct ixgbe_hw hw,
u8  byte_offset,
u8 sff8472_data 
)
static

ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface @hw: pointer to hardware structure @byte_offset: byte offset at address 0xA2 @sff8472_data: value read

Performs byte read operation to SFP module's SFF-8472 data over I2C

Definition at line 1944 of file ixgbe_phy.c.

References IXGBE_I2C_EEPROM_DEV_ADDR2, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::read_i2c_byte.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_read_phy_reg_generic()

s32 ixgbe_read_phy_reg_generic ( struct ixgbe_hw hw,
u32  reg_addr,
u32  device_type,
u16 phy_data 
)

ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register using the SWFW lock - this function is needed in most cases @hw: pointer to hardware structure @reg_addr: 32 bit address of PHY register to read @device_type: 5 bit device type @phy_data: Pointer to read data from PHY register

Definition at line 681 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGFUNC, IXGBE_ERR_SWFW_SYNC, ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, ixgbe_phy_operations::read_reg_mdi, and ixgbe_mac_operations::release_swfw_sync.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_read_phy_reg_mdi()

s32 ixgbe_read_phy_reg_mdi ( struct ixgbe_hw hw,
u32  reg_addr,
u32  device_type,
u16 phy_data 
)

ixgbe_read_phy_mdi - Reads a value from a specified PHY register without the SWFW lock @hw: pointer to hardware structure @reg_addr: 32 bit address of PHY register to read @device_type: 5 bit device type @phy_data: Pointer to read data from PHY register

Definition at line 599 of file ixgbe_phy.c.

References ixgbe_phy_info::addr, DEBUGOUT, ERROR_REPORT1, IXGBE_ERR_PHY, IXGBE_ERROR_POLLING, IXGBE_MDIO_COMMAND_TIMEOUT, IXGBE_MSCA, IXGBE_MSCA_ADDR_CYCLE, IXGBE_MSCA_DEV_TYPE_SHIFT, IXGBE_MSCA_MDI_COMMAND, IXGBE_MSCA_NP_ADDR_SHIFT, IXGBE_MSCA_PHY_ADDR_SHIFT, IXGBE_MSCA_READ, IXGBE_MSRWD, IXGBE_MSRWD_READ_DATA_SHIFT, IXGBE_READ_REG, IXGBE_SUCCESS, IXGBE_WRITE_REG, ixgbe_hw::phy, and usec_delay.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_reset_phy_generic()

◆ ixgbe_reset_phy_nl()

◆ ixgbe_restart_auto_neg()

void ixgbe_restart_auto_neg ( struct ixgbe_hw hw)

ixgbe_restart_auto_neg - Restart auto negotiation on the PHY @hw: pointer to hardware structure

Definition at line 575 of file ixgbe_phy.c.

References ixgbe_check_reset_blocked(), IXGBE_MDIO_AUTO_NEG_CONTROL, IXGBE_MDIO_AUTO_NEG_DEV_TYPE, IXGBE_MII_RESTART, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, and ixgbe_phy_operations::write_reg.

Referenced by ixgbe_setup_phy_link_generic(), and ixgbe_setup_phy_link_tnx().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_set_copper_phy_power()

s32 ixgbe_set_copper_phy_power ( struct ixgbe_hw hw,
bool  on 
)

ixgbe_set_copper_phy_power - Control power for copper phy @hw: pointer to hardware structure @on: true for on, false for off

Definition at line 2669 of file ixgbe_phy.c.

References ixgbe_check_reset_blocked(), IXGBE_MDIO_PHY_SET_LOW_POWER_MODE, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL, IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, ixgbe_mng_present(), ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_operations::read_reg, and ixgbe_phy_operations::write_reg.

Referenced by ixgbe_enter_lplu_t_x550em(), ixgbe_get_lasi_ext_t_x550em(), and ixgbe_init_ops_X540().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_set_i2c_data()

static s32 ixgbe_set_i2c_data ( struct ixgbe_hw hw,
u32 i2cctl,
bool  data 
)
static

ixgbe_set_i2c_data - Sets the I2C data bit @hw: pointer to hardware structure @i2cctl: Current value of I2CCTL register @data: I2C data value (0 or 1) to set

Sets the I2C data bit Asserts the I2C data output enable on X550 hardware.

Definition at line 2529 of file ixgbe_phy.c.

References DEBUGFUNC, ERROR_REPORT2, IXGBE_ERR_I2C, IXGBE_ERROR_INVALID_STATE, ixgbe_get_i2c_data(), IXGBE_I2C_DATA_OE_N_EN_BY_MAC, IXGBE_I2C_DATA_OUT_BY_MAC, IXGBE_I2C_T_FALL, IXGBE_I2C_T_RISE, IXGBE_I2C_T_SU_DATA, IXGBE_I2CCTL_BY_MAC, IXGBE_READ_REG, IXGBE_SUCCESS, IXGBE_WRITE_FLUSH, IXGBE_WRITE_REG, and usec_delay.

Referenced by ixgbe_clock_out_i2c_bit(), ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), and ixgbe_i2c_stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_setup_phy_link_generic()

◆ ixgbe_setup_phy_link_speed_generic()

s32 ixgbe_setup_phy_link_speed_generic ( struct ixgbe_hw hw,
ixgbe_link_speed  speed,
bool  autoneg_wait_to_complete 
)

ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities @hw: pointer to hardware structure @speed: new link speed @autoneg_wait_to_complete: unused

Definition at line 885 of file ixgbe_phy.c.

References ixgbe_phy_info::autoneg_advertised, DEBUGFUNC, IXGBE_LINK_SPEED_100_FULL, IXGBE_LINK_SPEED_10_FULL, IXGBE_LINK_SPEED_10GB_FULL, IXGBE_LINK_SPEED_1GB_FULL, IXGBE_LINK_SPEED_2_5GB_FULL, IXGBE_LINK_SPEED_5GB_FULL, ixgbe_setup_phy_link(), IXGBE_SUCCESS, ixgbe_hw::phy, and UNREFERENCED_1PARAMETER.

Referenced by ixgbe_init_phy_ops_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_setup_phy_link_tnx()

◆ ixgbe_tn_check_overtemp()

s32 ixgbe_tn_check_overtemp ( struct ixgbe_hw hw)

ixgbe_tn_check_overtemp - Checks if an overtemp occurred. @hw: pointer to hardware structure

Checks if the LASI temp alarm status was triggered due to overtemp

Definition at line 2641 of file ixgbe_phy.c.

References DEBUGFUNC, ixgbe_hw::device_id, ERROR_REPORT1, IXGBE_DEV_ID_82599_T3_LOM, IXGBE_ERR_OVERTEMP, IXGBE_ERROR_CAUTION, IXGBE_MDIO_PMA_PMD_DEV_TYPE, IXGBE_SUCCESS, IXGBE_TN_LASI_STATUS_REG, IXGBE_TN_LASI_STATUS_TEMP_ALARM, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::read_reg.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_validate_phy_addr()

bool ixgbe_validate_phy_addr ( struct ixgbe_hw hw,
u32  phy_addr 
)

ixgbe_validate_phy_addr - Determines phy address is valid @hw: pointer to hardware structure @phy_addr: PHY address

Definition at line 401 of file ixgbe_phy.c.

References ixgbe_phy_info::addr, DEBUGFUNC, DEBUGOUT1, IXGBE_MDIO_PHY_ID_HIGH, IXGBE_MDIO_PMA_PMD_DEV_TYPE, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::read_reg.

Referenced by ixgbe_probe_phy().

Here is the caller graph for this function:

◆ ixgbe_write_i2c_byte_generic()

s32 ixgbe_write_i2c_byte_generic ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8  data 
)

ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to write @dev_addr: address to write to @data: value to write

Performs byte write operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 2190 of file ixgbe_phy.c.

References ixgbe_write_i2c_byte_generic_int().

Referenced by ixgbe_init_phy_ops_generic(), and ixgbe_write_i2c_byte_82599().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_write_i2c_byte_generic_int()

static s32 ixgbe_write_i2c_byte_generic_int ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8  data,
bool  lock 
)
static

ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to write @dev_addr: address to write to @data: value to write @lock: true if to take and release semaphore

Performs byte write operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 2119 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGFUNC, DEBUGOUT, ixgbe_clock_out_i2c_byte(), IXGBE_ERR_SWFW_SYNC, ixgbe_get_i2c_ack(), ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), ixgbe_i2c_stop(), IXGBE_SUCCESS, ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, and ixgbe_mac_operations::release_swfw_sync.

Referenced by ixgbe_write_i2c_byte_generic(), and ixgbe_write_i2c_byte_generic_unlocked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_write_i2c_byte_generic_unlocked()

s32 ixgbe_write_i2c_byte_generic_unlocked ( struct ixgbe_hw hw,
u8  byte_offset,
u8  dev_addr,
u8  data 
)

ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C @hw: pointer to hardware structure @byte_offset: byte offset to write @dev_addr: address to write to @data: value to write

Performs byte write operation to SFP module's EEPROM over I2C interface at a specified device address.

Definition at line 2207 of file ixgbe_phy.c.

References ixgbe_write_i2c_byte_generic_int().

Referenced by ixgbe_init_phy_ops_generic().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_write_i2c_combined_generic_int()

s32 ixgbe_write_i2c_combined_generic_int ( struct ixgbe_hw hw,
u8  addr,
u16  reg,
u16  val,
bool  lock 
)

ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation @hw: pointer to the hardware structure @addr: I2C bus address to write to @reg: I2C device register to write to @val: value to write @lock: true if to take and release semaphore

Returns an error code on error.

Definition at line 187 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGOUT, IXGBE_ERR_I2C, IXGBE_ERR_SWFW_SYNC, ixgbe_i2c_bus_clear(), ixgbe_i2c_start(), ixgbe_i2c_stop(), ixgbe_ones_comp_byte_add(), ixgbe_out_i2c_byte_ack(), ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, and ixgbe_mac_operations::release_swfw_sync.

Referenced by ixgbe_write_i2c_combined_generic(), and ixgbe_write_i2c_combined_generic_unlocked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ixgbe_write_i2c_eeprom_generic()

s32 ixgbe_write_i2c_eeprom_generic ( struct ixgbe_hw hw,
u8  byte_offset,
u8  eeprom_data 
)

ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface @hw: pointer to hardware structure @byte_offset: EEPROM byte offset to write @eeprom_data: value to write

Performs byte write operation to SFP module's EEPROM over I2C interface.

Definition at line 1960 of file ixgbe_phy.c.

References DEBUGFUNC, IXGBE_I2C_EEPROM_DEV_ADDR, ixgbe_phy_info::ops, ixgbe_hw::phy, and ixgbe_phy_operations::write_i2c_byte.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_write_phy_reg_generic()

s32 ixgbe_write_phy_reg_generic ( struct ixgbe_hw hw,
u32  reg_addr,
u32  device_type,
u16  phy_data 
)

ixgbe_write_phy_reg_generic - Writes a value to specified PHY register using SWFW lock- this function is needed in most cases @hw: pointer to hardware structure @reg_addr: 32 bit PHY register to write @device_type: 5 bit device type @phy_data: Data to write to the PHY register

Definition at line 781 of file ixgbe_phy.c.

References ixgbe_mac_operations::acquire_swfw_sync, DEBUGFUNC, IXGBE_ERR_SWFW_SYNC, IXGBE_SUCCESS, ixgbe_hw::mac, ixgbe_mac_info::ops, ixgbe_phy_info::ops, ixgbe_hw::phy, ixgbe_phy_info::phy_semaphore_mask, ixgbe_mac_operations::release_swfw_sync, and ixgbe_phy_operations::write_reg_mdi.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function:

◆ ixgbe_write_phy_reg_mdi()

s32 ixgbe_write_phy_reg_mdi ( struct ixgbe_hw hw,
u32  reg_addr,
u32  device_type,
u16  phy_data 
)

ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register without SWFW lock @hw: pointer to hardware structure @reg_addr: 32 bit PHY register to write @device_type: 5 bit device type @phy_data: Data to write to the PHY register

Definition at line 707 of file ixgbe_phy.c.

References ixgbe_phy_info::addr, ERROR_REPORT1, IXGBE_ERR_PHY, IXGBE_ERROR_POLLING, IXGBE_MDIO_COMMAND_TIMEOUT, IXGBE_MSCA, IXGBE_MSCA_ADDR_CYCLE, IXGBE_MSCA_DEV_TYPE_SHIFT, IXGBE_MSCA_MDI_COMMAND, IXGBE_MSCA_NP_ADDR_SHIFT, IXGBE_MSCA_PHY_ADDR_SHIFT, IXGBE_MSCA_WRITE, IXGBE_MSRWD, IXGBE_READ_REG, IXGBE_SUCCESS, IXGBE_WRITE_REG, ixgbe_hw::phy, and usec_delay.

Referenced by ixgbe_init_phy_ops_generic().

Here is the caller graph for this function: