Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21d882eb authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher
Browse files

ixgbe: fix link status check for copper X550em



Read the PHY register twice in order to get the correct value for
autoneg_status.

Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Tested-by: default avatarKrishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 4dc4000b
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -1556,7 +1556,7 @@ static s32 ixgbe_check_link_t_X550em(struct ixgbe_hw *hw,
				     bool link_up_wait_to_complete)
{
	u32 status;
	u16 autoneg_status;
	u16 i, autoneg_status;

	if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper)
		return IXGBE_ERR_CONFIG;
@@ -1569,12 +1569,17 @@ static s32 ixgbe_check_link_t_X550em(struct ixgbe_hw *hw,
		return status;

	/* MAC link is up, so check external PHY link.
	  * Read this twice back to back to indicate current status.
	 * Link status is latching low, and can only be used to detect link
	 * drop, and not the current status of the link without performing
	 * back-to-back reads.
	 */
	for (i = 0; i < 2; i++) {
		status = hw->phy.ops.read_reg(hw, MDIO_STAT1, MDIO_MMD_AN,
					      &autoneg_status);

		if (status)
			return status;
	}

	/* If external PHY link is not up, then indicate link not up */
	if (!(autoneg_status & IXGBE_MDIO_AUTO_NEG_LINK_STATUS))