Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Sep 2021 00:48:25 GMT
From:      Kevin Bowling <kbowling@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 74e5adf09fd3 - stable/12 - ixgbe: create function to restart autoneg
Message-ID:  <202109140048.18E0mPFZ045518@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=74e5adf09fd39119b0189e73c94fd6dfc6092129

commit 74e5adf09fd39119b0189e73c94fd6dfc6092129
Author:     Guinan Sun <guinanx.sun@intel.com>
AuthorDate: 2020-07-09 08:00:36 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-09-14 00:46:16 +0000

    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
    
    (cherry picked from commit 80a39a2bda8208c716f614f792c8d9a3628d6c26)
---
 sys/dev/ixgbe/ixgbe_phy.c | 48 ++++++++++++++++++++++-------------------------
 sys/dev/ixgbe/ixgbe_phy.h |  1 +
 2 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/sys/dev/ixgbe/ixgbe_phy.c b/sys/dev/ixgbe/ixgbe_phy.c
index c1cbc282c790..e9e1dd2d8c1c 100644
--- a/sys/dev/ixgbe/ixgbe_phy.c
+++ b/sys/dev/ixgbe/ixgbe_phy.c
@@ -573,6 +573,26 @@ out:
 	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;
 }
 
diff --git a/sys/dev/ixgbe/ixgbe_phy.h b/sys/dev/ixgbe/ixgbe_phy.h
index 9fd3f6d2163e..7f51ccc1dd2c 100644
--- a/sys/dev/ixgbe/ixgbe_phy.h
+++ b/sys/dev/ixgbe/ixgbe_phy.h
@@ -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,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109140048.18E0mPFZ045518>