ixgbe: create function to restart autoneg
This patch is for restarting auto negotiation on PHY. Signed-off-by: Jakub Chylkowski <jakubx.chylkowski@intel.com> Signed-off-by: Guinan Sun <guinanx.sun@intel.com> Reviewed-by: Wei Zhao <wei.zhao1@intel.com> Approved by: imp Obtained from: DPDK (664ea2614eafbec8eda5c86764ff047475a1e5c6) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D31621
This commit is contained in:
parent
ff8db817ab
commit
80a39a2bda
@ -573,6 +573,26 @@ s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_restart_auto_neg - Restart auto negotiation on the PHY
|
||||
* @hw: pointer to hardware structure
|
||||
**/
|
||||
void ixgbe_restart_auto_neg(struct ixgbe_hw *hw)
|
||||
{
|
||||
u16 autoneg_reg;
|
||||
|
||||
/* Check if PHY reset is blocked by MNG FW */
|
||||
if (ixgbe_check_reset_blocked(hw))
|
||||
return;
|
||||
|
||||
/* Restart PHY auto-negotiation. */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
|
||||
autoneg_reg |= IXGBE_MII_RESTART;
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
|
||||
* the SWFW lock
|
||||
@ -857,19 +877,7 @@ s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
|
||||
autoneg_reg);
|
||||
|
||||
/* Blocked by MNG FW so don't reset PHY */
|
||||
if (ixgbe_check_reset_blocked(hw))
|
||||
return status;
|
||||
|
||||
/* Restart PHY auto-negotiation. */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
|
||||
|
||||
autoneg_reg |= IXGBE_MII_RESTART;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
|
||||
|
||||
ixgbe_restart_auto_neg(hw);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -1093,19 +1101,7 @@ s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
|
||||
autoneg_reg);
|
||||
}
|
||||
|
||||
/* Blocked by MNG FW so don't reset PHY */
|
||||
if (ixgbe_check_reset_blocked(hw))
|
||||
return status;
|
||||
|
||||
/* Restart PHY auto-negotiation. */
|
||||
hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
|
||||
|
||||
autoneg_reg |= IXGBE_MII_RESTART;
|
||||
|
||||
hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
|
||||
IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
|
||||
|
||||
ixgbe_restart_auto_neg(hw);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -163,6 +163,7 @@ enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id);
|
||||
s32 ixgbe_get_phy_id(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw);
|
||||
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_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
|
||||
|
Loading…
Reference in New Issue
Block a user